/** * Combine scripts for Customizer Controls. * * @package Blogbuster */ ( function( api ) { /*--------------- Tabs Control ------------------*/ // Tab Control api.Tabs = []; api.Tab = api.Control.extend({ ready: function () { var control = this; control.container.find('li.section-tab-button').click(function (e) { var key = jQuery(this).data('tab'); e.preventDefault(); control.container.find('li.section-tab-button').removeClass('active'); jQuery(this).addClass('active'); control.toggleActiveControls(key); }); api.Tabs.push(control.id); }, toggleActiveControls: function (key) { var control = this, currentFields = control.params.choices[key].fields; _.each(control.params.fields, function (id) { var tabControl = api.control(id); if (undefined !== tabControl) { if (tabControl.active() && jQuery.inArray(id, currentFields) >= 0) { tabControl.toggle(true); } else { tabControl.toggle(false); } } }); } }); jQuery.extend(api.controlConstructor, { 'mt-tabs': api.Tab }); api.bind('ready', function () { _.each(api.Tabs, function (id) { var control = api.control(id); var iniID = control.container.find('li.active').data('tab'); control.toggleActiveControls(iniID); }); }); /*--------------- Heading Toggle Control ------------------*/ api.controlConstructor['mt-heading-toggle'] = api.Control.extend( { ready: function() { var control = this, container = control.container; // on trigger action container.on( "click", function() { var _this = jQuery(this); _this.find(".toggle-button .dashicons").toggleClass("dashicons-arrow-down-alt2 dashicons-arrow-up-alt2"); _this.nextUntil( ".customize-control-mt-heading-toggle" ).slideToggle(); }) } }); /*--------------- Typography Control------------------------*/ api.controlConstructor['mt-typography'] = api.Control.extend( { ready: function() { var control = this; control.container.on( 'change', '.typography-font-style select', function() { control.settings['style'].set( jQuery( this ).val() ); }); control.container.on( 'click', '.typography-font-transform input', function() { control.settings['transform'].set( jQuery( this ).val() ); }); control.container.on( 'change', '.typography-text-decoration select', function() { control.settings['text_decoration'].set( jQuery( this ).val() ); }); } } ); })(wp.customize); jQuery(document).ready(function($) { /*--------------- Custom controls extra -----------*/ $('.customize-control-select2').select2({ allowClear: true }); /*--------------- Repeater field ------------------*/ /** * Function for repeater field */ function blogbuster_refresh_repeater_values(){ $(".mt-repeater-field-control-wrap").each(function(){ var values = []; var $this = $(this); $this.find(".mt-repeater-field-control").each(function(){ var valueToPush = {}; $(this).find('[data-name]').each(function(){ if( $(this).attr('type') === 'checkbox'){ dataValue = ( $(this).is(':checked') ) ? 'on' : 'off'; } else { var dataValue = $(this).val(); } var dataName = $(this).attr('data-name'); valueToPush[dataName] = dataValue; }); values.push(valueToPush); }); $this.next('.mt-repeater-collector').val(JSON.stringify(values)).trigger('change'); }); } // expand the repeater fields wrap $('#customize-theme-controls').on('click','.mt-repeater-field-title.item-visible', function(){ $(this).closest('.mt-repeater-field-control').find('.mt-repeater-fields').slideToggle(); $(this).closest('.mt-repeater-field-control').toggleClass('expanded'); }); // close the repeater fields wrap $('#customize-theme-controls').on('click', '.mt-repeater-field-close', function(){ $(this).closest('.mt-repeater-fields').slideUp(); $(this).closest('.mt-repeater-field-control').toggleClass('expanded'); }); // show/hide repeater field $("#customize-theme-controls").on("click", ".field-display", function(){ $(this).toggleClass( "dashicons-visibility dashicons-hidden" ); $(this).closest('.mt-repeater-field-control').toggleClass( 'item-visible item-not-visible' ); $(this).closest('.mt-repeater-field-control').find('.mt-repeater-field-title').toggleClass( 'item-visible item-not-visible' ); var dataVal = $(this).parents('.mt-repeater-field-control').find('input.repeater-field-visible-holder').val(); if(dataVal == 'show') { if ($(this).closest('.mt-repeater-field-control').find('.mt-repeater-fields').is(':visible')) { $(this).closest('.mt-repeater-field-control').toggleClass('expanded'); $(this).closest('.mt-repeater-field-control').find('.mt-repeater-fields').slideUp(); } $(this).closest('.mt-repeater-field-control').find('input.repeater-field-visible-holder').val('hide'); } else { $(this).closest('.mt-repeater-field-control').find('input.repeater-field-visible-holder').val('show'); } blogbuster_refresh_repeater_values(); }); $("body").on("click",'.mt-repeater-add-control-field', function(){ var fLimit = $(this).parent().find('.field-limit').val(); var fCount = $(this).parent().find('.field-count').val(); var fLimitInfo = $(this).parent().find('.field-limit').data('info'); if( fCount < fLimit ) { fCount++; $(this).parent().find('.field-count').val(fCount); } else { $(this).before('Only '+fLimit+ ' ' +fLimitInfo+' shall be permitted for free version.'); return; } var $this = $(this).parent(); if(typeof $this != 'undefined') { var field = $this.find(".mt-repeater-field-control:first").clone(); if(typeof field != 'undefined'){ field.find("input[type='text'][data-name]").each(function(){ var defaultValue = $(this).attr('data-default'); $(this).val(defaultValue); }); field.find("textarea[data-name]").each(function(){ var defaultValue = $(this).attr('data-default'); $(this).val(defaultValue); }); field.find("select[data-name]").each(function(){ var defaultValue = $(this).attr('data-default'); $(this).val(defaultValue); }); field.find(".attachment-media-view").each(function(){ var defaultValue = $(this).find('input[data-name]').attr('data-default'); $(this).find('input[data-name]').val(defaultValue); if(defaultValue){ $(this).find(".thumbnail-image").html('').prev('.placeholder').addClass('hidden'); }else{ $(this).find(".thumbnail-image").html('').prev('.placeholder').removeClass('hidden'); } }); field.find(".mt-repeater-icon-list").each(function(){ var defaultValue = $(this).next('input[data-name]').attr('data-default'); $(this).next('input[data-name]').val(defaultValue); $(this).prev('.mt-repeater-selected-icon').children('i').attr('class','').addClass(defaultValue); $(this).find('li').each(function(){ var icon_class = $(this).find('i').attr('class'); if(defaultValue == icon_class ){ $(this).addClass('icon-active'); }else{ $(this).removeClass('icon-active'); } }); }); field.find('.mt-repeater-fields').show(); $this.find('.mt-repeater-field-control-wrap').append(field); field.addClass('expanded').find('.mt-repeater-fields').show(); $('.accordion-section-content').animate({ scrollTop: $this.height() }, 1000); blogbuster_refresh_repeater_values(); } } return false; }); // remove the repeater field item $("#customize-theme-controls").on("click", ".mt-repeater-field-remove",function(){ if( typeof $(this).parent() != 'undefined'){ $(this).closest('.mt-repeater-field-control').slideUp('normal', function(){ $(this).remove(); blogbuster_refresh_repeater_values(); }); } return false; }); $("#customize-theme-controls").on('keyup change', '[data-name]', function(){ blogbuster_refresh_repeater_values(); return false; }); /** * Drag and drop to change order */ $(".mt-repeater-field-control-wrap").sortable({ orientation: "vertical", update: function( event, ui ) { blogbuster_refresh_repeater_values(); } }); /** * Image upload */ var frame; //Add image $('.customize-control-mt-repeater').on( 'click', '.mt-upload-button', function( event ){ event.preventDefault(); var imgContainer = $(this).closest('.mt-fields-wrap').find( '.thumbnail-image'), placeholder = $(this).closest('.mt-fields-wrap').find( '.placeholder'), imgIdInput = $(this).siblings('.upload-id'); frame = wp.media({ title: 'Select or Upload Image', button: { text: 'Use Image' }, multiple: false // Set to true to allow multiple files to be selected }); frame.on( 'select', function() { var attachment = frame.state().get('selection').first().toJSON(); imgContainer.html( '' ); placeholder.addClass('hidden'); imgIdInput.val( attachment.url ).trigger('change'); }); frame.open(); }); // DELETE IMAGE LINK $('.customize-control-mt-repeater').on( 'click', '.mt-delete-button', function( event ){ event.preventDefault(); var imgContainer = $(this).closest('.mt-fields-wrap').find( '.thumbnail-image'), placeholder = $(this).closest('.mt-fields-wrap').find( '.placeholder'), imgIdInput = $(this).siblings('.upload-id'); imgContainer.find('img').remove(); placeholder.removeClass('hidden'); imgIdInput.val( '' ).trigger('change'); }); /** * Repeater icon selector */ $('body').on('click', '.mt-repeater-icon-list li', function(){ var icon_class = $(this).find('i').attr('class'); $(this).addClass('icon-active').siblings().removeClass('icon-active'); $(this).parent('.mt-repeater-icon-list').prev('.mt-repeater-selected-icon').children('i').attr('class','').addClass(icon_class); $(this).parent('.mt-repeater-icon-list').next('input').val(icon_class).trigger('change'); blogbuster_refresh_repeater_values(); }); $('body').on('click', '.mt-repeater-selected-icon', function(){ $(this).next().slideToggle(); }); }); /*--------------- Radio Images Control ------------------------*/ wp.customize.controlConstructor['mt-radio-image'] = wp.customize.Control.extend({ ready: function() { 'use strict'; var control = this; // Change the value this.container.on( 'click', 'input', function() { control.setting.set( jQuery( this ).val() ); }); } }); /*--------------- Toggle Control ------------------------*/ wp.customize.controlConstructor['mt-toggle'] = wp.customize.Control.extend({ ready: function(){ 'use strict'; var control = this, checkboxValue = control.setting._value; // Save the value this.container.on( 'change', 'input', function() { checkboxValue = ( jQuery( this ).is( ':checked' ) ) ? true : false; control.setting.set( checkboxValue ); }); } }); /*--------------- Buttonset Control ------------------------*/ wp.customize.controlConstructor['mt-buttonset'] = wp.customize.Control.extend({ ready: function() { 'use strict'; var control = this; // Change the value this.container.on( 'click', 'input', function() { control.setting.set( jQuery( this ).val() ); }); } }); /*--------------- Radio Icons Control ------------------------*/ wp.customize.controlConstructor['mt-radio-icons'] = wp.customize.Control.extend({ ready: function() { 'use strict'; var control = this; // Change the value this.container.on( 'change', 'input', function() { control.setting.set( jQuery( this ).val() ); }); } });