File "yit-plugin-panel.js"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/yith-woocommerce-wishlist/plugin-fw/assets/js/yit-plugin-panel.js
File size: 13.18 KB
MIME-type: text/plain
Charset: utf-8
/* global setUserSetting, yith, yithFwPluginPanel */
jQuery( function ( $ ) {
// Handle dependencies.
function dependencies_handler( id, deps, values, type ) {
var result = true;
if ( typeof ( deps ) == 'string' ) {
if ( deps.substr( 0, 6 ) === ':radio' ) {
deps = deps + ':checked';
}
var depsOn = $( deps ),
depsOnType = depsOn.attr( 'type' ),
val = depsOn.val();
switch ( depsOnType ) {
case 'checkbox':
val = depsOn.is( ':checked' ) ? 'yes' : 'no';
break;
case 'radio':
val = depsOn.find( 'input[type="radio"]' ).filter( ':checked' ).val();
break;
}
values = values.split( ',' );
for ( var i = 0; i < values.length; i++ ) {
if ( val != values[ i ] ) {
result = false;
} else {
result = true;
break;
}
}
}
var $current_field = $( id ),
$current_container = $( id + '-container' ).closest( 'tr' ); // container for YIT Plugin Panel
if ( $current_container.length < 1 ) {
// container for YIT Plugin Panel WooCommerce
$current_container = $current_field.closest( '.yith-plugin-fw__panel__option, .yith-plugin-fw-panel-wc-row, .yith-toggle-content-row' );
}
var types = type.split( '-' ), j;
for ( j in types ) {
var current_type = types[ j ];
if ( !result ) {
switch ( current_type ) {
case 'disable':
$current_container.addClass( 'yith-disabled' );
$current_field.attr( 'disabled', true );
break;
case 'hide':
case 'hideNow':
$current_container.hide();
break;
case 'hideme':
$current_field.hide();
break;
case 'fadeInOut':
case 'fadeOut':
$current_container.hide( 500 );
break;
case 'fadeIn':
default:
$current_container.hide();
}
} else {
switch ( current_type ) {
case 'disable':
$current_container.removeClass( 'yith-disabled' );
$current_field.attr( 'disabled', false );
break;
case 'hide':
case 'hideNow':
$current_container.show();
break;
case 'hideme':
$current_field.show();
break;
case 'fadeOut':
$current_container.show();
break;
case 'fadeInOut':
case 'fadeIn':
default:
$current_container.show( 500 );
}
}
}
}
function init_dependencies() {
$( '[data-dep-target]:not( .deps-initialized )' ).each( function () {
var t = $( this );
if ( t.closest( '.metaboxes-tab' ).length ) {
// Let meta-boxes handle their own deps.
return;
}
// init field deps
t.addClass( 'deps-initialized' );
var field = '#' + t.data( 'dep-target' ),
dep = '#' + t.data( 'dep-id' ),
value = t.data( 'dep-value' ),
type = t.data( 'dep-type' );
$( dep ).on( 'change', function () {
dependencies_handler( field, dep, value.toString(), type );
} ).trigger( 'change' );
} );
}
init_dependencies();
$( document ).on( 'yith-plugin-fw-panel-init-deps', init_dependencies );
// re-init deps after an add toggle action
$( document ).on( 'yith-add-box-button-toggle', init_dependencies );
//connected list
$( '.rm_connectedlist' ).each( function () {
var ul = $( this ).find( 'ul' );
var input = $( this ).find( ':hidden' );
var sortable = ul.sortable( {
connectWith: ul,
update : function ( event, ui ) {
var value = {};
ul.each( function () {
var options = {};
$( this ).children().each( function () {
options[ $( this ).data( 'option' ) ] = $( this ).text();
} );
value[ $( this ).data( 'list' ) ] = options;
} );
input.val( ( JSON.stringify( value ) ).replace( /[\\"']/g, '\\$&' ).replace( /\u0000/g, '\\0' ) );
}
} ).disableSelection();
} );
//google analytics generation
$( function () {
$( '.google-analytic-generate' ).click( function () {
var editor = $( '#' + $( this ).data( 'textarea' ) ).data( 'codemirrorInstance' );
var gatc = $( '#' + $( this ).data( 'input' ) ).val();
var basename = $( this ).data( 'basename' );
var text = "(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n";
text += "(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement( o ),\n";
text += "m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n";
text += "})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n";
text += "ga('create', '" + gatc + "', '" + basename + "');\n";
text += "ga('send', 'pageview');\n";
editor.replaceRange(
text,
editor.getCursor( 'start' ),
editor.getCursor( 'end' )
);
} );
} );
// Prevent the WC message for changes when leaving the panel page
$( '.yith-plugin-fw-panel .woo-nav-tab-wrapper' ).removeClass( 'woo-nav-tab-wrapper' ).addClass( 'yith-nav-tab-wrapper' );
( function () {
var noticesWrapper = $( '#yith-plugin-fw__panel__notices' ),
wrap = $( '.wrap.yith-plugin-ui, .yith-plugin-fw-wp-page-wrapper' ).first(), // TODO: remove when all plugins will use the ui-version 2, since notices will be shown in the noticesWrapper.
notices = $( 'div.updated, div.error, div.notice, .yith-plugin-fw__notice, .yith-plugin-fw__notice-banner' ).not( '.inline, .yith-plugin-fw--inline' );
// Prevent moving notices into the wrapper
notices.addClass( 'inline' );
if ( noticesWrapper.length ) {
noticesWrapper.append( notices );
} else if ( wrap.length ) {
wrap.prepend( notices );
}
} )();
// Additional wrapping just in case 'wrap' div is placed within a sub-tab and it's not already wrapped twice.
// TODO: Deprecated usage, it'll be removed, since also custom panels should use the automatic-wrapping through 'show_container' param.
( function () {
var active_subnav = $( '.yith-nav-sub-tab.nav-tab-active' ),
subnav_wrap = $( '.yith-plugin-fw-wp-page__sub-tab-wrap' );
if ( active_subnav.length && !subnav_wrap.length ) {
var mainWrapper = $( '.yith-plugin-fw-wp-page-wrapper' );
if ( !mainWrapper.length ) {
mainWrapper = $( '#wpbody-content > .yith-plugin-ui' );
}
if ( mainWrapper ) {
var defaultWrap = mainWrapper.find( '.yit-admin-panel-content-wrap' ); // at first, search for default wrap.
if ( defaultWrap.length ) {
defaultWrap.addClass( 'has-subnav' );
} else {
// try to wrap a generic wrap div in main wrapper
mainWrapper.find( '.wrap' ).wrap( '<div class="yith-plugin-fw-wp-page__sub-tab-wrap"></div>' );
}
}
}
} )();
// Float save button.
( function () {
var floatSaveButton = $( '#yith-plugin-fw-float-save-button' ),
mainForm = $( '#plugin-fw-wc' ),
mainFormElement = mainForm.length ? mainForm.get( 0 ) : false,
saveButton = document.querySelector( '#main-save-button' );
function updateValuesForSpecialEditors() {
if ( 'tinyMCE' in window && 'triggerSave' in window.tinyMCE ) {
// Trigger saving to serialize the correct value for WP Editors.
window.tinyMCE.triggerSave();
}
// Trigger saving to serialize the correct value for each Codemirror Editor.
$( '.codemirror.codemirror--initialized' ).each( function () {
var editor = $( this ).data( 'codemirrorInstance' ) || false;
if ( editor && 'codemirror' in editor ) {
editor.codemirror.save();
}
} );
}
function checkButtonPosition() {
if ( isInViewport( saveButton ) ) {
floatSaveButton.removeClass( 'visible' );
} else {
floatSaveButton.addClass( 'visible' );
}
}
function isInViewport( el ) {
var rect = el.getBoundingClientRect(),
viewport = {
width : window.innerWidth || document.documentElement.clientWidth,
height: window.innerHeight || document.documentElement.clientHeight
};
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.top <= viewport.height &&
rect.left <= viewport.width
);
}
if ( floatSaveButton.length > 0 && mainForm.length > 0 ) {
checkButtonPosition();
document.addEventListener( 'scroll', checkButtonPosition, { passive: true } );
$( document ).on( 'click', '#yith-plugin-fw-float-save-button', function ( e ) {
e.preventDefault();
updateValuesForSpecialEditors();
if ( !!mainFormElement && !mainFormElement.checkValidity() ) {
mainFormElement.reportValidity();
return;
}
floatSaveButton.block(
{
message : null,
overlayCSS: {
background: 'transparent',
opacity : 0.6
}
}
);
$.post( document.location.href, mainForm.serialize() )
.done( function ( response ) {
floatSaveButton.unblock()
.addClass( 'green' )
.fadeOut( 300 )
.html( floatSaveButton.data( 'saved-label' ) )
.fadeIn( 300 )
.delay( 2500 )
.queue(
function ( next ) {
floatSaveButton.fadeOut(
500,
function () {
$( this ).removeClass( 'green' );
$( this ).html( $( this ).data( 'default-label' ) ).fadeIn( 500 );
}
);
next();
} );
// Prevent WooCommerce warning for changes without saving.
window.onbeforeunload = null;
$( document ).trigger( 'yith-plugin-fw-float-save-button-after-saving', [response] );
} );
} );
}
} )();
// Save - Reset.
( function () {
$( document ).on( 'click', '#yith-plugin-fw__panel__content__save', function () {
// Prevent WooCommerce warning for changes without saving.
window.onbeforeunload = null;
var theForm = $( 'form#yith-plugin-fw-panel, form#plugin-fw-wc' );
if ( theForm.length ) {
var formElement = theForm.get( 0 );
if ( formElement.checkValidity() ) {
theForm.submit();
} else {
formElement.reportValidity();
}
}
} );
$( document ).on( 'click', '#yith-plugin-fw__panel__content__reset', function () {
// Prevent WooCommerce warning for changes without saving.
window.onbeforeunload = null;
$( 'form#yith-plugin-fw-panel-reset, form#plugin-fw-wc-reset' ).submit();
} );
$( document ).on( 'submit', 'form#yith-plugin-fw-panel-reset, form#plugin-fw-wc-reset', function ( e ) {
var form = $( this ),
confirmed = form.data( 'confirmed' );
if ( confirmed === 'yes' ) {
return;
}
e.preventDefault();
var modalOptions = {
title : yithFwPluginPanel.i18n.resetConfirmTitle,
message : yithFwPluginPanel.i18n.resetConfirmMessage,
closeAfterConfirm: false,
onConfirm : function () {
form.data( 'confirmed', 'yes' );
form.submit();
}
};
yith.ui.confirm( modalOptions );
} );
} )();
// Panel menu.
( function () {
function getSidebar() {
if ( !this.__sidebar || !( 'node' in this.__sidebar ) || !( 'hasClass' in this.__sidebar.node ) || !this.__sidebar.node.hasClass( 'yith-plugin-fw__panel__sidebar--initialized' ) ) {
var sidebar = {};
sidebar.node = $( '.yith-plugin-fw__panel__sidebar' );
sidebar.node.addClass( 'yith-plugin-fw__panel__sidebar--initialized' );
sidebar.isCollapsed = function () {
return sidebar.node.hasClass( 'yith-plugin-fw__panel__sidebar--collapsed' );
};
sidebar.isFixed = function () {
return 'fixed' !== sidebar.node.css( 'position' );
};
sidebar.setCollapsed = function ( collapsed ) {
if ( collapsed ) {
sidebar.node.addClass( 'yith-plugin-fw__panel__sidebar--collapsed' );
setUserSetting( 'yithFwSidebarFold', 'f' );
} else {
sidebar.node.removeClass( 'yith-plugin-fw__panel__sidebar--collapsed' );
setUserSetting( 'yithFwSidebarFold', 'o' );
}
};
sidebar.setOpen = function ( open ) {
var animationClass = !document.body.classList.contains( 'rtl' ) ? 'yith-plugin-fw-animate__appear-from-left-full' : 'yith-plugin-fw-animate__appear-from-right-full';
if ( open ) {
sidebar.node.addClass( ['yith-plugin-fw--open', animationClass] );
} else {
sidebar.node.removeClass( ['yith-plugin-fw--open', animationClass] );
}
};
this.__sidebar = sidebar;
}
return this.__sidebar;
}
$( document ).on( 'click', '.yith-plugin-fw__panel__mobile__header__toggle', function () {
var sidebar = getSidebar();
sidebar.setOpen( true );
$( document.body ).append( $( '<div id="yith-plugin-fw__panel__sidebar__mobile-backdrop"></div>' ) );
} );
$( document ).on( 'click', '#yith-plugin-fw__panel__sidebar__mobile-backdrop', function () {
var sidebar = getSidebar();
sidebar.setOpen( false );
$( this ).remove();
} );
$( document ).on( 'click', '.yith-plugin-fw__panel__sidebar__collapse', function () {
var sidebar = getSidebar();
sidebar.setCollapsed( !sidebar.isCollapsed() );
} );
$( document ).on( 'click', '.yith-plugin-fw__panel__menu-item.yith-plugin-fw--has-submenu a.yith-plugin-fw__panel__menu-item__content', function ( event ) {
event.preventDefault();
var sidebar = getSidebar();
if ( sidebar.isCollapsed() && sidebar.isFixed() ) {
return;
}
var toggle = $( event.target ),
item = toggle.closest( '.yith-plugin-fw__panel__menu-item' ),
submenu = item.find( '.yith-plugin-fw__panel__submenu' );
if ( item.is( '.yith-plugin-fw--open' ) ) {
submenu.slideUp( 200 );
} else {
submenu.slideDown( 200 );
}
item.toggleClass( 'yith-plugin-fw--open' );
} );
} )();
} )
;