516 lines
10 KiB
JavaScript
516 lines
10 KiB
JavaScript
/*!
|
|
|
|
// ****************************
|
|
// ********** USAGE **********
|
|
// ****************************
|
|
RsTooltips(
|
|
|
|
true, // initialize the tooltip mode?
|
|
['add_layer', 'change_slides'] // array of tooltips to show and in what order
|
|
|
|
);
|
|
|
|
*/
|
|
|
|
(function() {
|
|
|
|
|
|
|
|
var data,
|
|
shell,
|
|
bodies,
|
|
tipList,
|
|
toolTip,
|
|
tipText,
|
|
section,
|
|
linkButton,
|
|
totalSteps,
|
|
currentTip,
|
|
currentStep,
|
|
currentData,
|
|
currentTarget,
|
|
toolTipWidth,
|
|
rightToolbar;
|
|
|
|
|
|
var defaults = [
|
|
|
|
'back',
|
|
'slides',
|
|
'add_slide',
|
|
'global_layers',
|
|
'slide_order',
|
|
'add_layer',
|
|
'add_layer_text',
|
|
'add_layer_image',
|
|
'add_layer_button',
|
|
'add_layer_shape',
|
|
'add_layer_video',
|
|
'add_layer_audio',
|
|
'add_layer_object',
|
|
'add_layer_row',
|
|
'add_layer_group',
|
|
'add_layer_layerlibrary',
|
|
'add_layer_importlayer',
|
|
'edit_layer_name',
|
|
'duplicate_layer',
|
|
'copy_layer',
|
|
'paste_layer',
|
|
'delete_layer',
|
|
'lock_layers',
|
|
'unlock_layers',
|
|
'hide_highlight_boxes',
|
|
'show_hide_selected',
|
|
'set_all_visible',
|
|
'change_layer_order',
|
|
'layer_selections',
|
|
'undo_redo',
|
|
'device_switcher',
|
|
'help_mode',
|
|
'tooltip_button',
|
|
'quick_style',
|
|
'slider_settings',
|
|
'slider_navigation',
|
|
'slide_settings',
|
|
'layer_settings',
|
|
'shortcode',
|
|
'layout_type',
|
|
'layout_sizing',
|
|
'breakpoints',
|
|
'module_content',
|
|
'auto_rotate',
|
|
'lazy_loading',
|
|
'progress_bar',
|
|
'navigation_arrows',
|
|
'navigation_bullets',
|
|
'navigation_tabs',
|
|
'navigation_thumbs',
|
|
'slide_background',
|
|
'slide_animation',
|
|
'background_filter',
|
|
'slide_duration',
|
|
'slide_link',
|
|
'edit_text',
|
|
'font_size',
|
|
'font_family',
|
|
'font_color',
|
|
'layer_position',
|
|
'layer_animations',
|
|
'layer_hover',
|
|
'responsive_behavior',
|
|
'timeline_preview',
|
|
'save_module',
|
|
'preview_module'
|
|
|
|
];
|
|
|
|
function getData() {
|
|
|
|
jQuery('<link rel="stylesheet" type="text/css" href="' + RVS.ENV.plugin_url + 'admin/assets/css/tooltip.css" />').appendTo(jQuery('head'));
|
|
RVS.F.ajaxRequest('get_tooltips', {}, function(response) {
|
|
|
|
if(response.success) {
|
|
|
|
try {
|
|
data = JSON.stringify(response.data);
|
|
data = JSON.parse(data);
|
|
}
|
|
catch(e) {
|
|
data = false;
|
|
}
|
|
|
|
if(data) init();
|
|
else console.log('tooltip ajax error');
|
|
|
|
}
|
|
else {
|
|
console.log('tooltip ajax error');
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
function clonePreviewSave() {
|
|
|
|
jQuery(this).clone().addClass('tooltip-save-preview').insertAfter(toolTip);
|
|
|
|
}
|
|
|
|
function openToolTips() {
|
|
|
|
jQuery(shell).appendTo(jQuery('#rb_tlw'));
|
|
jQuery('.rs-tooltip-btn').not('.tooltip-link').on('click.tooltips', btnClick);
|
|
jQuery('.rs-tooltip-check').on('click.tooltips', cancelTips);
|
|
jQuery('#rs-tooltip-close').on('click.tooltips', exitTips);
|
|
|
|
toolTip = jQuery('#rs-tooltip');
|
|
tipText = jQuery('.tooltip-text');
|
|
section = jQuery('.tooltip-section');
|
|
|
|
toolTipWidth = toolTip.outerWidth();
|
|
linkButton = jQuery('.tooltip-link').on('click.tooltips', openLink);
|
|
|
|
rightToolbar = jQuery('#the_right_toolbar_inner');
|
|
tipList = window.RsTooltipList || defaults;
|
|
totalSteps = tipList.length;
|
|
currentStep = 0;
|
|
|
|
bodies = jQuery('body');
|
|
RVS.WIN.on('keydown.tooltips', keyShortcut).on('resize.tooltips', runStep);
|
|
jQuery('.rs-save-preview').each(clonePreviewSave);
|
|
|
|
runStep();
|
|
|
|
}
|
|
|
|
function openLink() {
|
|
|
|
window.open(this.dataset.href);
|
|
|
|
}
|
|
|
|
function closeToolTips() {
|
|
|
|
jQuery('.tooltip-hide-target').removeClass('tooltip-hide-target');
|
|
jQuery('.tip-clone').remove();
|
|
|
|
jQuery('.rs-tooltip-btn').off('.tooltips');
|
|
jQuery('.rs-tooltip-check').off('.tooltips');
|
|
jQuery('#rs-tooltip-close').off('.tooltips');
|
|
|
|
jQuery('#rs-tooltip').remove();
|
|
jQuery('.tooltip-save-preview').remove();
|
|
|
|
jQuery('body').removeClass('rb-tooltips-active');
|
|
RVS.WIN.off('.tooltips');
|
|
|
|
linkButton.off('.tooltips');
|
|
|
|
bodies = null;
|
|
toolTip = null;
|
|
tipText = null;
|
|
section = null;
|
|
currentTip = null;
|
|
linkButton = null;
|
|
rightToolbar = null;
|
|
currentTarget = null;
|
|
|
|
}
|
|
|
|
function cleanup() {
|
|
|
|
cancelAnimationFrame(displayStep);
|
|
|
|
}
|
|
|
|
function exitTips() {
|
|
|
|
cleanup();
|
|
closeToolTips();
|
|
|
|
}
|
|
|
|
function cancelTips() {
|
|
|
|
RVS.F.ajaxRequest('set_tooltip_preference', false, false, true, true);
|
|
exitTips();
|
|
|
|
}
|
|
|
|
function btnClick() {
|
|
|
|
if(this.id === 'rs-tooltip-next') {
|
|
currentStep++;
|
|
runStep();
|
|
}
|
|
else {
|
|
exitTips();
|
|
}
|
|
|
|
}
|
|
|
|
function nextButton() {
|
|
|
|
var btn = jQuery('#rs-tooltip-next');
|
|
if(!btn.is(':visible')) btn = jQuery('#rs-tooltip-gotit');
|
|
btn.click();
|
|
|
|
}
|
|
|
|
function runStep() {
|
|
|
|
cleanup();
|
|
currentTip = currentData.tooltips[tipList[currentStep]];
|
|
tipText.html(currentTip.text);
|
|
|
|
/*
|
|
if(currentTip.section) section.html(currentTip.section).show();
|
|
else section.hide();
|
|
*/
|
|
|
|
/*
|
|
if(currentTip.link) linkButton.attr('data-href', currentTip.link).text(currentTip.linkText).show();
|
|
else linkButton.hide();
|
|
*/
|
|
|
|
if(currentStep < totalSteps - 1) toolTip.removeClass('tooltip-gotit');
|
|
else toolTip.addClass('tooltip-gotit');
|
|
|
|
if(currentTip.trigger) {
|
|
|
|
let triggers = currentTip.trigger,
|
|
len = triggers.length;
|
|
|
|
for(let i = 0; i < len; i++) {
|
|
|
|
let trigger = jQuery(triggers[i]);
|
|
if(trigger.length) {
|
|
|
|
jQuery(trigger).first().click();
|
|
|
|
}
|
|
else {
|
|
|
|
console.log('tooltip trigger does not exist');
|
|
nextButton();
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
currentTarget = jQuery(currentTip.target).first();
|
|
if(!currentTarget.length) {
|
|
|
|
console.log('tooltip target does not exist');
|
|
nextButton();
|
|
return;
|
|
|
|
}
|
|
|
|
rightToolbar.scrollTop(0);
|
|
if(currentTip.scrollTo) {
|
|
|
|
let scrollTo = jQuery(currentTip.scrollTo).filter(':visible');
|
|
rightToolbar.scrollTop(scrollTo.offset().top - 50);
|
|
requestAnimationFrame(displayStep);
|
|
|
|
}
|
|
|
|
requestAnimationFrame(displayStep);
|
|
|
|
}
|
|
|
|
function displayStep() {
|
|
|
|
jQuery('.tooltip-hide-target').removeClass('tooltip-hide-target');
|
|
jQuery('.tip-clone').remove();
|
|
|
|
var offset = currentTarget.offset(),
|
|
position,
|
|
placer;
|
|
|
|
toolTip.removeClass(function(i, clas) {return (clas.match (/(^|\s)tip-\S+/g) || []).join(' ');});
|
|
toolTip.addClass('tip-' + currentTip.alignment);
|
|
|
|
if(currentTip.margin) toolTip.css('margin', currentTip.margin);
|
|
else toolTip.css('margin', 0);
|
|
|
|
var padding = currentTarget.css('padding'),
|
|
paddingLeft = Math.round(parseInt(currentTarget.css('padding-left'), 10) * 0.25);
|
|
cloned = currentTarget.clone();
|
|
|
|
cloned.find('input[type="radio"]').each(function() {this.name = this.name + '-tooltip';});
|
|
cloned.addClass('tip-clone').css({top: offset.top, left: offset.left, padding: padding}).insertBefore(toolTip);
|
|
|
|
if(currentTip.cssClass) cloned.addClass(currentTip.cssClass);
|
|
if(currentTip.elementcss) {
|
|
|
|
let css = currentTip.elementcss.split(';'),
|
|
len = css.length;
|
|
|
|
for(let i = 0; i < len; i++) {
|
|
|
|
let style = css[i].split(':');
|
|
cloned.css(jQuery.trim(style[0]), jQuery.trim(style[1]));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(currentTip.placer) {
|
|
|
|
placer = jQuery(currentTip.placer).first();
|
|
if(placer.length) {
|
|
|
|
offset = placer.offset();
|
|
|
|
}
|
|
else {
|
|
|
|
console.log('tooltip placer does not exist');
|
|
nextButton();
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var noFocus = currentTip.focus === 'none';
|
|
if(!currentTip.focus || noFocus) {
|
|
|
|
if(!noFocus) cloned.addClass('tip-focussed');
|
|
if(!placer) placer = currentTarget;
|
|
|
|
}
|
|
else {
|
|
|
|
let clas = currentTip.focusClass || 'tip-focussed';
|
|
focussed = cloned.find(currentTip.focus).first().addClass(clas);
|
|
|
|
if(!focussed.length) {
|
|
|
|
console.log('tooltip focus does not exist');
|
|
nextButton();
|
|
return;
|
|
|
|
}
|
|
|
|
if(!placer) {
|
|
placer = focussed;
|
|
offset = placer.offset();
|
|
}
|
|
|
|
}
|
|
|
|
position = getPosition(placer, currentTip.alignment);
|
|
toolTip.css({left: offset.left + position.x - paddingLeft, top: offset.top + position.y});
|
|
|
|
currentTarget.addClass('tooltip-hide-target');
|
|
bodies.addClass('rb-tooltips-active');
|
|
|
|
if(!currentTip.hidePrevSave) bodies.removeClass('tooltip-hide-preview-save');
|
|
else bodies.addClass('tooltip-hide-preview-save');
|
|
|
|
}
|
|
|
|
function getPosition(target, align) {
|
|
|
|
var xx,
|
|
yy;
|
|
|
|
switch(align) {
|
|
|
|
case 'top':
|
|
case 'bottom':
|
|
xx = (Math.round(target.outerWidth() * 0.5) - Math.round(toolTipWidth * 0.5));
|
|
break;
|
|
|
|
case 'left':
|
|
case 'right':
|
|
yy = -(Math.round(toolTip.outerHeight() * 0.5) - Math.round(target.outerHeight() * 0.5));
|
|
break;
|
|
|
|
case 'bottom-left':
|
|
case 'top-left':
|
|
case 'right-top':
|
|
xx = -toolTip.width();
|
|
break;
|
|
|
|
case 'bottom-right':
|
|
case 'top-right':
|
|
xx = target.outerWidth();
|
|
break;
|
|
|
|
}
|
|
|
|
switch(align) {
|
|
|
|
case 'top':
|
|
case 'right-top':
|
|
yy = -(target.outerHeight() + toolTip.height());
|
|
break;
|
|
|
|
case 'top-left':
|
|
case 'top-right':
|
|
yy = 0;
|
|
break;
|
|
|
|
case 'bottom':
|
|
case 'bottom-left':
|
|
case 'bottom-right':
|
|
yy = target.outerHeight();
|
|
break;
|
|
|
|
case 'left':
|
|
xx = -toolTipWidth;
|
|
break;
|
|
|
|
case 'right':
|
|
xx = target.outerWidth();
|
|
break;
|
|
|
|
}
|
|
|
|
return {x: xx, y: yy};
|
|
|
|
}
|
|
|
|
function keyShortcut(e) {
|
|
|
|
if(e.keyCode === 13) nextButton();
|
|
|
|
}
|
|
|
|
function init() {
|
|
|
|
currentData = jQuery.extend(true, {}, data);
|
|
shell =
|
|
|
|
'<div id="rs-tooltip">' +
|
|
'<div id="rs-tooltip-top">' +
|
|
'<span class="rs-tooltip-text"><span class="tooltip-section"></span><span class="tooltip-text"></span></span>' +
|
|
'<span class="rs-tooltip-btn tooltip-link" data-href="tooltip-link"></span><span id="rs-tooltip-next" class="rs-tooltip-btn"><i class="material-icons">redo</i>' + currentData.translations.next_tip + '<span class="rs-tooltip-return-icon"></span></span><span id="rs-tooltip-gotit" class="rs-tooltip-btn"><i class="material-icons">thumb_up</i>' + currentData.translations.got_it +'</span>' +
|
|
'</div>' +
|
|
'<div id="rs-tooltip-bottom"><div><span class="rs-tooltip-check"></span>' + currentData.translations.hide_tips + '</div></div>' +
|
|
'<span id="rs-tooltip-close"><i class="material-icons">close</i></span>' +
|
|
'</div>';
|
|
|
|
var btn = jQuery('.tooltip_wrap'),
|
|
defs = btn.data('tooltip-definitions');
|
|
|
|
if(defs) {
|
|
|
|
jQuery.extend(true, currentData.tooltips, defs);
|
|
btn.removeData('tooltip-definitions');
|
|
|
|
}
|
|
|
|
jQuery(document).on('start-tooltips', openToolTips);
|
|
btn.data('scriptready', true);
|
|
openToolTips();
|
|
|
|
}
|
|
|
|
getData();
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|