aristath/kirki

View on GitHub
packages/kirki-framework/control-repeater/dist/control.js.map

Summary

Maintainability
Test Coverage
{"mappings":"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","sources":["src/control.js"],"sourcesContent":["import \"./control.scss\";\n\n/* global kirkiControlLoader */\n/* eslint max-depth: 0 */\n/* eslint no-useless-escape: 0 */\nvar RepeaterRow = function( rowIndex, container, label, control ) {\n\tvar self        = this;\n\tthis.rowIndex   = rowIndex;\n\tthis.container  = container;\n\tthis.label      = label;\n\tthis.header     = this.container.find( '.repeater-row-header' );\n\n\tthis.header.on( 'click', function() {\n\t\tself.toggleMinimize();\n\t} );\n\n\tthis.container.on( 'click', '.repeater-row-remove', function() {\n\t\tself.remove();\n\t} );\n\n\tthis.header.on( 'mousedown', function() {\n\t\tself.container.trigger( 'row:start-dragging' );\n\t} );\n\n\tthis.container.on( 'keyup change', 'input, select, textarea', function( e ) {\n\t\tself.container.trigger( 'row:update', [ self.rowIndex, jQuery( e.target ).data( 'field' ), e.target ] );\n\t} );\n\n\tthis.setRowIndex = function( rowNum ) {\n\t\tthis.rowIndex = rowNum;\n\t\tthis.container.attr( 'data-row', rowNum );\n\t\tthis.container.data( 'row', rowNum );\n\t\tthis.updateLabel();\n\t};\n\n\tthis.toggleMinimize = function() {\n\n\t\t// Store the previous state.\n\t\tthis.container.toggleClass( 'minimized' );\n\t\tthis.header.find( '.dashicons' ).toggleClass( 'dashicons-arrow-up' ).toggleClass( 'dashicons-arrow-down' );\n\t};\n\n\tthis.remove = function() {\n\t\tthis.container.slideUp( 300, function() {\n\t\t\tjQuery( this ).detach();\n\t\t} );\n\t\tthis.container.trigger( 'row:remove', [ this.rowIndex ] );\n\t};\n\n\tthis.updateLabel = function() {\n\t\tvar rowLabelField,\n\t\t\trowLabel,\n\t\t\trowLabelSelector;\n\n\t\tif ( 'field' === this.label.type ) {\n\t\t\trowLabelField = this.container.find( '.repeater-field [data-field=\"' + this.label.field + '\"]' );\n\t\t\tif ( _.isFunction( rowLabelField.val ) ) {\n\t\t\t\trowLabel = rowLabelField.val();\n\t\t\t\tif ( '' !== rowLabel ) {\n\t\t\t\t\tif ( ! _.isUndefined( control.params.fields[ this.label.field ] ) ) {\n\t\t\t\t\t\tif ( ! _.isUndefined( control.params.fields[ this.label.field ].type ) ) {\n\t\t\t\t\t\t\tif ( 'select' === control.params.fields[ this.label.field ].type ) {\n\t\t\t\t\t\t\t\tif ( ! _.isUndefined( control.params.fields[ this.label.field ].choices ) && ! _.isUndefined( control.params.fields[ this.label.field ].choices[ rowLabelField.val() ] ) ) {\n\t\t\t\t\t\t\t\t\trowLabel = control.params.fields[ this.label.field ].choices[ rowLabelField.val() ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( 'radio' === control.params.fields[ this.label.field ].type || 'radio-image' === control.params.fields[ this.label.field ].type ) {\n\t\t\t\t\t\t\t\trowLabelSelector = control.selector + ' [data-row=\"' + this.rowIndex + '\"] .repeater-field [data-field=\"' + this.label.field + '\"]:checked';\n\t\t\t\t\t\t\t\trowLabel = jQuery( rowLabelSelector ).val();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.header.find( '.repeater-row-label' ).text( rowLabel );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.header.find( '.repeater-row-label' ).text( this.label.value + ' ' + ( this.rowIndex + 1 ) );\n\t};\n\tthis.updateLabel();\n};\n\nwp.customize.controlConstructor.repeater = wp.customize.Control.extend( {\n\n\t// When we're finished loading continue processing\n\tready: function() {\n\t\tvar control = this;\n\n\t\t// Init the control.\n\t\tif ( ! _.isUndefined( window.kirkiControlLoader ) && _.isFunction( kirkiControlLoader ) ) {\n\t\t\tkirkiControlLoader( control );\n\t\t} else {\n\t\t\tcontrol.initKirkiControl();\n\t\t}\n\t},\n\n\tinitKirkiControl: function( control ) {\n\t\tvar limit, theNewRow, settingValue;\n\t\tcontrol = control || this;\n\n\t\t// The current value set in Control Class (set in Kirki_Customize_Repeater_Control::to_json() function)\n\t\tsettingValue = control.params.value;\n\n\t\t// The hidden field that keeps the data saved (though we never update it)\n\t\tcontrol.settingField = control.container.find( '[data-customize-setting-link]' ).first();\n\n\t\t// Set the field value for the first time, we'll fill it up later\n\t\tcontrol.setValue( [], false );\n\n\t\t// The DIV that holds all the rows\n\t\tcontrol.repeaterFieldsContainer = control.container.find( '.repeater-fields' ).first();\n\n\t\t// Set number of rows to 0\n\t\tcontrol.currentIndex = 0;\n\n\t\t// Save the rows objects\n\t\tcontrol.rows = [];\n\n\t\t// Default limit choice\n\t\tlimit = false;\n\t\tif ( ! _.isUndefined( control.params.choices.limit ) ) {\n\t\t\tlimit = ( 0 >= control.params.choices.limit ) ? false : parseInt( control.params.choices.limit, 10 );\n\t\t}\n\n\t\tcontrol.container.on( 'click', 'button.repeater-add', function( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( ! limit || control.currentIndex < limit ) {\n\t\t\t\ttheNewRow = control.addRow();\n\t\t\t\ttheNewRow.toggleMinimize();\n\t\t\t\tcontrol.initColorPicker();\n\t\t\t\tcontrol.initSelect( theNewRow );\n\t\t\t} else {\n\t\t\t\tjQuery( control.selector + ' .limit' ).addClass( 'highlight' );\n\t\t\t}\n\t\t} );\n\n\t\tcontrol.container.on( 'click', '.repeater-row-remove', function() {\n\t\t\tcontrol.currentIndex--;\n\t\t\tif ( ! limit || control.currentIndex < limit ) {\n\t\t\t\tjQuery( control.selector + ' .limit' ).removeClass( 'highlight' );\n\t\t\t}\n\t\t} );\n\n\t\tcontrol.container.on( 'click keypress', '.repeater-field-image .upload-button,.repeater-field-cropped_image .upload-button,.repeater-field-upload .upload-button', function( e ) {\n\t\t\te.preventDefault();\n\t\t\tcontrol.$thisButton = jQuery( this );\n\t\t\tcontrol.openFrame( e );\n\t\t} );\n\n\t\tcontrol.container.on( 'click keypress', '.repeater-field-image .remove-button,.repeater-field-cropped_image .remove-button', function( e ) {\n\t\t\te.preventDefault();\n\t\t\tcontrol.$thisButton = jQuery( this );\n\t\t\tcontrol.removeImage( e );\n\t\t} );\n\n\t\tcontrol.container.on( 'click keypress', '.repeater-field-upload .remove-button', function( e ) {\n\t\t\te.preventDefault();\n\t\t\tcontrol.$thisButton = jQuery( this );\n\t\t\tcontrol.removeFile( e );\n\t\t} );\n\n\t\t/**\n\t\t * Function that loads the Mustache template\n\t\t */\n\t\tcontrol.repeaterTemplate = _.memoize( function() {\n\t\t\tvar compiled,\n\n\t\t\t\t/*\n\t\t\t\t * Underscore's default ERB-style templates are incompatible with PHP\n\t\t\t\t * when asp_tags is enabled, so WordPress uses Mustache-inspired templating syntax.\n\t\t\t\t *\n\t\t\t\t * @see trac ticket #22344.\n\t\t\t\t */\n\t\t\t\toptions = {\n\t\t\t\t\tevaluate: /<#([\\s\\S]+?)#>/g,\n\t\t\t\t\tinterpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n\t\t\t\t\tescape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n\t\t\t\t\tvariable: 'data'\n\t\t\t\t};\n\n\t\t\treturn function( data ) {\n\t\t\t\tcompiled = _.template( control.container.find( '.customize-control-repeater-content' ).first().html(), null, options );\n\t\t\t\treturn compiled( data );\n\t\t\t};\n\t\t} );\n\n\t\t// When we load the control, the fields have not been filled up\n\t\t// This is the first time that we create all the rows\n\t\tif ( settingValue.length ) {\n\t\t\t_.each( settingValue, function( subValue ) {\n\t\t\t\ttheNewRow = control.addRow( subValue );\n\t\t\t\tcontrol.initColorPicker();\n\t\t\t\tcontrol.initSelect( theNewRow, subValue );\n\t\t\t} );\n\t\t}\n\n\t\tcontrol.repeaterFieldsContainer.sortable( {\n\t\t\thandle: '.repeater-row-header',\n\t\t\tupdate: function() {\n\t\t\t\tcontrol.sort();\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t/**\n\t * Open the media modal.\n\t *\n\t * @param {Object} event - The JS event.\n\t * @returns {void}\n\t */\n\topenFrame: function( event ) {\n\t\tif ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.$thisButton.closest( '.repeater-field' ).hasClass( 'repeater-field-cropped_image' ) ) {\n\t\t\tthis.initCropperFrame();\n\t\t} else {\n\t\t\tthis.initFrame();\n\t\t}\n\n\t\tthis.frame.open();\n\t},\n\n\tinitFrame: function() {\n\t\tvar libMediaType = this.getMimeType();\n\n\t\tthis.frame = wp.media( {\n\t\t\tstates: [\n\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tlibrary: wp.media.query( { type: libMediaType } ),\n\t\t\t\t\tmultiple: false,\n\t\t\t\t\tdate: false\n\t\t\t\t} )\n\t\t\t]\n\t\t} );\n\n\t\t// When a file is selected, run a callback.\n\t\tthis.frame.on( 'select', this.onSelect, this );\n\t},\n\n\t/**\n\t * Create a media modal select frame, and store it so the instance can be reused when needed.\n\t * This is mostly a copy/paste of Core api.CroppedImageControl in /wp-admin/js/customize-control.js\n\t *\n\t * @returns {void}\n\t */\n\tinitCropperFrame: function() {\n\n\t\t// We get the field id from which this was called\n\t\tvar currentFieldId = this.$thisButton.siblings( 'input.hidden-field' ).attr( 'data-field' ),\n\t\t\tattrs          = [ 'width', 'height', 'flex_width', 'flex_height' ], // A list of attributes to look for\n\t\t\tlibMediaType   = this.getMimeType();\n\n\t\t// Make sure we got it\n\t\tif ( _.isString( currentFieldId ) && '' !== currentFieldId ) {\n\n\t\t\t// Make fields is defined and only do the hack for cropped_image\n\t\t\tif ( _.isObject( this.params.fields[ currentFieldId ] ) && 'cropped_image' === this.params.fields[ currentFieldId ].type ) {\n\n\t\t\t\t//Iterate over the list of attributes\n\t\t\t\tattrs.forEach( function( el ) {\n\n\t\t\t\t\t// If the attribute exists in the field\n\t\t\t\t\tif ( ! _.isUndefined( this.params.fields[ currentFieldId ][ el ] ) ) {\n\n\t\t\t\t\t\t// Set the attribute in the main object\n\t\t\t\t\t\tthis.params[ el ] = this.params.fields[ currentFieldId ][ el ];\n\t\t\t\t\t}\n\t\t\t\t}.bind( this ) );\n\t\t\t}\n\t\t}\n\n\t\tthis.frame = wp.media( {\n\t\t\tbutton: {\n\t\t\t\ttext: 'Select and Crop',\n\t\t\t\tclose: false\n\t\t\t},\n\t\t\tstates: [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tlibrary: wp.media.query( { type: libMediaType } ),\n\t\t\t\t\tmultiple: false,\n\t\t\t\t\tdate: false,\n\t\t\t\t\tsuggestedWidth: this.params.width,\n\t\t\t\t\tsuggestedHeight: this.params.height\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.CustomizeImageCropper( {\n\t\t\t\t\timgSelectOptions: this.calculateImageSelectOptions,\n\t\t\t\t\tcontrol: this\n\t\t\t\t} )\n\t\t\t]\n\t\t} );\n\n\t\tthis.frame.on( 'select', this.onSelectForCrop, this );\n\t\tthis.frame.on( 'cropped', this.onCropped, this );\n\t\tthis.frame.on( 'skippedcrop', this.onSkippedCrop, this );\n\n\t},\n\n\tonSelect: function() {\n\t\tvar attachment = this.frame.state().get( 'selection' ).first().toJSON();\n\n\t\tif ( this.$thisButton.closest( '.repeater-field' ).hasClass( 'repeater-field-upload' ) ) {\n\t\t\tthis.setFileInRepeaterField( attachment );\n\t\t} else {\n\t\t\tthis.setImageInRepeaterField( attachment );\n\t\t}\n\t},\n\n\t/**\n\t * After an image is selected in the media modal, switch to the cropper\n\t * state if the image isn't the right size.\n\t */\n\n\tonSelectForCrop: function() {\n\t\tvar attachment = this.frame.state().get( 'selection' ).first().toJSON();\n\n\t\tif ( this.params.width === attachment.width && this.params.height === attachment.height && ! this.params.flex_width && ! this.params.flex_height ) {\n\t\t\tthis.setImageInRepeaterField( attachment );\n\t\t} else {\n\t\t\tthis.frame.setState( 'cropper' );\n\t\t}\n\t},\n\n\t/**\n\t * After the image has been cropped, apply the cropped image data to the setting.\n\t *\n\t * @param {object} croppedImage Cropped attachment data.\n\t * @returns {void}\n\t */\n\tonCropped: function( croppedImage ) {\n\t\tthis.setImageInRepeaterField( croppedImage );\n\t},\n\n\t/**\n\t * Returns a set of options, computed from the attached image data and\n\t * control-specific data, to be fed to the imgAreaSelect plugin in\n\t * wp.media.view.Cropper.\n\t *\n\t * @param {wp.media.model.Attachment} attachment - The attachment from the WP API.\n\t * @param {wp.media.controller.Cropper} controller - Media controller.\n\t * @returns {Object} - Options.\n\t */\n\tcalculateImageSelectOptions: function( attachment, controller ) {\n\t\tvar control    = controller.get( 'control' ),\n\t\t\tflexWidth  = !! parseInt( control.params.flex_width, 10 ),\n\t\t\tflexHeight = !! parseInt( control.params.flex_height, 10 ),\n\t\t\trealWidth  = attachment.get( 'width' ),\n\t\t\trealHeight = attachment.get( 'height' ),\n\t\t\txInit      = parseInt( control.params.width, 10 ),\n\t\t\tyInit      = parseInt( control.params.height, 10 ),\n\t\t\tratio      = xInit / yInit,\n\t\t\txImg       = realWidth,\n\t\t\tyImg       = realHeight,\n\t\t\tx1,\n\t\t\ty1,\n\t\t\timgSelectOptions;\n\n\t\tcontroller.set( 'canSkipCrop', ! control.mustBeCropped( flexWidth, flexHeight, xInit, yInit, realWidth, realHeight ) );\n\n\t\tif ( xImg / yImg > ratio ) {\n\t\t\tyInit = yImg;\n\t\t\txInit = yInit * ratio;\n\t\t} else {\n\t\t\txInit = xImg;\n\t\t\tyInit = xInit / ratio;\n\t\t}\n\n\t\tx1 = ( xImg - xInit ) / 2;\n\t\ty1 = ( yImg - yInit ) / 2;\n\n\t\timgSelectOptions = {\n\t\t\thandles: true,\n\t\t\tkeys: true,\n\t\t\tinstance: true,\n\t\t\tpersistent: true,\n\t\t\timageWidth: realWidth,\n\t\t\timageHeight: realHeight,\n\t\t\tx1: x1,\n\t\t\ty1: y1,\n\t\t\tx2: xInit + x1,\n\t\t\ty2: yInit + y1\n\t\t};\n\n\t\tif ( false === flexHeight && false === flexWidth ) {\n\t\t\timgSelectOptions.aspectRatio = xInit + ':' + yInit;\n\t\t}\n\t\tif ( false === flexHeight ) {\n\t\t\timgSelectOptions.maxHeight = yInit;\n\t\t}\n\t\tif ( false === flexWidth ) {\n\t\t\timgSelectOptions.maxWidth = xInit;\n\t\t}\n\n\t\treturn imgSelectOptions;\n\t},\n\n\t/**\n\t * Return whether the image must be cropped, based on required dimensions.\n\t *\n\t * @param {bool} flexW - The flex-width.\n\t * @param {bool} flexH - The flex-height.\n\t * @param {int}  dstW - Initial point distance in the X axis.\n\t * @param {int}  dstH - Initial point distance in the Y axis.\n\t * @param {int}  imgW - Width.\n\t * @param {int}  imgH - Height.\n\t * @returns {bool} - Whether the image must be cropped or not based on required dimensions.\n\t */\n\tmustBeCropped: function( flexW, flexH, dstW, dstH, imgW, imgH ) {\n\t\treturn ! ( ( true === flexW && true === flexH ) || ( true === flexW && dstH === imgH ) || ( true === flexH && dstW === imgW ) || ( dstW === imgW && dstH === imgH ) || ( imgW <= dstW ) );\n\t},\n\n\t/**\n\t * If cropping was skipped, apply the image data directly to the setting.\n\t *\n\t * @returns {void}\n\t */\n\tonSkippedCrop: function() {\n\t\tvar attachment = this.frame.state().get( 'selection' ).first().toJSON();\n\t\tthis.setImageInRepeaterField( attachment );\n\t},\n\n\t/**\n\t * Updates the setting and re-renders the control UI.\n\t *\n\t * @param {object} attachment - The attachment object.\n\t * @returns {void}\n\t */\n\tsetImageInRepeaterField: function( attachment ) {\n\t\tvar $targetDiv = this.$thisButton.closest( '.repeater-field-image,.repeater-field-cropped_image' );\n\n\t\t$targetDiv.find( '.kirki-image-attachment' ).html( '<img src=\"' + attachment.url + '\">' ).hide().slideDown( 'slow' );\n\n\t\t$targetDiv.find( '.hidden-field' ).val( attachment.id );\n\t\tthis.$thisButton.text( this.$thisButton.data( 'alt-label' ) );\n\t\t$targetDiv.find( '.remove-button' ).show();\n\n\t\t//This will activate the save button\n\t\t$targetDiv.find( 'input, textarea, select' ).trigger( 'change' );\n\t\tthis.frame.close();\n\t},\n\n\t/**\n\t * Updates the setting and re-renders the control UI.\n\t *\n\t * @param {object} attachment - The attachment object.\n\t * @returns {void}\n\t */\n\tsetFileInRepeaterField: function( attachment ) {\n\t\tvar $targetDiv = this.$thisButton.closest( '.repeater-field-upload' );\n\n\t\t$targetDiv.find( '.kirki-file-attachment' ).html( '<span class=\"file\"><span class=\"dashicons dashicons-media-default\"></span> ' + attachment.filename + '</span>' ).hide().slideDown( 'slow' );\n\n\t\t$targetDiv.find( '.hidden-field' ).val( attachment.id );\n\t\tthis.$thisButton.text( this.$thisButton.data( 'alt-label' ) );\n\t\t$targetDiv.find( '.upload-button' ).show();\n\t\t$targetDiv.find( '.remove-button' ).show();\n\n\t\t//This will activate the save button\n\t\t$targetDiv.find( 'input, textarea, select' ).trigger( 'change' );\n\t\tthis.frame.close();\n\t},\n\n\tgetMimeType: function() {\n\n\t\t// We get the field id from which this was called\n\t\tvar currentFieldId = this.$thisButton.siblings( 'input.hidden-field' ).attr( 'data-field' );\n\n\t\t// Make sure we got it\n\t\tif ( _.isString( currentFieldId ) && '' !== currentFieldId ) {\n\n\t\t\t// Make fields is defined and only do the hack for cropped_image\n\t\t\tif ( _.isObject( this.params.fields[ currentFieldId ] ) && 'upload' === this.params.fields[ currentFieldId ].type ) {\n\n\t\t\t\t// If the attribute exists in the field\n\t\t\t\tif ( ! _.isUndefined( this.params.fields[ currentFieldId ].mime_type ) ) {\n\n\t\t\t\t\t// Set the attribute in the main object\n\t\t\t\t\treturn this.params.fields[ currentFieldId ].mime_type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn 'image';\n\t},\n\n\tremoveImage: function( event ) {\n\t\tvar $targetDiv,\n\t\t\t$uploadButton;\n\n\t\tif ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$targetDiv = this.$thisButton.closest( '.repeater-field-image,.repeater-field-cropped_image,.repeater-field-upload' );\n\t\t$uploadButton = $targetDiv.find( '.upload-button' );\n\n\t\t$targetDiv.find( '.kirki-image-attachment' ).slideUp( 'fast', function() {\n\t\t\tjQuery( this ).show().html( jQuery( this ).data( 'placeholder' ) );\n\t\t} );\n\t\t$targetDiv.find( '.hidden-field' ).val( '' );\n\t\t$uploadButton.text( $uploadButton.data( 'label' ) );\n\t\tthis.$thisButton.hide();\n\n\t\t$targetDiv.find( 'input, textarea, select' ).trigger( 'change' );\n\t},\n\n\tremoveFile: function( event ) {\n\t\tvar $targetDiv,\n\t\t\t$uploadButton;\n\n\t\tif ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$targetDiv = this.$thisButton.closest( '.repeater-field-upload' );\n\t\t$uploadButton = $targetDiv.find( '.upload-button' );\n\n\t\t$targetDiv.find( '.kirki-file-attachment' ).slideUp( 'fast', function() {\n\t\t\tjQuery( this ).show().html( jQuery( this ).data( 'placeholder' ) );\n\t\t} );\n\t\t$targetDiv.find( '.hidden-field' ).val( '' );\n\t\t$uploadButton.text( $uploadButton.data( 'label' ) );\n\t\tthis.$thisButton.hide();\n\n\t\t$targetDiv.find( 'input, textarea, select' ).trigger( 'change' );\n\n\t},\n\n\t/**\n\t * Get the current value of the setting\n\t *\n\t * @returns {Object} - Returns the value.\n\t */\n\tgetValue: function() {\n\n\t\t// The setting is saved in JSON\n\t\treturn JSON.parse( decodeURI( this.setting.get() ) );\n\t},\n\n\t/**\n\t * Set a new value for the setting\n\t *\n\t * @param {Object} newValue - The new value.\n\t * @param {bool} refresh - If we want to refresh the previewer or not\n\t * @param {bool} filtering - If we want to filter or not.\n\t * @returns {void}\n\t */\n\tsetValue: function( newValue, refresh, filtering ) {\n\n\t\t// We need to filter the values after the first load to remove data requrired for diplay but that we don't want to save in DB\n\t\tvar filteredValue = newValue,\n\t\t\tfilter        = [];\n\n\t\tif ( filtering ) {\n\t\t\tjQuery.each( this.params.fields, function( index, value ) {\n\t\t\t\tif ( 'image' === value.type || 'cropped_image' === value.type || 'upload' === value.type ) {\n\t\t\t\t\tfilter.push( index );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tjQuery.each( newValue, function( index, value ) {\n\t\t\t\tjQuery.each( filter, function( ind, field ) {\n\t\t\t\t\tif ( ! _.isUndefined( value[ field ] ) && ! _.isUndefined( value[ field ].id ) ) {\n\t\t\t\t\t\tfilteredValue[index][ field ] = value[ field ].id;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\n\t\tthis.setting.set( encodeURI( JSON.stringify( filteredValue ) ) );\n\n\t\tif ( refresh ) {\n\n\t\t\t// Trigger the change event on the hidden field so\n\t\t\t// previewer refresh the website on Customizer\n\t\t\tthis.settingField.trigger( 'change' );\n\t\t}\n\t},\n\n\t/**\n\t * Add a new row to repeater settings based on the structure.\n\t *\n\t * @param {Object} data - (Optional) Object of field => value pairs (undefined if you want to get the default values)\n\t * @returns {Object} - Returns the new row.\n\t */\n\taddRow: function( data ) {\n\t\tvar control       = this,\n\t\t\ttemplate      = control.repeaterTemplate(), // The template for the new row (defined on Kirki_Customize_Repeater_Control::render_content() ).\n\t\t\tsettingValue  = this.getValue(), // Get the current setting value.\n\t\t\tnewRowSetting = {}, // Saves the new setting data.\n\t\t\ttemplateData, // Data to pass to the template\n\t\t\tnewRow,\n\t\t\ti;\n\n\t\tif ( template ) {\n\n\t\t\t// The control structure is going to define the new fields\n\t\t\t// We need to clone control.params.fields. Assigning it\n\t\t\t// ould result in a reference assignment.\n\t\t\ttemplateData = jQuery.extend( true, {}, control.params.fields );\n\n\t\t\t// But if we have passed data, we'll use the data values instead\n\t\t\tif ( data ) {\n\t\t\t\tfor ( i in data ) {\n\t\t\t\t\tif ( data.hasOwnProperty( i ) && templateData.hasOwnProperty( i ) ) {\n\t\t\t\t\t\ttemplateData[ i ].default = data[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttemplateData.index = this.currentIndex;\n\n\t\t\t// Append the template content\n\t\t\ttemplate = template( templateData );\n\n\t\t\t// Create a new row object and append the element\n\t\t\tnewRow = new RepeaterRow(\n\t\t\t\tcontrol.currentIndex,\n\t\t\t\tjQuery( template ).appendTo( control.repeaterFieldsContainer ),\n\t\t\t\tcontrol.params.row_label,\n\t\t\t\tcontrol\n\t\t\t);\n\n\t\t\tnewRow.container.on( 'row:remove', function( e, rowIndex ) {\n\t\t\t\tcontrol.deleteRow( rowIndex );\n\t\t\t} );\n\n\t\t\tnewRow.container.on( 'row:update', function( e, rowIndex, fieldName, element ) {\n\t\t\t\tcontrol.updateField.call( control, e, rowIndex, fieldName, element ); // eslint-disable-line no-useless-call\n\t\t\t\tnewRow.updateLabel();\n\t\t\t} );\n\n\t\t\t// Add the row to rows collection\n\t\t\tthis.rows[ this.currentIndex ] = newRow;\n\n\t\t\tfor ( i in templateData ) {\n\t\t\t\tif ( templateData.hasOwnProperty( i ) ) {\n\t\t\t\t\tnewRowSetting[ i ] = templateData[ i ].default;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsettingValue[ this.currentIndex ] = newRowSetting;\n\t\t\tthis.setValue( settingValue, true );\n\n\t\t\tthis.currentIndex++;\n\n\t\t\treturn newRow;\n\t\t}\n\t},\n\n\tsort: function() {\n\t\tvar control     = this,\n\t\t\t$rows       = this.repeaterFieldsContainer.find( '.repeater-row' ),\n\t\t\tnewOrder    = [],\n\t\t\tsettings    = control.getValue(),\n\t\t\tnewRows     = [],\n\t\t\tnewSettings = [];\n\n\t\t$rows.each( function( i, element ) {\n\t\t\tnewOrder.push( jQuery( element ).data( 'row' ) );\n\t\t} );\n\n\t\tjQuery.each( newOrder, function( newPosition, oldPosition ) {\n\t\t\tnewRows[ newPosition ] = control.rows[ oldPosition ];\n\t\t\tnewRows[ newPosition ].setRowIndex( newPosition );\n\n\t\t\tnewSettings[ newPosition ] = settings[ oldPosition ];\n\t\t} );\n\n\t\tcontrol.rows = newRows;\n\t\tcontrol.setValue( newSettings );\n\t},\n\n\t/**\n\t * Delete a row in the repeater setting\n\t *\n\t * @param {int} index - Position of the row in the complete Setting Array\n\t * @returns {void}\n\t */\n\tdeleteRow: function( index ) {\n\t\tvar currentSettings = this.getValue(),\n\t\t\trow,\n\t\t\tprop;\n\n\t\tif ( currentSettings[ index ] ) {\n\n\t\t\t// Find the row\n\t\t\trow = this.rows[ index ];\n\t\t\tif ( row ) {\n\n\t\t\t\t// Remove the row settings\n\t\t\t\tdelete currentSettings[ index ];\n\n\t\t\t\t// Remove the row from the rows collection\n\t\t\t\tdelete this.rows[ index ];\n\n\t\t\t\t// Update the new setting values\n\t\t\t\tthis.setValue( currentSettings, true );\n\t\t\t}\n\t\t}\n\n\t\t// Remap the row numbers\n\t\tfor ( prop in this.rows ) {\n\t\t\tif ( this.rows.hasOwnProperty( prop ) && this.rows[ prop ] ) {\n\t\t\t\tthis.rows[ prop ].updateLabel();\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Update a single field inside a row.\n\t * Triggered when a field has changed\n\t *\n\t * @param {Object} e - Event Object\n\t * @param {int} rowIndex - The row's index as an integer.\n\t * @param {string} fieldId - The field ID.\n\t * @param {string|Object} element - The element's identifier, or jQuery Object of the element.\n\t * @returns {void}\n\t */\n\tupdateField: function( e, rowIndex, fieldId, element ) {\n\t\tvar type,\n\t\t\trow,\n\t\t\tcurrentSettings;\n\n\t\tif ( ! this.rows[ rowIndex ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! this.params.fields[ fieldId ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttype            = this.params.fields[ fieldId].type;\n\t\trow             = this.rows[ rowIndex ];\n\t\tcurrentSettings = this.getValue();\n\n\t\telement = jQuery( element );\n\n\t\tif ( _.isUndefined( currentSettings[ row.rowIndex ][ fieldId ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( 'checkbox' === type ) {\n\t\t\tcurrentSettings[ row.rowIndex ][ fieldId ] = element.is( ':checked' );\n\t\t} else {\n\n\t\t\t// Update the settings\n\t\t\tcurrentSettings[ row.rowIndex ][ fieldId ] = element.val();\n\t\t}\n\t\tthis.setValue( currentSettings, true );\n\t},\n\n\t/**\n\t * Init the color picker on color fields\n\t * Called after AddRow\n\t *\n\t * @returns {void}\n\t */\n\tinitColorPicker: function() {\n\t\tvar control     = this,\n\t\t\tcolorPicker = control.container.find( '.color-picker-hex' ),\n\t\t\toptions     = {},\n\t\t\tfieldId     = colorPicker.data( 'field' );\n\n\t\t// We check if the color palette parameter is defined.\n\t\tif ( ! _.isUndefined( fieldId ) && ! _.isUndefined( control.params.fields[ fieldId ] ) && ! _.isUndefined( control.params.fields[ fieldId ].palettes ) && _.isObject( control.params.fields[ fieldId ].palettes ) ) {\n\t\t\toptions.palettes = control.params.fields[ fieldId ].palettes;\n\t\t}\n\n\t\t// When the color picker value is changed we update the value of the field\n\t\toptions.change = function( event, ui ) {\n\n\t\t\tvar currentPicker   = jQuery( event.target ),\n\t\t\t\trow             = currentPicker.closest( '.repeater-row' ),\n\t\t\t\trowIndex        = row.data( 'row' ),\n\t\t\t\tcurrentSettings = control.getValue();\n\n\t\t\tcurrentSettings[ rowIndex ][ currentPicker.data( 'field' ) ] = ui.color.toString();\n\t\t\tcontrol.setValue( currentSettings, true );\n\n\t\t};\n\n\t\t// Init the color picker\n\t\tif ( 0 !== colorPicker.length ) {\n\t\t\tcolorPicker.wpColorPicker( options );\n\t\t}\n\t},\n\n\t/**\n\t * Init the dropdown-pages field.\n\t * Called after AddRow\n\t *\n\t * @param {object} theNewRow the row that was added to the repeater\n\t * @param {object} data the data for the row if we're initializing a pre-existing row\n\t * @returns {void}\n\t */\n\tinitSelect: function( theNewRow, data ) {\n\t\tvar control  = this,\n\t\t\tdropdown = theNewRow.container.find( '.repeater-field select' ),\n\t\t\tdataField;\n\n\t\tif ( 0 === dropdown.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdataField = dropdown.data( 'field' );\n\t\tmultiple  = jQuery( dropdown ).data( 'multiple' );\n\n\t\tdata = data || {};\n\t\tdata[ dataField ] = data[ dataField ] || '';\n\n\t\tjQuery( dropdown ).val( data[ dataField ] || jQuery( dropdown ).val() );\n\n\t\tthis.container.on( 'change', '.repeater-field select', function( event ) {\n\n\t\t\tvar currentDropdown = jQuery( event.target ),\n\t\t\t\trow             = currentDropdown.closest( '.repeater-row' ),\n\t\t\t\trowIndex        = row.data( 'row' ),\n\t\t\t\tcurrentSettings = control.getValue();\n\n\t\t\tcurrentSettings[ rowIndex ][ currentDropdown.data( 'field' ) ] = jQuery( this ).val();\n\t\t\tcontrol.setValue( currentSettings );\n\t\t} );\n\t}\n} );\n"],"names":["$6a6cd209053fe666$var$RepeaterRow","rowIndex","container","label","control","self","this","header","find","on","toggleMinimize","remove","trigger","e","jQuery","target","data","setRowIndex","rowNum","attr","updateLabel","toggleClass","slideUp","detach","rowLabelField","rowLabel","rowLabelSelector","type","field","_","isFunction","val","isUndefined","params","fields","choices","selector","text","value","wp","customize","controlConstructor","repeater","Control","extend","ready","window","kirkiControlLoader","initKirkiControl","limit","theNewRow","settingValue","settingField","first","setValue","repeaterFieldsContainer","currentIndex","rows","parseInt","preventDefault","addRow","initColorPicker","initSelect","addClass","removeClass","$thisButton","openFrame","removeImage","removeFile","repeaterTemplate","memoize","options","evaluate","interpolate","escape","variable","template","html","compiled","length","each","subValue","sortable","handle","update","sort","event","utils","isKeydownButNotEnterEvent","closest","hasClass","initCropperFrame","initFrame","frame","open","libMediaType","getMimeType","media","states","controller","Library","library","query","multiple","date","onSelect","currentFieldId","siblings","isString","isObject","forEach","el","bind","button","close","suggestedWidth","width","suggestedHeight","height","CustomizeImageCropper","imgSelectOptions","calculateImageSelectOptions","onSelectForCrop","onCropped","onSkippedCrop","attachment","state","get","toJSON","setFileInRepeaterField","setImageInRepeaterField","flex_width","flex_height","setState","croppedImage","x1","y1","flexWidth","flexHeight","realWidth","realHeight","xInit","yInit","ratio","xImg","yImg","set","mustBeCropped","handles","keys","instance","persistent","imageWidth","imageHeight","x2","y2","aspectRatio","maxHeight","maxWidth","flexW","flexH","dstW","dstH","imgW","imgH","$targetDiv","url","hide","slideDown","id","show","filename","mime_type","$uploadButton","getValue","JSON","parse","decodeURI","setting","newValue","refresh","filtering","filteredValue","filter","index","push","ind","encodeURI","stringify","templateData","newRow","i","newRowSetting","hasOwnProperty","default","appendTo","row_label","deleteRow","fieldName","element","updateField","call","$rows","newOrder","settings","newRows","newSettings","newPosition","oldPosition","prop","currentSettings","fieldId","row","is","colorPicker","palettes","change","ui","currentPicker","color","toString","wpColorPicker","dataField","dropdown","currentDropdown"],"version":3,"file":"control.js.map"}