Server IP : 172.67.157.199 / Your IP : 18.219.130.101 [ Web Server : Apache System : Linux b70eb322-3aee-0c53-7c82-0db91281f2c6.secureserver.net 6.1.90-1.el9.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 2 12:09:22 EDT 2024 x86_64 User : root ( 0) PHP Version : 8.0.30.2 Disable Function : NONE Domains : 0 Domains MySQL : ON | cURL : ON | WGET : ON | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/chroot/var/www/wp-content/themes/izo/assets/js/ |
Upload File : |
/** * Slider control */ jQuery( document ).ready(function($) { "use strict"; // Set our slider defaults and initialise the slider $('.slider-custom-control').each(function(){ var sliderValue = $(this).find('.customize-control-slider-value').val(); var newSlider = $(this).find('.slider'); var sliderMinValue = parseFloat(newSlider.attr('slider-min-value')); var sliderMaxValue = parseFloat(newSlider.attr('slider-max-value')); var sliderStepValue = parseFloat(newSlider.attr('slider-step-value')); newSlider.slider({ value: sliderValue, min: sliderMinValue, max: sliderMaxValue, step: sliderStepValue, change: function(e,ui){ // Important! When slider stops moving make sure to trigger change event so Customizer knows it has to save the field $(this).parent().find('.customize-control-slider-value').trigger('change'); } }); }); // Change the value of the input field as the slider is moved $('.slider').on('slide', function(event, ui) { $(this).parent().find('.customize-control-slider-value').val(ui.value); }); // Reset slider and input field back to the default value $('.slider-reset').on('click', function() { var resetValue = $(this).attr('slider-reset-value'); $(this).parent().find('.customize-control-slider-value').val(resetValue); $(this).parent().find('.slider').slider('value', resetValue); }); // Update slider if the input field loses focus as it's most likely changed $('.customize-control-slider-value').blur(function() { var resetValue = $(this).val(); var slider = $(this).parent().find('.slider'); var sliderMinValue = parseInt(slider.attr('slider-min-value')); var sliderMaxValue = parseInt(slider.attr('slider-max-value')); // Make sure our manual input value doesn't exceed the minimum & maxmium values if(resetValue < sliderMinValue) { resetValue = sliderMinValue; $(this).val(resetValue); } if(resetValue > sliderMaxValue) { resetValue = sliderMaxValue; $(this).val(resetValue); } $(this).parent().find('.slider').slider('value', resetValue); }); }); /**! * wp-color-picker-alpha * * Overwrite Automattic Iris for enabled Alpha Channel in wpColorPicker * Only run in input and is defined data alpha in true * * Version: 2.1.4 * https://github.com/kallookoo/wp-color-picker-alpha * Licensed under the GPLv2 license or later. */ ( function( $ ) { // Prevent double-init. if ( $.wp.wpColorPicker.prototype._hasAlpha ) { return; } // Variable for some backgrounds ( grid ) var image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==', // html stuff for wpColorPicker copy of the original color-picker.js _after = '<div class="wp-picker-holder" />', _wrap = '<div class="wp-picker-container" />', _button = '<input type="button" class="button button-small" />', _deprecated = false, __ = wp.i18n.__; // WP < 5.5 if ( "undefined" !== typeof wpColorPickerL10n ) { // Prevent CSS issues in < WordPress 4.9 _deprecated = ( undefined !== wpColorPickerL10n.current ); } // Declare some global variables when is deprecated or not if ( _deprecated ) { var _before = '<a tabindex="0" class="wp-color-result" />'; } else { var _before = '<button type="button" class="button wp-color-result" aria-expanded="false"><span class="wp-color-result-text"></span></button>', _wrappingLabel = '<label></label>', _wrappingLabelText = '<span class="screen-reader-text"></span>'; } /** * Overwrite Color * for enable support rbga */ Color.fn.toString = function() { if ( this._alpha < 1 ) return this.toCSS( 'rgba', this._alpha ).replace( /\s+/g, '' ); var hex = parseInt( this._color, 10 ).toString( 16 ); if ( this.error ) return ''; if ( hex.length < 6 ) hex = ( '00000' + hex ).substr( -6 ); return '#' + hex; }; /** * Overwrite wpColorPicker */ $.widget( 'wp.wpColorPicker', $.wp.wpColorPicker, { _hasAlpha: true, /** * @summary Creates the color picker. * * Creates the color picker, sets default values, css classes and wraps it all in HTML. * * @since 3.5.0 * * @access private * * @returns {void} */ _create: function() { // Return early if Iris support is missing. if ( ! $.support.iris ) { return; } var self = this, el = self.element; // Override default options with options bound to the element. $.extend( self.options, el.data() ); // Create a color picker which only allows adjustments to the hue. if ( self.options.type === 'hue' ) { return self._createHueOnly(); } // Bind the close event. self.close = $.proxy( self.close, self ); self.initialValue = el.val(); // Add a CSS class to the input field. el.addClass( 'wp-color-picker' ); if ( _deprecated ) { el.hide().wrap( _wrap ); self.wrap = el.parent(); self.toggler = $( _before ) .insertBefore( el ) .css( { backgroundColor : self.initialValue } ) .attr( 'title', __('Select Color') ) .attr( 'data-current', __('Current') ); self.pickerContainer = $( _after ).insertAfter( el ); self.button = $( _button ).addClass('hidden'); } else { /* * Check if there's already a wrapping label, e.g. in the Customizer. * If there's no label, add a default one to match the Customizer template. */ if ( ! el.parent( 'label' ).length ) { // Wrap the input field in the default label. el.wrap( _wrappingLabel ); // Insert the default label text. self.wrappingLabelText = $( _wrappingLabelText ) .insertBefore( el ) .text( __('Color value') ); } /* * At this point, either it's the standalone version or the Customizer * one, we have a wrapping label to use as hook in the DOM, let's store it. */ self.wrappingLabel = el.parent(); // Wrap the label in the main wrapper. self.wrappingLabel.wrap( _wrap ); // Store a reference to the main wrapper. self.wrap = self.wrappingLabel.parent(); // Set up the toggle button and insert it before the wrapping label. self.toggler = $( _before ) .insertBefore( self.wrappingLabel ) .css( { backgroundColor: self.initialValue } ); // Set the toggle button span element text. self.toggler.find( '.wp-color-result-text' ).text( __('Select Color') ); // Set up the Iris container and insert it after the wrapping label. self.pickerContainer = $( _after ).insertAfter( self.wrappingLabel ); // Store a reference to the Clear/Default button. self.button = $( _button ); } // Set up the Clear/Default button. if ( self.options.defaultColor ) { self.button.addClass( 'wp-picker-default' ).val( __('Default') ); if ( ! _deprecated ) { self.button.attr( 'aria-label', __('Select default color') ); } } else { self.button.addClass( 'wp-picker-clear' ).val( __('clear') ); if ( ! _deprecated ) { self.button.attr( 'aria-label', __('Clear color') ); } } if ( _deprecated ) { el.wrap( '<span class="wp-picker-input-wrap" />' ).after( self.button ); } else { // Wrap the wrapping label in its wrapper and append the Clear/Default button. self.wrappingLabel .wrap( '<span class="wp-picker-input-wrap hidden" />' ) .after( self.button ); /* * The input wrapper now contains the label+input+Clear/Default button. * Store a reference to the input wrapper: we'll use this to toggle * the controls visibility. */ self.inputWrapper = el.closest( '.wp-picker-input-wrap' ); } el.iris( { target: self.pickerContainer, hide: self.options.hide, width: self.options.width, mode: self.options.mode, palettes: self.options.palettes, /** * @summary Handles the onChange event if one has been defined in the options. * * Handles the onChange event if one has been defined in the options and additionally * sets the background color for the toggler element. * * @since 3.5.0 * * @param {Event} event The event that's being called. * @param {HTMLElement} ui The HTMLElement containing the color picker. * * @returns {void} */ change: function( event, ui ) { if ( self.options.alpha ) { self.toggler.css( { 'background-image' : 'url(' + image + ')' } ); if ( _deprecated ) { self.toggler.html( '<span class="color-alpha" />' ); } else { self.toggler.css( { 'position' : 'relative' } ); if ( self.toggler.find('span.color-alpha').length == 0 ) { self.toggler.append('<span class="color-alpha" />'); } } self.toggler.find( 'span.color-alpha' ).css( { 'width' : '30px', 'height' : '100%', 'position' : 'absolute', 'top' : 0, 'left' : 0, 'border-top-left-radius' : '2px', 'border-bottom-left-radius' : '2px', 'background' : ui.color.toString() } ); } else { self.toggler.css( { backgroundColor : ui.color.toString() } ); } if ( $.isFunction( self.options.change ) ) { self.options.change.call( this, event, ui ); } } } ); el.val( self.initialValue ); self._addListeners(); // Force the color picker to always be closed on initial load. if ( ! self.options.hide ) { self.toggler.click(); } }, /** * @summary Binds event listeners to the color picker. * * @since 3.5.0 * * @access private * * @returns {void} */ _addListeners: function() { var self = this; /** * @summary Prevent any clicks inside this widget from leaking to the top and closing it. * * @since 3.5.0 * * @param {Event} event The event that's being called. * * @returs {void} */ self.wrap.on( 'click.wpcolorpicker', function( event ) { event.stopPropagation(); }); /** * @summary Open or close the color picker depending on the class. * * @since 3.5 */ self.toggler.click( function(){ if ( self.toggler.hasClass( 'wp-picker-open' ) ) { self.close(); } else { self.open(); } }); /** * @summary Checks if value is empty when changing the color in the color picker. * * Checks if value is empty when changing the color in the color picker. * If so, the background color is cleared. * * @since 3.5.0 * * @param {Event} event The event that's being called. * * @returns {void} */ self.element.on( 'change', function( event ) { // Empty or Error = clear if ( $( this ).val() === '' || self.element.hasClass( 'iris-error' ) ) { if ( self.options.alpha ) { if ( _deprecated ) { self.toggler.removeAttr( 'style' ); } self.toggler.find( 'span.color-alpha' ).css( 'backgroundColor', '' ); } else { self.toggler.css( 'backgroundColor', '' ); } // fire clear callback if we have one if ( $.isFunction( self.options.clear ) ) self.options.clear.call( this, event ); } } ); /** * @summary Enables the user to clear or revert the color in the color picker. * * Enables the user to either clear the color in the color picker or revert back to the default color. * * @since 3.5.0 * * @param {Event} event The event that's being called. * * @returns {void} */ self.button.on( 'click', function( event ) { if ( $( this ).hasClass( 'wp-picker-clear' ) ) { self.element.val( '' ); if ( self.options.alpha ) { if ( _deprecated ) { self.toggler.removeAttr( 'style' ); } self.toggler.find( 'span.color-alpha' ).css( 'backgroundColor', '' ); } else { self.toggler.css( 'backgroundColor', '' ); } if ( $.isFunction( self.options.clear ) ) self.options.clear.call( this, event ); self.element.trigger( 'change' ); } else if ( $( this ).hasClass( 'wp-picker-default' ) ) { self.element.val( self.options.defaultColor ).change(); } }); }, }); /** * Overwrite iris */ $.widget( 'a8c.iris', $.a8c.iris, { _create: function() { this._super(); // Global option for check is mode rbga is enabled this.options.alpha = this.element.data( 'alpha' ) || false; // Is not input disabled if ( ! this.element.is( ':input' ) ) this.options.alpha = false; if ( typeof this.options.alpha !== 'undefined' && this.options.alpha ) { var self = this, el = self.element, _html = '<div class="iris-strip iris-slider iris-alpha-slider"><div class="iris-slider-offset iris-slider-offset-alpha"></div></div>', aContainer = $( _html ).appendTo( self.picker.find( '.iris-picker-inner' ) ), aSlider = aContainer.find( '.iris-slider-offset-alpha' ), controls = { aContainer : aContainer, aSlider : aSlider }; if ( typeof el.data( 'custom-width' ) !== 'undefined' ) { self.options.customWidth = parseInt( el.data( 'custom-width' ) ) || 0; } else { self.options.customWidth = 100; } // Set default width for input reset self.options.defaultWidth = el.width(); // Update width for input if ( self._color._alpha < 1 || self._color.toString().indexOf('rgb') != -1 ) el.width( parseInt( self.options.defaultWidth + self.options.customWidth ) ); // Push new controls $.each( controls, function( k, v ) { self.controls[k] = v; } ); // Change size strip and add margin for sliders self.controls.square.css( { 'margin-right': '0' } ); var emptyWidth = ( self.picker.width() - self.controls.square.width() - 20 ), stripsMargin = ( emptyWidth / 6 ), stripsWidth = ( ( emptyWidth / 2 ) - stripsMargin ); $.each( [ 'aContainer', 'strip' ], function( k, v ) { self.controls[v].width( stripsWidth ).css( { 'margin-left' : stripsMargin + 'px' } ); } ); // Add new slider self._initControls(); // For updated widget self._change(); } }, _initControls: function() { this._super(); if ( this.options.alpha ) { var self = this, controls = self.controls; controls.aSlider.slider({ orientation : 'vertical', min : 0, max : 100, step : 1, value : parseInt( self._color._alpha * 100 ), slide : function( event, ui ) { // Update alpha value self._color._alpha = parseFloat( ui.value / 100 ); self._change.apply( self, arguments ); } }); } }, _change: function() { this._super(); var self = this, el = self.element; if ( this.options.alpha ) { var controls = self.controls, alpha = parseInt( self._color._alpha * 100 ), color = self._color.toRgb(), gradient = [ 'rgb(' + color.r + ',' + color.g + ',' + color.b + ') 0%', 'rgba(' + color.r + ',' + color.g + ',' + color.b + ', 0) 100%' ], defaultWidth = self.options.defaultWidth, customWidth = self.options.customWidth, target = self.picker.closest( '.wp-picker-container' ).find( '.wp-color-result' ); // Generate background slider alpha, only for CSS3 old browser fuck!! :) controls.aContainer.css( { 'background' : 'linear-gradient(to bottom, ' + gradient.join( ', ' ) + '), url(' + image + ')' } ); if ( target.hasClass( 'wp-picker-open' ) ) { // Update alpha value controls.aSlider.slider( 'value', alpha ); /** * Disabled change opacity in default slider Saturation ( only is alpha enabled ) * and change input width for view all value */ if ( self._color._alpha < 1 ) { controls.strip.attr( 'style', controls.strip.attr( 'style' ).replace( /rgba\(([0-9]+,)(\s+)?([0-9]+,)(\s+)?([0-9]+)(,(\s+)?[0-9\.]+)\)/g, 'rgb($1$3$5)' ) ); el.width( parseInt( defaultWidth + customWidth ) ); } else { el.width( defaultWidth ); } } } var reset = el.data( 'reset-alpha' ) || false; if ( reset ) { self.picker.find( '.iris-palette-container' ).on( 'click.palette', '.iris-palette', function() { self._color._alpha = 1; self.active = 'external'; self._change(); } ); } el.trigger( 'change' ); }, _addInputListeners: function( input ) { var self = this, debounceTimeout = 100, callback = function( event ) { var color = new Color( input.val() ), val = input.val(); input.removeClass( 'iris-error' ); // we gave a bad color if ( color.error ) { // don't error on an empty input if ( val !== '' ) input.addClass( 'iris-error' ); } else { if ( color.toString() !== self._color.toString() ) { // let's not do this on keyup for hex shortcodes if ( ! ( event.type === 'keyup' && val.match( /^[0-9a-fA-F]{3}$/ ) ) ) self._setOption( 'color', color.toString() ); } } }; input.on( 'change', callback ).on( 'keyup', self._debounce( callback, debounceTimeout ) ); // If we initialized hidden, show on first focus. The rest is up to you. if ( self.options.hide ) { input.on( 'focus', function() { self.show(); } ); } } } ); }( jQuery ) ); // Auto Call plugin is class is color-picker jQuery( document ).ready( function( $ ) { $( '.color-picker' ).wpColorPicker(); } ); /* Responsive number */ jQuery( document ).ready(function($) { "use strict"; $( '.izo-devices-preview' ).find( 'button' ).on( 'click', function( event ) { $( this ).parent().addClass( 'active' ); $( this ).parent().siblings().removeClass( 'active' ); var device = $(this).attr('data-device'); if( 'desktop' == device ) { device = 'desktop'; var deviceControl = $( this ).parents( '.customize-control-responsive_number' ).find('.izo-responsive-wrapper' ).find( 'div' ); deviceControl.each(function( index ) { if ( $(this).hasClass( 'izo-preview-' + device ) ) { $(this).addClass( 'active' ); } else { $(this).removeClass( 'active' ); } }); } else if( 'tablet' == device ) { device = 'tablet'; var deviceControl = $( this ).parents( '.customize-control-responsive_number' ).find('.izo-responsive-wrapper' ).find( 'div' ); deviceControl.each(function( index ) { if ( $(this).hasClass( 'izo-preview-' + device ) ) { $(this).addClass( 'active' ); } else { $(this).removeClass( 'active' ); } }); } else { device = 'mobile'; var deviceControl = $( this ).parents( '.customize-control-responsive_number' ).find('.izo-responsive-wrapper' ).find( 'div' ); deviceControl.each(function( index ) { if ( $(this).hasClass( 'izo-preview-' + device ) ) { $(this).addClass( 'active' ); } else { $(this).removeClass( 'active' ); } }); } $( '.wp-full-overlay-footer .devices button[data-device="' + device + '"]' ).trigger( 'click' ); }); $(' .wp-full-overlay-footer .devices button ').on('click', function() { var device = $(this).attr('data-device'); $( '.izo-devices-preview li' ).removeClass( 'active' ); $( '.izo-devices-preview .' + device ).addClass( 'active' ); $( '.izo-responsive-wrapper div' ).removeClass( 'active' ); $( '.izo-responsive-wrapper div.izo-preview-' + device ).addClass( 'active' ); }); }); /* Typography */ jQuery( document ).ready(function($) { "use strict"; $('.google-fonts-list').each(function (i, obj) { if (!$(this).hasClass('select2-hidden-accessible')) { $(this).select2(); } }); $('.google-fonts-list').on('change', function() { var elementRegularWeight = $(this).parent().parent().find('.google-fonts-regularweight-style'); var elementItalicWeight = $(this).parent().parent().find('.google-fonts-italicweight-style'); var elementBoldWeight = $(this).parent().parent().find('.google-fonts-boldweight-style'); var selectedFont = $(this).val(); var customizerControlName = $(this).attr('control-name'); var elementItalicWeightCount = 0; var elementBoldWeightCount = 0; // Clear Weight/Style dropdowns elementRegularWeight.empty(); elementItalicWeight.empty(); elementBoldWeight.empty(); // Make sure Italic & Bold dropdowns are enabled elementItalicWeight.prop('disabled', false); elementBoldWeight.prop('disabled', false); // Get the Google Fonts control object var bodyfontcontrol = _wpCustomizeSettings.controls[customizerControlName]; // Find the index of the selected font var indexes = $.map(bodyfontcontrol.izofontslist, function(obj, index) { if(obj.family === selectedFont) { return index; } }); var index = indexes[0]; // For the selected Google font show the available weight/style variants $.each(bodyfontcontrol.izofontslist[index].variants, function(val, text) { elementRegularWeight.append( $('<option></option>').val(text).html(text) ); //Set default value if ( $(elementRegularWeight).find( 'option[value="regular"]').length > 0 ) { $( elementRegularWeight ).val( 'regular' ); } else if ( $(elementRegularWeight).find( 'option[value="400"]').length > 0 ) { $( elementRegularWeight ).val( '400' ); } else if ( $(elementRegularWeight).find( 'option[value="300"]').length > 0 ) { $( elementRegularWeight ).val( '300' ); } if (text.indexOf("italic") >= 0) { elementItalicWeight.append( $('<option></option>').val(text).html(text) ); elementItalicWeightCount++; if ( $(elementItalicWeight).find( 'option[value="italic"]').length > 0 ) { $( elementItalicWeight ).val( 'italic' ); } else if ( $(elementItalicWeight).find( 'option[value="400italic"]').length > 0 ) { $( elementItalicWeight ).val( '400italic' ); } else if ( $(elementItalicWeight).find( 'option[value="300italic"]').length > 0 ) { $( elementItalicWeight ).val( '300italic' ); } } else { elementBoldWeight.append( $('<option></option>').val(text).html(text) ); elementBoldWeightCount++; if ( $(elementBoldWeight).find( 'option[value="600"]').length > 0 ) { $( elementBoldWeight ).val( '600' ); } else if ( $(elementBoldWeight).find( 'option[value="500"]').length > 0 ) { $( elementBoldWeight ).val( '500' ); } else if ( $(elementBoldWeight).find( 'option[value="700"]').length > 0 ) { $( elementBoldWeight ).val( '700' ); } } }); if(elementItalicWeightCount == 0) { elementItalicWeight.append( $('<option></option>').val('').html('Not Available for this font') ); elementItalicWeight.prop('disabled', 'disabled'); } if(elementBoldWeightCount == 0) { elementBoldWeight.append( $('<option></option>').val('').html('Not Available for this font') ); elementBoldWeight.prop('disabled', 'disabled'); } // Update the font category based on the selected font $(this).parent().parent().find('.google-fonts-category').val(bodyfontcontrol.izofontslist[index].category); izoGetAllSelects($(this).parent().parent().parent().parent()); }); $('.google_fonts_select_control select').on('change', function() { izoGetAllSelects($(this).parent().parent().parent().parent()); }); function izoGetAllSelects($element) { var selectedFont = { font: $element.find('.google-fonts-list').val(), regularweight: $element.find('.google-fonts-regularweight-style').val(), italicweight: $element.find('.google-fonts-italicweight-style').val(), boldweight: $element.find('.google-fonts-boldweight-style').val(), category: $element.find('.google-fonts-category').val() }; // Important! Make sure to trigger change event so Customizer knows it has to save the field $element.find('.customize-control-google-font-selection').val(JSON.stringify(selectedFont)).trigger('change'); } }); /* Repeater */ jQuery( document ).ready(function($) { "use strict"; // Update the values for all our input fields and initialise the sortable repeater $('.izo-sortable_repeater_control').each(function() { // If there is an existing customizer value, populate our rows var defaultValuesArray = $(this).find('.customize-control-sortable-repeater').val().split(','); var numRepeaterItems = defaultValuesArray.length; if(numRepeaterItems > 0) { // Add the first item to our existing input field $(this).find('.repeater-input').val(defaultValuesArray[0]); // Create a new row for each new value if(numRepeaterItems > 1) { var i; for (i = 1; i < numRepeaterItems; ++i) { izoAppendRow($(this), defaultValuesArray[i]); } } } }); // Make our Repeater fields sortable $(this).find('.izo-sortable_repeater.sortable').sortable({ update: function(event, ui) { izoGetAllInputs($(this).parent()); } }); // Remove item starting from it's parent element $('.izo-sortable_repeater.sortable').on('click', '.customize-control-sortable-repeater-delete', function(event) { event.preventDefault(); var numItems = $(this).parent().parent().find('.repeater').length; if(numItems > 1) { $(this).parent().slideUp('fast', function() { var parentContainer = $(this).parent().parent(); $(this).remove(); izoGetAllInputs(parentContainer); }) } else { $(this).parent().find('.repeater-input').val(''); izoGetAllInputs($(this).parent().parent().parent()); } }); // Add new item $('.customize-control-sortable-repeater-add').click(function(event) { event.preventDefault(); izoAppendRow($(this).parent()); izoGetAllInputs($(this).parent()); }); // Refresh our hidden field if any fields change $('.izo-sortable_repeater.sortable').change(function() { izoGetAllInputs($(this).parent()); }) // Add https:// to the start of the URL if it doesn't have it $('.izo-sortable_repeater.sortable').on('blur', '.repeater-input', function() { var url = $(this); var val = url.val(); if(val && !val.match(/^.+:\/\/.*/)) { // Important! Make sure to trigger change event so Customizer knows it has to save the field url.val('https://' + val).trigger('change'); } }); // Append a new row to our list of elements function izoAppendRow($element, defaultValue = '') { var newRow = '<div class="repeater" style="display:none"><input type="text" value="' + defaultValue + '" class="repeater-input" placeholder="https://" /><span class="dashicons dashicons-sort"></span><a class="customize-control-sortable-repeater-delete" href="#"><span class="dashicons dashicons-no-alt"></span></a></div>'; $element.find('.sortable').append(newRow); $element.find('.sortable').find('.repeater:last').slideDown('fast', function(){ $(this).find('input').focus(); }); } // Get the values from the repeater input fields and add to our hidden field function izoGetAllInputs($element) { var inputValues = $element.find('.repeater-input').map(function() { return $(this).val(); }).toArray(); // Add all the values from our repeater fields to the hidden field (which is the one that actually gets saved) $element.find('.customize-control-sortable-repeater').val(inputValues); // Important! Make sure to trigger change event so Customizer knows it has to save the field $element.find('.customize-control-sortable-repeater').trigger('change'); } });