/*! // **************************** // ********** 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(); })();