Sync plugins from current page
Signed-off-by: Adrian Nöthlich <git@promasu.tech>
This commit is contained in:
@@ -0,0 +1,372 @@
|
||||
(function($, undefined){
|
||||
|
||||
/**
|
||||
* findFields
|
||||
*
|
||||
* Returns a jQuery selection object of acf fields.
|
||||
*
|
||||
* @date 14/12/17
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param object $args {
|
||||
* Optional. Arguments to find fields.
|
||||
*
|
||||
* @type string key The field's key (data-attribute).
|
||||
* @type string name The field's name (data-attribute).
|
||||
* @type string type The field's type (data-attribute).
|
||||
* @type string is jQuery selector to compare against.
|
||||
* @type jQuery parent jQuery element to search within.
|
||||
* @type jQuery sibling jQuery element to search alongside.
|
||||
* @type limit int The number of fields to find.
|
||||
* @type suppressFilters bool Whether to allow filters to add/remove results. Default behaviour will ignore clone fields.
|
||||
* }
|
||||
* @return jQuery
|
||||
*/
|
||||
|
||||
acf.findFields = function( args ){
|
||||
|
||||
// vars
|
||||
var selector = '.acf-field';
|
||||
var $fields = false;
|
||||
|
||||
// args
|
||||
args = acf.parseArgs(args, {
|
||||
key: '',
|
||||
name: '',
|
||||
type: '',
|
||||
is: '',
|
||||
parent: false,
|
||||
sibling: false,
|
||||
limit: false,
|
||||
visible: false,
|
||||
suppressFilters: false,
|
||||
});
|
||||
|
||||
// filter args
|
||||
if( !args.suppressFilters ) {
|
||||
args = acf.applyFilters('find_fields_args', args);
|
||||
}
|
||||
|
||||
// key
|
||||
if( args.key ) {
|
||||
selector += '[data-key="' + args.key + '"]';
|
||||
}
|
||||
|
||||
// type
|
||||
if( args.type ) {
|
||||
selector += '[data-type="' + args.type + '"]';
|
||||
}
|
||||
|
||||
// name
|
||||
if( args.name ) {
|
||||
selector += '[data-name="' + args.name + '"]';
|
||||
}
|
||||
|
||||
// is
|
||||
if( args.is ) {
|
||||
selector += args.is;
|
||||
}
|
||||
|
||||
// visibility
|
||||
if( args.visible ) {
|
||||
selector += ':visible';
|
||||
}
|
||||
|
||||
// query
|
||||
if( args.parent ) {
|
||||
$fields = args.parent.find( selector );
|
||||
} else if( args.sibling ) {
|
||||
$fields = args.sibling.siblings( selector );
|
||||
} else {
|
||||
$fields = $( selector );
|
||||
}
|
||||
|
||||
// filter
|
||||
if( !args.suppressFilters ) {
|
||||
$fields = $fields.not('.acf-clone .acf-field');
|
||||
$fields = acf.applyFilters('find_fields', $fields);
|
||||
}
|
||||
|
||||
// limit
|
||||
if( args.limit ) {
|
||||
$fields = $fields.slice( 0, args.limit );
|
||||
}
|
||||
|
||||
// return
|
||||
return $fields;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* findField
|
||||
*
|
||||
* Finds a specific field with jQuery
|
||||
*
|
||||
* @date 14/12/17
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param string key The field's key.
|
||||
* @param jQuery $parent jQuery element to search within.
|
||||
* @return jQuery
|
||||
*/
|
||||
|
||||
acf.findField = function( key, $parent ){
|
||||
return acf.findFields({
|
||||
key: key,
|
||||
limit: 1,
|
||||
parent: $parent,
|
||||
suppressFilters: true
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* getField
|
||||
*
|
||||
* Returns a field instance
|
||||
*
|
||||
* @date 14/12/17
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param jQuery|string $field jQuery element or field key.
|
||||
* @return object
|
||||
*/
|
||||
|
||||
acf.getField = function( $field ){
|
||||
|
||||
// allow jQuery
|
||||
if( $field instanceof jQuery ) {
|
||||
|
||||
// find fields
|
||||
} else {
|
||||
$field = acf.findField( $field );
|
||||
}
|
||||
|
||||
// instantiate
|
||||
var field = $field.data('acf');
|
||||
if( !field ) {
|
||||
field = acf.newField( $field );
|
||||
}
|
||||
|
||||
// return
|
||||
return field;
|
||||
};
|
||||
|
||||
/**
|
||||
* getFields
|
||||
*
|
||||
* Returns multiple field instances
|
||||
*
|
||||
* @date 14/12/17
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param jQuery|object $fields jQuery elements or query args.
|
||||
* @return array
|
||||
*/
|
||||
|
||||
acf.getFields = function( $fields ){
|
||||
|
||||
// allow jQuery
|
||||
if( $fields instanceof jQuery ) {
|
||||
|
||||
// find fields
|
||||
} else {
|
||||
$fields = acf.findFields( $fields );
|
||||
}
|
||||
|
||||
// loop
|
||||
var fields = [];
|
||||
$fields.each(function(){
|
||||
var field = acf.getField( $(this) );
|
||||
fields.push( field );
|
||||
});
|
||||
|
||||
// return
|
||||
return fields;
|
||||
};
|
||||
|
||||
/**
|
||||
* findClosestField
|
||||
*
|
||||
* Returns the closest jQuery field element
|
||||
*
|
||||
* @date 9/4/18
|
||||
* @since 5.6.9
|
||||
*
|
||||
* @param jQuery $el
|
||||
* @return jQuery
|
||||
*/
|
||||
|
||||
acf.findClosestField = function( $el ){
|
||||
return $el.closest('.acf-field');
|
||||
};
|
||||
|
||||
/**
|
||||
* getClosestField
|
||||
*
|
||||
* Returns the closest field instance
|
||||
*
|
||||
* @date 22/1/18
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param jQuery $el
|
||||
* @return object
|
||||
*/
|
||||
|
||||
acf.getClosestField = function( $el ){
|
||||
var $field = acf.findClosestField( $el );
|
||||
return this.getField( $field );
|
||||
};
|
||||
|
||||
/**
|
||||
* addGlobalFieldAction
|
||||
*
|
||||
* Sets up callback logic for global field actions
|
||||
*
|
||||
* @date 15/6/18
|
||||
* @since 5.6.9
|
||||
*
|
||||
* @param string action
|
||||
* @return void
|
||||
*/
|
||||
|
||||
var addGlobalFieldAction = function( action ){
|
||||
|
||||
// vars
|
||||
var globalAction = action;
|
||||
var pluralAction = action + '_fields'; // ready_fields
|
||||
var singleAction = action + '_field'; // ready_field
|
||||
|
||||
// global action
|
||||
var globalCallback = function( $el /*, arg1, arg2, etc*/ ){
|
||||
//console.log( action, arguments );
|
||||
|
||||
// get args [$el, ...]
|
||||
var args = acf.arrayArgs( arguments );
|
||||
var extraArgs = args.slice(1);
|
||||
|
||||
// find fields
|
||||
var fields = acf.getFields({ parent: $el });
|
||||
|
||||
// check
|
||||
if( fields.length ) {
|
||||
|
||||
// pluralAction
|
||||
var pluralArgs = [ pluralAction, fields ].concat( extraArgs );
|
||||
acf.doAction.apply(null, pluralArgs);
|
||||
}
|
||||
};
|
||||
|
||||
// plural action
|
||||
var pluralCallback = function( fields /*, arg1, arg2, etc*/ ){
|
||||
//console.log( pluralAction, arguments );
|
||||
|
||||
// get args [fields, ...]
|
||||
var args = acf.arrayArgs( arguments );
|
||||
var extraArgs = args.slice(1);
|
||||
|
||||
// loop
|
||||
fields.map(function( field, i ){
|
||||
//setTimeout(function(){
|
||||
// singleAction
|
||||
var singleArgs = [ singleAction, field ].concat( extraArgs );
|
||||
acf.doAction.apply(null, singleArgs);
|
||||
//}, i * 100);
|
||||
});
|
||||
};
|
||||
|
||||
// add actions
|
||||
acf.addAction(globalAction, globalCallback);
|
||||
acf.addAction(pluralAction, pluralCallback);
|
||||
|
||||
// also add single action
|
||||
addSingleFieldAction( action );
|
||||
}
|
||||
|
||||
/**
|
||||
* addSingleFieldAction
|
||||
*
|
||||
* Sets up callback logic for single field actions
|
||||
*
|
||||
* @date 15/6/18
|
||||
* @since 5.6.9
|
||||
*
|
||||
* @param string action
|
||||
* @return void
|
||||
*/
|
||||
|
||||
var addSingleFieldAction = function( action ){
|
||||
|
||||
// vars
|
||||
var singleAction = action + '_field'; // ready_field
|
||||
var singleEvent = action + 'Field'; // readyField
|
||||
|
||||
// single action
|
||||
var singleCallback = function( field /*, arg1, arg2, etc*/ ){
|
||||
//console.log( singleAction, arguments );
|
||||
|
||||
// get args [field, ...]
|
||||
var args = acf.arrayArgs( arguments );
|
||||
var extraArgs = args.slice(1);
|
||||
|
||||
// action variations (ready_field/type=image)
|
||||
var variations = ['type', 'name', 'key'];
|
||||
variations.map(function( variation ){
|
||||
|
||||
// vars
|
||||
var prefix = '/' + variation + '=' + field.get(variation);
|
||||
|
||||
// singleAction
|
||||
args = [ singleAction + prefix , field ].concat( extraArgs );
|
||||
acf.doAction.apply(null, args);
|
||||
});
|
||||
|
||||
// event
|
||||
if( singleFieldEvents.indexOf(action) > -1 ) {
|
||||
field.trigger(singleEvent, extraArgs);
|
||||
}
|
||||
};
|
||||
|
||||
// add actions
|
||||
acf.addAction(singleAction, singleCallback);
|
||||
}
|
||||
|
||||
// vars
|
||||
var globalFieldActions = [ 'prepare', 'ready', 'load', 'append', 'remove', 'unmount', 'remount', 'sortstart', 'sortstop', 'show', 'hide', 'unload' ];
|
||||
var singleFieldActions = [ 'valid', 'invalid', 'enable', 'disable', 'new' ];
|
||||
var singleFieldEvents = [ 'remove', 'unmount', 'remount', 'sortstart', 'sortstop', 'show', 'hide', 'unload', 'valid', 'invalid', 'enable', 'disable' ];
|
||||
|
||||
// add
|
||||
globalFieldActions.map( addGlobalFieldAction );
|
||||
singleFieldActions.map( addSingleFieldAction );
|
||||
|
||||
/**
|
||||
* fieldsEventManager
|
||||
*
|
||||
* Manages field actions and events
|
||||
*
|
||||
* @date 15/12/17
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param void
|
||||
* @param void
|
||||
*/
|
||||
|
||||
var fieldsEventManager = new acf.Model({
|
||||
id: 'fieldsEventManager',
|
||||
events: {
|
||||
'click .acf-field a[href="#"]': 'onClick',
|
||||
'change .acf-field': 'onChange'
|
||||
},
|
||||
onClick: function( e ){
|
||||
|
||||
// prevent default of any link with an href of #
|
||||
e.preventDefault();
|
||||
},
|
||||
onChange: function(){
|
||||
|
||||
// preview hack allows post to save with no title or content
|
||||
$('#_acf_changed').val(1);
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user