first
This commit is contained in:
commit
00b7dbd0b7
10404 files changed
+3285853
No files matched your search
@@ -0,0 +1,211 @@
|
||||
/**
|
||||
* Used for character counters
|
||||
*/
|
||||
window.CMB2 = window.CMB2 || {};
|
||||
window.CMB2.charcounter = window.CMB2.charcounter || {};
|
||||
|
||||
( function(window, document, $, cmb, counter ) {
|
||||
'use strict';
|
||||
|
||||
if ( ! wp.utils || ! wp.utils.WordCounter ) {
|
||||
return cmb.log( 'Cannot find wp.utils!' );
|
||||
}
|
||||
|
||||
// Private variables
|
||||
counter.counters = {};
|
||||
var counters = counter.counters;
|
||||
var wpCounter = new wp.utils.WordCounter();
|
||||
|
||||
/**
|
||||
* Update a field's character counter
|
||||
*
|
||||
* @since 2.7.0
|
||||
*
|
||||
* @param {string} field_id
|
||||
*
|
||||
* @return {int}
|
||||
*/
|
||||
counter.updateCounter = function( field_id ) {
|
||||
// No counter?
|
||||
if ( ! counters.hasOwnProperty( field_id ) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var instance = counters[ field_id ];
|
||||
var wysiwyg = instance.editor && ! instance.editor.isHidden();
|
||||
|
||||
// Are we dealing with WYSIWYG visual editor, or textarea / WYSIWYG textarea?
|
||||
var text = wysiwyg ? instance.editor.getContent( { format: 'raw' } ) : cmb.$id( field_id ).val().trim();
|
||||
var count = wpCounter.count( text, instance.type );
|
||||
var exceeded = instance.max && count > instance.max;
|
||||
|
||||
// Number remaining when max is defined
|
||||
var val = instance.max ? instance.max - count : count;
|
||||
|
||||
// Over maximum?
|
||||
instance.$el.parents( '.cmb2-char-counter-wrap' )[ exceeded ? 'addClass' : 'removeClass' ]( 'cmb2-max-exceeded' );
|
||||
|
||||
// Update counter, and update counter input width.
|
||||
instance.$el.val( val ).outerWidth( ( ( 8 * String( val ).length ) + 15 ) + 'px' );
|
||||
|
||||
return count;
|
||||
};
|
||||
|
||||
counter.instantiate = function( $el ) {
|
||||
var data = $el.data();
|
||||
|
||||
// Add counter details if not already done
|
||||
if ( ! ( data.fieldId in counters ) ) {
|
||||
|
||||
var instance = {
|
||||
$el : $el,
|
||||
max : data.max,
|
||||
type : 'words' === data.counterType ? 'words' : 'characters_including_spaces',
|
||||
editor : false,
|
||||
};
|
||||
|
||||
counters[ data.fieldId ] = instance;
|
||||
|
||||
// Initialise counter
|
||||
counter.updateCounter( data.fieldId );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes all character counters. Hooked to cmb_init.
|
||||
*
|
||||
* @since 2.7.0
|
||||
*
|
||||
* @param {bool} init First init?
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
counter.initAll = function() {
|
||||
|
||||
// Gather counters and initialise
|
||||
$( '.cmb2-char-counter' ).each( function() {
|
||||
counter.instantiate( $( this ) );
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes WYSIWYG editors. Hooked to tinymce-editor-init
|
||||
*
|
||||
* @since 2.7.0
|
||||
*
|
||||
* @param {object} evt
|
||||
* @param {object} editor
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
counter.initWysiwyg = function( evt, editor ) {
|
||||
|
||||
// Check if it's one of our WYSIWYGs
|
||||
// Should have already been registered in counters via hidden textarea
|
||||
if ( editor.id in counters ) {
|
||||
|
||||
// Add editor to counter
|
||||
counters[ editor.id ].editor = editor;
|
||||
|
||||
// Add nodechange event
|
||||
editor.on( 'nodechange keyup', counter.countWysiwyg );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes after a new repeatable row has been added. Hooked to cmb2_add_row
|
||||
*
|
||||
* @since 2.7.0
|
||||
*
|
||||
* @param {object} evt A jQuery-normalized event object.
|
||||
* @param {object} $row A jQuery dom element object for the group row.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
counter.addRow = function( evt, $row ) {
|
||||
|
||||
// Character counters in row?
|
||||
$row.find( '.cmb2-char-counter' ).each( function() {
|
||||
|
||||
// Update attributes
|
||||
var $this = $( this );
|
||||
var id = $this.attr( 'id' );
|
||||
var field_id = id.replace( /^char-counter-/, '' );
|
||||
$this.attr( 'data-field-id', field_id ).data( 'field-id', field_id );
|
||||
|
||||
counter.instantiate( $this );
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Clean the counters array.
|
||||
* Removes counters after a repeatable row has been removed. Hooked to cmb2_remove_row.
|
||||
*
|
||||
* @since 2.7.0
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
counter.cleanCounters = function() {
|
||||
var field_id, remove = [];
|
||||
|
||||
// Got through counters
|
||||
for ( field_id in counters ) {
|
||||
// Check for element, gather for removal
|
||||
if ( ! document.getElementById( field_id ) ) {
|
||||
remove.push( field_id );
|
||||
}
|
||||
}
|
||||
|
||||
// Anything to remove?
|
||||
if ( remove.length ) {
|
||||
_.each( remove, function( field_id ) {
|
||||
delete counters[ field_id ];
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Counts the value of wysiwyg on the keyup event.
|
||||
*
|
||||
* @since 2.7.0
|
||||
*
|
||||
* @param {object} evt
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
counter.countWysiwyg = _.throttle( function( evt ) {
|
||||
|
||||
// Init event
|
||||
if ( evt.hasOwnProperty( 'element' ) ) {
|
||||
return counter.updateCounter( $( evt.element ).data( 'id' ) );
|
||||
}
|
||||
|
||||
// Nodechange event
|
||||
if ( evt.hasOwnProperty( 'currentTarget' ) ) {
|
||||
return counter.updateCounter( $( evt.currentTarget ).data( 'id' ) );
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
/**
|
||||
* Counts the value of textarea on the keyup event.
|
||||
*
|
||||
* @since 2.7.0
|
||||
*
|
||||
* @param {object} evt
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
counter.countTextarea = _.throttle( function(evt) {
|
||||
counter.updateCounter( evt.currentTarget.id );
|
||||
}, 400 );
|
||||
|
||||
// Hook in our event callbacks.
|
||||
$( document )
|
||||
.on( 'cmb_init', counter.initAll )
|
||||
.on( 'tinymce-editor-init', counter.initWysiwyg )
|
||||
.on( 'cmb2_add_row', counter.addRow )
|
||||
.on( 'cmb2_remove_row', counter.cleanCounters )
|
||||
.on( 'input keyup', '.cmb2-count-chars', counter.countTextarea );
|
||||
|
||||
} )( window, document, jQuery, window.CMB2, window.CMB2.charcounter );
|
||||
@@ -0,0 +1,345 @@
|
||||
/**
|
||||
* Used for WYSIWYG logic
|
||||
*/
|
||||
window.CMB2 = window.CMB2 || {};
|
||||
window.CMB2.wysiwyg = window.CMB2.wysiwyg || {};
|
||||
|
||||
( function(window, document, $, cmb, wysiwyg, undefined ) {
|
||||
'use strict';
|
||||
|
||||
// Private variables
|
||||
var toBeDestroyed = [];
|
||||
var toBeInitialized = [];
|
||||
var all = wysiwyg.all = {};
|
||||
|
||||
// Private functions
|
||||
|
||||
/**
|
||||
* Initializes any editors that weren't initialized because they didn't exist yet.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
function delayedInit() {
|
||||
|
||||
// Don't initialize until they've all been destroyed.
|
||||
if ( 0 === toBeDestroyed.length ) {
|
||||
toBeInitialized.forEach( function ( toInit ) {
|
||||
toBeInitialized.splice( toBeInitialized.indexOf( toInit ), 1 );
|
||||
wysiwyg.init.apply( wysiwyg, toInit );
|
||||
} );
|
||||
} else {
|
||||
window.setTimeout( delayedInit, 100 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys any editors that weren't destroyed because they didn't exist yet.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
function delayedDestroy() {
|
||||
toBeDestroyed.forEach( function( id ) {
|
||||
toBeDestroyed.splice( toBeDestroyed.indexOf( id ), 1 );
|
||||
wysiwyg.destroy( id );
|
||||
} );
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the option data for a group (and initializes that data if it doesn't exist).
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {object} data The group/field data.
|
||||
*
|
||||
* @return {object} Options data object for a group.
|
||||
*/
|
||||
function getGroupData( data ) {
|
||||
var groupid = data.groupid;
|
||||
var fieldid = data.fieldid;
|
||||
|
||||
if ( ! all[ groupid ] || ! all[ groupid ][ fieldid ] ) {
|
||||
all[ groupid ] = all[ groupid ] || {};
|
||||
all[ groupid ][ fieldid ] = {
|
||||
template : wp.template( 'cmb2-wysiwyg-' + groupid + '-' + fieldid ),
|
||||
defaults : {
|
||||
|
||||
// Get the data from the template-wysiwyg initiation.
|
||||
mce : $.extend( {}, tinyMCEPreInit.mceInit[ 'cmb2_i_' + groupid + fieldid ] ),
|
||||
qt : $.extend( {}, tinyMCEPreInit.qtInit[ 'cmb2_i_' + groupid + fieldid ] )
|
||||
}
|
||||
};
|
||||
// This is the template-wysiwyg data, and we do not want that to be initiated.
|
||||
delete tinyMCEPreInit.mceInit[ 'cmb2_i_' + groupid + fieldid ];
|
||||
delete tinyMCEPreInit.qtInit[ 'cmb2_i_' + groupid + fieldid ];
|
||||
}
|
||||
|
||||
return all[ groupid ][ fieldid ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiates the tinyMCEPreInit options for a wysiwyg editor instance.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {object} options Options data object for the wysiwyg editor instance.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
function initOptions( options ) {
|
||||
var nameRegex = new RegExp( 'cmb2_n_' + options.groupid + options.fieldid, 'g' );
|
||||
var idRegex = new RegExp( 'cmb2_i_' + options.groupid + options.fieldid, 'g' );
|
||||
var prop, newSettings, newQTS;
|
||||
|
||||
// If no settings for this field. Clone from placeholder.
|
||||
if ( 'undefined' === typeof( tinyMCEPreInit.mceInit[ options.id ] ) ) {
|
||||
newSettings = $.extend( {}, options.defaults.mce );
|
||||
for ( prop in newSettings ) {
|
||||
if ( 'string' === typeof( newSettings[ prop ] ) ) {
|
||||
newSettings[ prop ] = newSettings[ prop ]
|
||||
.replace( idRegex, options.id )
|
||||
.replace( nameRegex, options.name );
|
||||
}
|
||||
}
|
||||
tinyMCEPreInit.mceInit[ options.id ] = newSettings;
|
||||
}
|
||||
|
||||
// If no Quicktag settings for this field. Clone from placeholder.
|
||||
if ( 'undefined' === typeof( tinyMCEPreInit.qtInit[ options.id ] ) ) {
|
||||
newQTS = $.extend( {}, options.defaults.qt );
|
||||
for ( prop in newQTS ) {
|
||||
if ( 'string' === typeof( newQTS[ prop ] ) ) {
|
||||
newQTS[ prop ] = newQTS[ prop ]
|
||||
.replace( idRegex, options.id )
|
||||
.replace( nameRegex, options.name );
|
||||
}
|
||||
}
|
||||
tinyMCEPreInit.qtInit[ options.id ] = newQTS;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes all group wysiwyg editors. Hooked to cmb_init.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
wysiwyg.initAll = function() {
|
||||
var $this,data,initiated;
|
||||
|
||||
$( '.cmb2-wysiwyg-placeholder' ).each( function() {
|
||||
$this = $( this );
|
||||
data = $this.data();
|
||||
|
||||
if ( data.groupid ) {
|
||||
|
||||
data.id = $this.attr( 'id' );
|
||||
data.name = $this.attr( 'name' );
|
||||
data.value = $this.val();
|
||||
|
||||
wysiwyg.init( $this, data, false );
|
||||
initiated = true;
|
||||
}
|
||||
} );
|
||||
|
||||
if ( true === initiated ) {
|
||||
if ( 'undefined' !== typeof window.QTags ) {
|
||||
window.QTags._buttonsInit();
|
||||
}
|
||||
|
||||
// Hook in our event callbacks.
|
||||
$( document )
|
||||
.on( 'cmb2_add_row', wysiwyg.addRow )
|
||||
.on( 'cmb2_remove_group_row_start', wysiwyg.destroyRowEditors )
|
||||
.on( 'cmb2_shift_rows_start', wysiwyg.shiftStart )
|
||||
.on( 'cmb2_shift_rows_complete', wysiwyg.shiftComplete );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initiates wysiwyg editors in a new group row. Hooked to cmb2_add_row.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {object} evt A jQuery-normalized event object.
|
||||
* @param {object} $row A jQuery dom element object for the group row.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
wysiwyg.addRow = function( evt, $row ) {
|
||||
wysiwyg.initRow( $row, evt );
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroys wysiwyg editors in a group row when that row is removed. Hooked to cmb2_remove_group_row_start.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {object} evt A jQuery-normalized event object.
|
||||
* @param {object} $btn A jQuery dom element object for the remove-row button.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
wysiwyg.destroyRowEditors = function( evt, $btn ) {
|
||||
wysiwyg.destroy( $btn.parents( '.cmb-repeatable-grouping' ).find( '.wp-editor-area' ).attr( 'id' ) );
|
||||
};
|
||||
|
||||
/**
|
||||
* When a row-shift starts, we need to destroy the wysiwyg editors for the group-rows being shuffled.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {object} evt A jQuery-normalized event object.
|
||||
* @param {object} $btn A jQuery dom element object for the remove-row button.
|
||||
* @param {object} $from A jQuery dom element object for the row being shifted from.
|
||||
* @param {object} $to A jQuery dom element object for the row being shifted to.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
wysiwyg.shiftStart = function( evt, $btn, $from, $to ) {
|
||||
$from.add( $to ).find( '.wp-editor-wrap textarea' ).each( function() {
|
||||
wysiwyg.destroy( $( this ).attr( 'id' ) );
|
||||
} );
|
||||
};
|
||||
|
||||
/**
|
||||
* When a row-shift completes, we need to re-init the wysiwyg editors for the group-rows being shuffled.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {object} evt A jQuery-normalized event object.
|
||||
* @param {object} $btn A jQuery dom element object for the remove-row button.
|
||||
* @param {object} $from A jQuery dom element object for the row being shifted from.
|
||||
* @param {object} $to A jQuery dom element object for the row being shifted to.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
wysiwyg.shiftComplete = function( evt, $btn, $from, $to ) {
|
||||
$from.add( $to ).each( function() {
|
||||
wysiwyg.initRow( $( this ), evt );
|
||||
} );
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes editors for a new CMB row.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {object} $row A jQuery dom element object for the group row.
|
||||
* @param {object} evt A jQuery-normalized event object.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
wysiwyg.initRow = function( $row, evt ) {
|
||||
var $toReplace, data, defVal;
|
||||
|
||||
$row.find( '.cmb2-wysiwyg-inner-wrap' ).each( function() {
|
||||
$toReplace = $( this );
|
||||
data = $toReplace.data();
|
||||
defVal = cmb.getFieldArg( data.hash, 'default', '' );
|
||||
defVal = 'undefined' !== typeof defVal && false !== defVal ? defVal : '';
|
||||
|
||||
data.iterator = $row.data( 'iterator' );
|
||||
data.fieldid = data.id;
|
||||
data.id = data.groupid + '_' + data.iterator + '_' + data.fieldid;
|
||||
data.name = data.groupid + '[' + data.iterator + '][' + data.fieldid + ']';
|
||||
data.value = 'cmb2_add_row' !== evt.type && $toReplace.find( '.wp-editor-area' ).length ? $toReplace.find( '.wp-editor-area' ).val() : defVal;
|
||||
|
||||
// The destroys might not have happened yet. Don't init until they have.
|
||||
if ( 0 === toBeDestroyed.length ) {
|
||||
|
||||
wysiwyg.init( $toReplace, data );
|
||||
|
||||
} else {
|
||||
toBeInitialized.push( [$toReplace, data] );
|
||||
window.setTimeout( delayedInit, 100 );
|
||||
}
|
||||
} );
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Initiates a wysiwyg editor instance and replaces the passed dom element w/ the editor html.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {object} $toReplace A jQuery dom element which will be replaced with the wysiwyg editor.
|
||||
* @param {object} data Data used to initate the editor.
|
||||
* @param {bool} buttonsInit Whether to run QTags._buttonsInit()
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
wysiwyg.init = function( $toReplace, data, buttonsInit ) {
|
||||
if ( ! data.groupid ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var mceActive = cmb.canTinyMCE();
|
||||
var qtActive = 'function' === typeof window.quicktags;
|
||||
$.extend( data, getGroupData( data ) );
|
||||
|
||||
initOptions( data );
|
||||
|
||||
$toReplace.replaceWith( data.template( data ) );
|
||||
|
||||
if ( mceActive ) {
|
||||
window.tinyMCE.init( tinyMCEPreInit.mceInit[ data.id ] );
|
||||
}
|
||||
|
||||
if ( qtActive ) {
|
||||
window.quicktags( tinyMCEPreInit.qtInit[ data.id ] );
|
||||
}
|
||||
|
||||
if ( mceActive ) {
|
||||
$( document.getElementById( data.id ) ).parents( '.wp-editor-wrap' ).removeClass( 'html-active' ).addClass( 'tmce-active' );
|
||||
}
|
||||
|
||||
if ( false !== buttonsInit && 'undefined' !== typeof window.QTags ) {
|
||||
window.QTags._buttonsInit();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroys a wysiwyg editor instance.
|
||||
*
|
||||
* @since 2.2.3
|
||||
*
|
||||
* @param {string} id Editor id.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
wysiwyg.destroy = function( id ) {
|
||||
if ( ! cmb.canTinyMCE() ) {
|
||||
// Nothing to see here.
|
||||
return;
|
||||
}
|
||||
|
||||
// The editor might not be initialized yet. But we need to destroy it once it is.
|
||||
var editor = tinyMCE.get( id );
|
||||
|
||||
if ( editor !== null && typeof( editor ) !== 'undefined' ) {
|
||||
editor.destroy();
|
||||
|
||||
if ( 'undefined' === typeof( tinyMCEPreInit.mceInit[ id ] ) ) {
|
||||
delete tinyMCEPreInit.mceInit[ id ];
|
||||
}
|
||||
|
||||
if ( 'undefined' === typeof( tinyMCEPreInit.qtInit[ id ] ) ) {
|
||||
delete tinyMCEPreInit.qtInit[ id ];
|
||||
}
|
||||
|
||||
} else if ( -1 === toBeDestroyed.indexOf( id ) ) {
|
||||
toBeDestroyed.push( id );
|
||||
window.setTimeout( delayedDestroy, 100 );
|
||||
}
|
||||
};
|
||||
|
||||
// Hook in our event callbacks.
|
||||
$( document ).on( 'cmb_init', wysiwyg.initAll );
|
||||
|
||||
} )( window, document, jQuery, window.CMB2, window.CMB2.wysiwyg );
|
||||
+1326
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1 @@
|
||||
window.CMB2=window.CMB2||{},function(window,document,$,cmb,undefined){"use strict";var $document,l10n=window.cmb2_l10,setTimeout=window.setTimeout,$id=function(selector){return $(document.getElementById(selector))},getRowId=function(id,newIterator){return id=id.split("-"),id.splice(id.length-1,1),id.push(newIterator),id.join("-")};cmb.$id=$id;var defaults={idNumber:!1,repeatEls:'input:not([type="button"]),select,textarea,.cmb2-media-status',noEmpty:'input:not([type="button"]):not([type="radio"]):not([type="checkbox"]),textarea',repeatUpdate:'input:not([type="button"]),select,textarea,label',styleBreakPoint:450,mediaHandlers:{},defaults:{time_picker:l10n.defaults.time_picker,date_picker:l10n.defaults.date_picker,color_picker:l10n.defaults.color_picker||{},code_editor:l10n.defaults.code_editor},media:{frames:{}}};cmb.init=function(){$document=$(document),$.extend(cmb,defaults),cmb.trigger("cmb_pre_init");var $metabox=cmb.metabox(),$repeatGroup=$metabox.find(".cmb-repeatable-group");cmb.initPickers($metabox.find('input[type="text"].cmb2-timepicker'),$metabox.find('input[type="text"].cmb2-datepicker'),$metabox.find('input[type="text"].cmb2-colorpicker')),cmb.initCodeEditors($metabox.find(".cmb2-textarea-code:not(.disable-codemirror)")),$('<p><span class="button-secondary cmb-multicheck-toggle">'+l10n.strings.check_toggle+"</span></p>").insertBefore(".cmb2-checkbox-list:not(.no-select-all)"),cmb.makeListSortable(),cmb.makeRepeatableSortable(),$metabox.on("change",".cmb2_upload_file",function(){cmb.media.field=$(this).attr("id"),$id(cmb.media.field+"_id").val("")}).on("click",".cmb-multicheck-toggle",cmb.toggleCheckBoxes).on("click",".cmb2-upload-button",cmb.handleMedia).on("click",".cmb-attach-list li, .cmb2-media-status .img-status img, .cmb2-media-status .file-status > span",cmb.handleFileClick).on("click",".cmb2-remove-file-button",cmb.handleRemoveMedia).on("click",".cmb-add-group-row",cmb.addGroupRow).on("click",".cmb-add-row-button",cmb.addAjaxRow).on("click",".cmb-remove-group-row",cmb.removeGroupRow).on("click",".cmb-remove-row-button",cmb.removeAjaxRow).on("keyup paste focusout",".cmb2-oembed",cmb.maybeOembed).on("cmb2_remove_row",".cmb-repeatable-group",cmb.resetTitlesAndIterator).on("click",".cmbhandle, .cmbhandle + .cmbhandle-title",cmb.toggleHandle),$repeatGroup.length&&$repeatGroup.on("cmb2_add_row",cmb.emptyValue).on("cmb2_add_row",cmb.setDefaults).filter(".sortable").each(function(){$(this).find(".cmb-remove-group-row-button").before('<a class="button-secondary cmb-shift-rows move-up alignleft" href="#"><span class="'+l10n.up_arrow_class+'"></span></a> <a class="button-secondary cmb-shift-rows move-down alignleft" href="#"><span class="'+l10n.down_arrow_class+'"></span></a>')}).on("click",".cmb-shift-rows",cmb.shiftRows),setTimeout(cmb.resizeoEmbeds,500),$(window).on("resize",cmb.resizeoEmbeds),$id("addtag").length&&cmb.listenTagAdd(),$(document).on("cmb_init",cmb.mceEnsureSave),cmb.trigger("cmb_init")},cmb.mceEnsureSave=function(){wp.data&&wp.data.hasOwnProperty("subscribe")&&cmb.canTinyMCE()&&wp.data.subscribe(function(){var editor=wp.data.hasOwnProperty("select")?wp.data.select("core/editor"):null;if(editor&&editor.isSavingPost&&editor.isSavingPost()&&window.tinyMCE.editors.length)for(var i=0;i<window.tinyMCE.editors.length;i++)window.tinyMCE.activeEditor!==window.tinyMCE.editors[i]&&window.tinyMCE.editors[i].save()})},cmb.canTinyMCE=function(){return l10n.user_can_richedit&&window.tinyMCE},cmb.listenTagAdd=function(){$document.ajaxSuccess(function(evt,xhr,settings){settings.data&&settings.data.length&&-1!==settings.data.indexOf("action=add-tag")&&cmb.resetBoxes($id("addtag").find(".cmb2-wrap > .cmb2-metabox"))})},cmb.resetBoxes=function($boxes){$.each($boxes,function(){cmb.resetBox($(this))})},cmb.resetBox=function($box){$box.find(".wp-picker-clear").trigger("click"),$box.find(".cmb2-remove-file-button").trigger("click"),$box.find(".cmb-row.cmb-repeatable-grouping:not(:first-of-type) .cmb-remove-group-row").click(),$box.find(".cmb-repeat-row:not(:first-child)").remove(),$box.find('input:not([type="button"]),select,textarea').each(function(){var $element=$(this),tagName=$element.prop("tagName");if("INPUT"===tagName){var elType=$element.attr("type");"checkbox"===elType||"radio"===elType?$element.prop("checked",!1):$element.val("")}"SELECT"===tagName&&$("option:selected",this).prop("selected",!1),"TEXTAREA"===tagName&&$element.html("")})},cmb.resetTitlesAndIterator=function(evt){if(evt.group){var $table=$(evt.target),groupTitle=$table.find(".cmb-add-group-row").data("grouptitle");$table.find(".cmb-repeatable-grouping").each(function(rowindex){var $row=$(this),prevIterator=parseInt($row.data("iterator"),10);prevIterator!==rowindex&&($row.attr("data-iterator",rowindex).data("iterator",rowindex).attr("id",getRowId($row.attr("id"),rowindex)).find(cmb.repeatEls).each(function(){cmb.updateNameAttr($(this),prevIterator,rowindex)}),cmb.resetGroupTitles($row,rowindex,groupTitle))})}},cmb.resetGroupTitlesLine truncated
|
||||
@@ -0,0 +1,2 @@
|
||||
<?php
|
||||
// Silence is golden
|
||||
@@ -0,0 +1,5 @@
|
||||
/*! jQuery Timepicker Addon - v1.5.0 - 2014-09-01
|
||||
* http://trentrichardson.com/examples/timepicker
|
||||
* Copyright (c) 2014 Trent Richardson; Licensed MIT */
|
||||
(function($){if($.ui.timepicker=$.ui.timepicker||{},!$.ui.timepicker.version){$.extend($.ui,{timepicker:{version:"1.5.0"}});var Timepicker=function(){this.regional=[],this.regional[""]={currentText:"Now",closeText:"Done",amNames:["AM","A"],pmNames:["PM","P"],timeFormat:"HH:mm",timeSuffix:"",timeOnlyTitle:"Choose Time",timeText:"Time",hourText:"Hour",minuteText:"Minute",secondText:"Second",millisecText:"Millisecond",microsecText:"Microsecond",timezoneText:"Time Zone",isRTL:!1},this._defaults={showButtonPanel:!0,timeOnly:!1,timeOnlyShowDate:!1,showHour:null,showMinute:null,showSecond:null,showMillisec:null,showMicrosec:null,showTimezone:null,showTime:!0,stepHour:1,stepMinute:1,stepSecond:1,stepMillisec:1,stepMicrosec:1,hour:0,minute:0,second:0,millisec:0,microsec:0,timezone:null,hourMin:0,minuteMin:0,secondMin:0,millisecMin:0,microsecMin:0,hourMax:23,minuteMax:59,secondMax:59,millisecMax:999,microsecMax:999,minDateTime:null,maxDateTime:null,maxTime:null,minTime:null,onSelect:null,hourGrid:0,minuteGrid:0,secondGrid:0,millisecGrid:0,microsecGrid:0,alwaysSetTime:!0,separator:" ",altFieldTimeOnly:!0,altTimeFormat:null,altSeparator:null,altTimeSuffix:null,altRedirectFocus:!0,pickerTimeFormat:null,pickerTimeSuffix:null,showTimepicker:!0,timezoneList:null,addSliderAccess:!1,sliderAccessArgs:null,controlType:"slider",defaultValue:null,parse:"strict"},$.extend(this._defaults,this.regional[""])};$.extend(Timepicker.prototype,{$input:null,$altInput:null,$timeObj:null,inst:null,hour_slider:null,minute_slider:null,second_slider:null,millisec_slider:null,microsec_slider:null,timezone_select:null,maxTime:null,minTime:null,hour:0,minute:0,second:0,millisec:0,microsec:0,timezone:null,hourMinOriginal:null,minuteMinOriginal:null,secondMinOriginal:null,millisecMinOriginal:null,microsecMinOriginal:null,hourMaxOriginal:null,minuteMaxOriginal:null,secondMaxOriginal:null,millisecMaxOriginal:null,microsecMaxOriginal:null,ampm:"",formattedDate:"",formattedTime:"",formattedDateTime:"",timezoneList:null,units:["hour","minute","second","millisec","microsec"],support:{},control:null,setDefaults:function(e){return extendRemove(this._defaults,e||{}),this},_newInst:function($input,opts){var tp_inst=new Timepicker,inlineSettings={},fns={},overrides,i;for(var attrName in this._defaults)if(this._defaults.hasOwnProperty(attrName)){var attrValue=$input.attr("time:"+attrName);if(attrValue)try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}overrides={beforeShow:function(e,t){return $.isFunction(tp_inst._defaults.evnts.beforeShow)?tp_inst._defaults.evnts.beforeShow.call($input[0],e,t,tp_inst):void 0},onChangeMonthYear:function(e,t,i){tp_inst._updateDateTime(i),$.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)&&tp_inst._defaults.evnts.onChangeMonthYear.call($input[0],e,t,i,tp_inst)},onClose:function(e,t){tp_inst.timeDefined===!0&&""!==$input.val()&&tp_inst._updateDateTime(t),$.isFunction(tp_inst._defaults.evnts.onClose)&&tp_inst._defaults.evnts.onClose.call($input[0],e,t,tp_inst)}};for(i in overrides)overrides.hasOwnProperty(i)&&(fns[i]=opts[i]||null);tp_inst._defaults=$.extend({},this._defaults,inlineSettings,opts,overrides,{evnts:fns,timepicker:tp_inst}),tp_inst.amNames=$.map(tp_inst._defaults.amNames,function(e){return e.toUpperCase()}),tp_inst.pmNames=$.map(tp_inst._defaults.pmNames,function(e){return e.toUpperCase()}),tp_inst.support=detectSupport(tp_inst._defaults.timeFormat+(tp_inst._defaults.pickerTimeFormat?tp_inst._defaults.pickerTimeFormat:"")+(tp_inst._defaults.altTimeFormat?tp_inst._defaults.altTimeFormat:"")),"string"==typeof tp_inst._defaults.controlType?("slider"===tp_inst._defaults.controlType&&$.ui.slider===void 0&&(tp_inst._defaults.controlType="select"),tp_inst.control=tp_inst._controls[tp_inst._defaults.controlType]):tp_inst.control=tp_inst._defaults.controlType;var timezoneList=[-720,-660,-600,-570,-540,-480,-420,-360,-300,-270,-240,-210,-180,-120,-60,0,60,120,180,210,240,270,300,330,345,360,390,420,480,525,540,570,600,630,660,690,720,765,780,840];null!==tp_inst._defaults.timezoneList&&(timezoneList=tp_inst._defaults.timezoneList);var tzl=timezoneList.length,tzi=0,tzv=null;if(tzl>0&&"object"!=typeof timezoneList[0])for(;tzl>tzi;tzi++)tzv=timezoneList[tzi],timezoneList[tzi]={value:tzv,label:$.timepicker.timezoneOffsetString(tzv,tp_inst.support.iso8601)};return tp_inst._defaults.timezoneList=timezoneList,tp_inst.timezone=null!==tp_inst._defaults.timezone?$.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone):-1*(new Date).getTimezoneOffset(),tp_inst.hour=tp_inst._defaults.hour<tp_inst._defaults.hourMin?tp_inst._defaults.hourMin:tp_inst._defaults.hour>tp_inst._defaults.hourMax?tp_inst._defaults.hourMax:tp_inst._defaults.hour,tp_inst.minute=tp_inst._defaults.minute<tp_inst._defaults.minuteMin?tp_inst._defaults.minuteMin:tp_inst._defaults.minute>tp_inst._defaults.minuteMax?tp_inst._defaults.minuteMax:tp_inst._defaults.minute,tp_inst.second=tp_inst._defaults.second<tp_inst._defaulLine truncated
|
||||
i.hour=t?t.getHours():s.hour,i.minute=t?t.getMinutes():s.minute,i.second=t?t.getSeconds():s.second,i.millisec=t?t.getMilliseconds():s.millisec,i.microsec=t?t.getMicroseconds():s.microsec,i._limitMinMaxDateTime(e,!0),i._onTimeChange(),i._updateDateTime(e)}},$.datepicker._setTimeDatepicker=function(e,t,i){var s=this._getInst(e);if(s){var a=this._get(s,"timepicker");if(a){this._setDateFromField(s);var n;t&&("string"==typeof t?(a._parseTime(t,i),n=new Date,n.setHours(a.hour,a.minute,a.second,a.millisec),n.setMicroseconds(a.microsec)):(n=new Date(t.getTime()),n.setMicroseconds(t.getMicroseconds())),"Invalid Date"==""+n&&(n=void 0),this._setTime(s,n))}}},$.datepicker._base_setDateDatepicker=$.datepicker._setDateDatepicker,$.datepicker._setDateDatepicker=function(e,t){var i=this._getInst(e),s=t;if(i){"string"==typeof t&&(s=new Date(t),s.getTime()||(this._base_setDateDatepicker.apply(this,arguments),s=$(e).datepicker("getDate")));var a,n=this._get(i,"timepicker");s instanceof Date?(a=new Date(s.getTime()),a.setMicroseconds(s.getMicroseconds())):a=s,n&&a&&(n.support.timezone||null!==n._defaults.timezone||(n.timezone=-1*a.getTimezoneOffset()),s=$.timepicker.timezoneAdjust(s,n.timezone),a=$.timepicker.timezoneAdjust(a,n.timezone)),this._updateDatepicker(i),this._base_setDateDatepicker.apply(this,arguments),this._setTimeDatepicker(e,a,!0)}},$.datepicker._base_getDateDatepicker=$.datepicker._getDateDatepicker,$.datepicker._getDateDatepicker=function(e,t){var i=this._getInst(e);if(i){var s=this._get(i,"timepicker");if(s){void 0===i.lastVal&&this._setDateFromField(i,t);var a=this._getDate(i);return a&&s._parseTime($(e).val(),s.timeOnly)&&(a.setHours(s.hour,s.minute,s.second,s.millisec),a.setMicroseconds(s.microsec),null!=s.timezone&&(s.support.timezone||null!==s._defaults.timezone||(s.timezone=-1*a.getTimezoneOffset()),a=$.timepicker.timezoneAdjust(a,s.timezone))),a}return this._base_getDateDatepicker(e,t)}},$.datepicker._base_parseDate=$.datepicker.parseDate,$.datepicker.parseDate=function(e,t,i){var s;try{s=this._base_parseDate(e,t,i)}catch(a){if(!(a.indexOf(":")>=0))throw a;s=this._base_parseDate(e,t.substring(0,t.length-(a.length-a.indexOf(":")-2)),i),$.timepicker.log("Error parsing the date string: "+a+"\ndate string = "+t+"\ndate format = "+e)}return s},$.datepicker._base_formatDate=$.datepicker._formatDate,$.datepicker._formatDate=function(e){var t=this._get(e,"timepicker");return t?(t._updateDateTime(e),t.$input.val()):this._base_formatDate(e)},$.datepicker._base_optionDatepicker=$.datepicker._optionDatepicker,$.datepicker._optionDatepicker=function(e,t,i){var s,a=this._getInst(e);if(!a)return null;var n=this._get(a,"timepicker");if(n){var r,l,o,c,u=null,m=null,d=null,h=n._defaults.evnts,p={};if("string"==typeof t){if("minDate"===t||"minDateTime"===t)u=i;else if("maxDate"===t||"maxDateTime"===t)m=i;else if("onSelect"===t)d=i;else if(h.hasOwnProperty(t)){if(i===void 0)return h[t];p[t]=i,s={}}}else if("object"==typeof t){t.minDate?u=t.minDate:t.minDateTime?u=t.minDateTime:t.maxDate?m=t.maxDate:t.maxDateTime&&(m=t.maxDateTime);for(r in h)h.hasOwnProperty(r)&&t[r]&&(p[r]=t[r])}for(r in p)p.hasOwnProperty(r)&&(h[r]=p[r],s||(s=$.extend({},t)),delete s[r]);if(s&&isEmptyObject(s))return;if(u?(u=0===u?new Date:new Date(u),n._defaults.minDate=u,n._defaults.minDateTime=u):m?(m=0===m?new Date:new Date(m),n._defaults.maxDate=m,n._defaults.maxDateTime=m):d&&(n._defaults.onSelect=d),u||m)return c=$(e),o=c.datetimepicker("getDate"),l=this._base_optionDatepicker.call($.datepicker,e,s||t,i),c.datetimepicker("setDate",o),l}return void 0===i?this._base_optionDatepicker.call($.datepicker,e,t):this._base_optionDatepicker.call($.datepicker,e,s||t,i)};var isEmptyObject=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0},extendRemove=function(e,t){$.extend(e,t);for(var i in t)(null===t[i]||void 0===t[i])&&(e[i]=t[i]);return e},detectSupport=function(e){var t=e.replace(/'.*?'/g,"").toLowerCase(),i=function(e,t){return-1!==e.indexOf(t)?!0:!1};return{hour:i(t,"h"),minute:i(t,"m"),second:i(t,"s"),millisec:i(t,"l"),microsec:i(t,"c"),timezone:i(t,"z"),ampm:i(t,"t")&&i(e,"h"),iso8601:i(e,"Z")}},convert24to12=function(e){return e%=12,0===e&&(e=12),e+""},computeEffectiveSetting=function(e,t){return e&&e[t]?e[t]:$.timepicker._defaults[t]},splitDateTime=function(e,t){var i=computeEffectiveSetting(t,"separator"),s=computeEffectiveSetting(t,"timeFormat"),a=s.split(i),n=a.length,r=e.split(i),l=r.length;return l>1?{dateString:r.splice(0,l-n).join(i),timeString:r.splice(0,n).join(i)}:{dateString:e,timeString:""}},parseDateTimeInternal=function(e,t,i,s,a){var n,r,l;if(r=splitDateTime(i,a),n=$.datepicker._base_parseDate(e,r.dateString,s),""===r.timeString)return{date:n};if(l=$.datepicker.parseTime(t,r.timeString,a),!l)throw"Wrong time format";return{date:n,timeObj:l}},selectLocalTimezone=function(e,t){if(e&&e.timezone_select){var i=t||new Date;e.timezone_select.val(-i.getTimezoneOffset())}};$.timepicker=new Timepicker,$.timepicker.timezLine truncated
|
||||
@@ -0,0 +1,496 @@
|
||||
/**!
|
||||
* 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.3
|
||||
* https://github.com/kallookoo/wp-color-picker-alpha
|
||||
* Licensed under the GPLv2 license.
|
||||
*/
|
||||
( 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" />',
|
||||
// Prevent CSS issues in < WordPress 4.9
|
||||
_deprecated = ( wpColorPickerL10n.current !== undefined );
|
||||
// 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', wpColorPickerL10n.pick )
|
||||
.attr( 'data-current', wpColorPickerL10n.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( wpColorPickerL10n.defaultLabel );
|
||||
}
|
||||
|
||||
/*
|
||||
* 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( wpColorPickerL10n.pick );
|
||||
// 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( wpColorPickerL10n.defaultString );
|
||||
if ( ! _deprecated ) {
|
||||
self.button.attr( 'aria-label', wpColorPickerL10n.defaultAriaLabel );
|
||||
}
|
||||
} else {
|
||||
self.button.addClass( 'wp-picker-clear' ).val( wpColorPickerL10n.clear );
|
||||
if ( ! _deprecated ) {
|
||||
self.button.attr( 'aria-label', wpColorPickerL10n.clearAriaLabel );
|
||||
}
|
||||
}
|
||||
|
||||
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',
|
||||
'position' : 'absolute',
|
||||
'top' : 0,
|
||||
'bottom' : 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 );
|
||||
|
||||
} 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();
|
||||
} );
|
||||
}
|
||||
},
|
||||
_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();
|
||||
} );
|
||||
@@ -0,0 +1,11 @@
|
||||
/**!
|
||||
* 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.3
|
||||
* https://github.com/kallookoo/wp-color-picker-alpha
|
||||
* Licensed under the GPLv2 license.
|
||||
*/
|
||||
!function(a){if(!a.wp.wpColorPicker.prototype._hasAlpha){var b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==",c='<div class="wp-picker-holder" />',d='<div class="wp-picker-container" />',e='<input type="button" class="button button-small" />',f=void 0!==wpColorPickerL10n.current;if(f)var g='<a tabindex="0" class="wp-color-result" />';else var g='<button type="button" class="button wp-color-result" aria-expanded="false"><span class="wp-color-result-text"></span></button>',h="<label></label>",i='<span class="screen-reader-text"></span>';Color.fn.toString=function(){if(this._alpha<1)return this.toCSS("rgba",this._alpha).replace(/\s+/g,"");var a=parseInt(this._color,10).toString(16);return this.error?"":(a.length<6&&(a=("00000"+a).substr(-6)),"#"+a)},a.widget("wp.wpColorPicker",a.wp.wpColorPicker,{_hasAlpha:!0,_create:function(){if(a.support.iris){var j=this,k=j.element;if(a.extend(j.options,k.data()),"hue"===j.options.type)return j._createHueOnly();j.close=a.proxy(j.close,j),j.initialValue=k.val(),k.addClass("wp-color-picker"),f?(k.hide().wrap(d),j.wrap=k.parent(),j.toggler=a(g).insertBefore(k).css({backgroundColor:j.initialValue}).attr("title",wpColorPickerL10n.pick).attr("data-current",wpColorPickerL10n.current),j.pickerContainer=a(c).insertAfter(k),j.button=a(e).addClass("hidden")):(k.parent("label").length||(k.wrap(h),j.wrappingLabelText=a(i).insertBefore(k).text(wpColorPickerL10n.defaultLabel)),j.wrappingLabel=k.parent(),j.wrappingLabel.wrap(d),j.wrap=j.wrappingLabel.parent(),j.toggler=a(g).insertBefore(j.wrappingLabel).css({backgroundColor:j.initialValue}),j.toggler.find(".wp-color-result-text").text(wpColorPickerL10n.pick),j.pickerContainer=a(c).insertAfter(j.wrappingLabel),j.button=a(e)),j.options.defaultColor?(j.button.addClass("wp-picker-default").val(wpColorPickerL10n.defaultString),f||j.button.attr("aria-label",wpColorPickerL10n.defaultAriaLabel)):(j.button.addClass("wp-picker-clear").val(wpColorPickerL10n.clear),f||j.button.attr("aria-label",wpColorPickerL10n.clearAriaLabel)),f?k.wrap('<span class="wp-picker-input-wrap" />').after(j.button):(j.wrappingLabel.wrap('<span class="wp-picker-input-wrap hidden" />').after(j.button),j.inputWrapper=k.closest(".wp-picker-input-wrap")),k.iris({target:j.pickerContainer,hide:j.options.hide,width:j.options.width,mode:j.options.mode,palettes:j.options.palettes,change:function(c,d){j.options.alpha?(j.toggler.css({"background-image":"url("+b+")"}),f?j.toggler.html('<span class="color-alpha" />'):(j.toggler.css({position:"relative"}),0==j.toggler.find("span.color-alpha").length&&j.toggler.append('<span class="color-alpha" />')),j.toggler.find("span.color-alpha").css({width:"30px",position:"absolute",top:0,bottom:0,left:0,"border-top-left-radius":"2px","border-bottom-left-radius":"2px",background:d.color.toString()})):j.toggler.css({backgroundColor:d.color.toString()}),a.isFunction(j.options.change)&&j.options.change.call(this,c,d)}}),k.val(j.initialValue),j._addListeners(),j.options.hide||j.toggler.click()}},_addListeners:function(){var b=this;b.wrap.on("click.wpcolorpicker",function(a){a.stopPropagation()}),b.toggler.click(function(){b.toggler.hasClass("wp-picker-open")?b.close():b.open()}),b.element.on("change",function(c){(""===a(this).val()||b.element.hasClass("iris-error"))&&(b.options.alpha?(f&&b.toggler.removeAttr("style"),b.toggler.find("span.color-alpha").css("backgroundColor","")):b.toggler.css("backgroundColor",""),a.isFunction(b.options.clear)&&b.options.clear.call(this,c))}),b.button.on("click",function(c){a(this).hasClass("wp-picker-clear")?(b.element.val(""),b.options.alpha?(f&&b.toggler.removeAttr("style"),b.toggler.find("span.color-alpha").css("backgroundColor","")):b.toggler.css("backgroundColor",""),a.isFunction(b.options.clear)&&b.options.clear.call(this,c)):a(this).hasClass("wp-picker-default")&&b.element.val(b.options.defaultColor).change()})}}),a.widget("a8c.iris",a.a8c.iris,{_create:function(){if(this._super(),this.options.alpha=this.element.data("alpha")||!1,this.element.is(":input")||(this.options.alpha=!1),"undefined"!=typeof this.options.alpha&&this.options.alpha){var b=this,c=b.element,d='<div class="iris-strip iris-slider iris-alpha-slider"><div class="iris-slider-offset iris-slider-offset-alpha"></div></div>',e=a(d).appendTo(b.picker.find(".iris-picker-inner")),f=e.find(".iris-slider-offset-alpha"),g={aContainer:e,aSlider:f};"undefined"!=typeof c.data("custom-width")?b.options.customWidth=parseInt(c.data("custom-width"))||0:b.options.customWidth=100,b.options.defaultWidth=c.width(),(b._color._alpha<1||-1!=b._color.toString().indexOf("rgb"))&&c.width(parseInt(b.options.defaultWidth+b.options.customWidth)),a.each(g,function(a,c){b.controls[a]=c}),b.controls.square.css({"margin-rightLine truncated
|
||||
Reference in new issue
Block a user