v5.9.9
Fixed - Fixed warning when deleting fields which don't exist - Fixed issues with older browsers and the blocks JavaScript - Fixed file size & file type validation for front end forms using the basic uploader -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE28mOhcNTKWG2VpmMopKj2zED8Z0FAmD5awIACgkQopKj2zED 8Z3Pzw/+JF45PF3ePcw2tIDmYzdv/zu9+RHLR3KyWAF2aqWDKnqLDfPxnvIYO2cH /UAWOKTNoKhVvYGz8YPK+9RcGGepdcYXtacF6JfNdiM/LV2ixVLny/iAI67vrvVp 7woWzvxOaVSYYwgFT6RHRj63uUX9syKR4L4IpG+qDWIDasotPKEbx3048y2JG1B7 RDaA3Zp0Z3AhrqVTJaBjaPbFRbj5dVkU2nG/zylPfSg/Jyauiy2iYXDCZ1ogSo1T UtaS3Hfmyn3+WDM0u0owN6Fa1XbbCIdw7v//sk6VMuHodZr/f1jFfRZVGW4fQr+f LiOjfn1HmuqwKNHn4VFrAHvUnoNVJrEYigqKHmkhDJZ9ZQ80vNXc927VjTMheFi+ UVHh/4mKJsLfosah3G1GhW4MZkVvITd5J97jmCl8HSJK1/m2ok+Bh9mDa1Fbvo71 IIpoY432Pk4523UdMPb+UAlA+HCY3JELnzOfGMqn9K8HaGHGc+S56JJmhram/cCI UgwwbTd0vSU41gHb9ZZpByidhFD5otC2yoQNjoSchdoKHVHIvUm00JUPfe0R6ptk SmiKLotkd6bMa8y7QI+1klpY+iff8B2jLAwMRfsB9wq78a5/22wljjZCCQBvrrPm TCH8is0YCNwby+B3SH9zvhyzC3worzcloYUzbpJvIA46qFPquQI= =nfqb -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE28mOhcNTKWG2VpmMopKj2zED8Z0FAmD5awQACgkQopKj2zED 8Z3XEhAA2WPYEOuPFm4z2Chz7h5YOWyuJQadFUvIKlkmA2Nw1LySdm6X+Ic7R/tl CVnh0KwpdCtloixYkgJaQtcwgGTr3OoepXrGH0mMnbjILKNbz/LfEX6dMuC6hbpR D75lL3q8j9rNlQw8yI/lB1PjPPD4c1skQqznhFDrYvpYMht41bDCIZVSbyEdBuh5 g1FYDOHb5ycQS0SogxqSpDchuKoukQhpMbW7uel3wKQTR3ORolM2ZZtyK+QhfKZ3 A+fotFBZ4cNtVAVGM7evPsHB2DoFo47TGAlx6DW7+bFzkTSXLFWA0W3EaZlYM4mi P84F996AqPA2OT5Cbt3fVACLMguz/EwX4KaO+tXw1cNA85tAOOPAAcz3up4r9QAs knuDAsFgVy/o3U56JkIcncpuy4ndHGjpArLenoekdERxh3D9c3eE+wF594VZrMYJ pLxs0TaVUMbKWwGiwRCejAq3h0/jjsTuX6dYRK/4KUDsy6k+dW5KGNvGNltp/hB1 +P8U86XJm8oZq8oxFVOmhWEye7U3J2zeYcZil81geALUtD5vM52oUykbMH7aM64S vHhlsaNdGuDQSpjqFFxLBTOEQy8iAfehqouPMfV3QM1uj255IvvlZRhpR5M47ISq RlCftw/LiZsLwvunmsHgT9/WVdUoj4iMtX7bhpWsTsNgJvd9IS0= =LP4E -----END PGP SIGNATURE----- Merge tag '5.9.9' into develop v5.9.9 Fixed - Fixed warning when deleting fields which don't exist - Fixed issues with older browsers and the blocks JavaScript - Fixed file size & file type validation for front end forms using the basic uploader
This commit is contained in:
commit
1ccd03d0c0
4
acf.php
4
acf.php
|
|
@ -3,7 +3,7 @@
|
||||||
Plugin Name: Advanced Custom Fields PRO
|
Plugin Name: Advanced Custom Fields PRO
|
||||||
Plugin URI: https://www.advancedcustomfields.com
|
Plugin URI: https://www.advancedcustomfields.com
|
||||||
Description: Customize WordPress with powerful, professional and intuitive fields.
|
Description: Customize WordPress with powerful, professional and intuitive fields.
|
||||||
Version: 5.9.8
|
Version: 5.9.9
|
||||||
Author: Delicious Brains
|
Author: Delicious Brains
|
||||||
Author URI: https://www.advancedcustomfields.com
|
Author URI: https://www.advancedcustomfields.com
|
||||||
Text Domain: acf
|
Text Domain: acf
|
||||||
|
|
@ -17,7 +17,7 @@ if( ! class_exists('ACF') ) :
|
||||||
class ACF {
|
class ACF {
|
||||||
|
|
||||||
/** @var string The plugin version number. */
|
/** @var string The plugin version number. */
|
||||||
var $version = '5.9.8';
|
var $version = '5.9.9';
|
||||||
|
|
||||||
/** @var array The plugin settings array. */
|
/** @var array The plugin settings array. */
|
||||||
var $settings = array();
|
var $settings = array();
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
|
@ -1,399 +1,480 @@
|
||||||
(function ($) {
|
(function($){
|
||||||
/*
|
|
||||||
* Repeater
|
/*
|
||||||
*
|
* Repeater
|
||||||
* This field type requires some extra logic for its settings
|
*
|
||||||
*
|
* This field type requires some extra logic for its settings
|
||||||
* @type function
|
*
|
||||||
* @date 24/10/13
|
* @type function
|
||||||
* @since 5.0.0
|
* @date 24/10/13
|
||||||
*
|
* @since 5.0.0
|
||||||
* @param n/a
|
*
|
||||||
* @return n/a
|
* @param n/a
|
||||||
*/
|
* @return n/a
|
||||||
var RepeaterCollapsedFieldSetting = acf.FieldSetting.extend({
|
*/
|
||||||
type: 'repeater',
|
|
||||||
name: 'collapsed',
|
var RepeaterCollapsedFieldSetting = acf.FieldSetting.extend({
|
||||||
events: {
|
type: 'repeater',
|
||||||
'focus select': 'onFocus'
|
name: 'collapsed',
|
||||||
},
|
events: {
|
||||||
onFocus: function (e, $el) {
|
'focus select': 'onFocus',
|
||||||
// vars
|
},
|
||||||
var $select = $el; // collapsed
|
onFocus: function( e, $el ){
|
||||||
|
|
||||||
var choices = []; // keep 'null' choice
|
// vars
|
||||||
|
var $select = $el;
|
||||||
choices.push({
|
|
||||||
label: $select.find('option[value=""]').text(),
|
// collapsed
|
||||||
value: ''
|
var choices = [];
|
||||||
}); // find sub fields
|
|
||||||
|
// keep 'null' choice
|
||||||
var $list = this.fieldObject.$('.acf-field-list:first');
|
choices.push({
|
||||||
var fields = acf.getFieldObjects({
|
label: $select.find('option[value=""]').text(),
|
||||||
list: $list
|
value: ''
|
||||||
}); // loop
|
});
|
||||||
|
|
||||||
fields.map(function (field) {
|
// find sub fields
|
||||||
choices.push({
|
var $list = this.fieldObject.$('.acf-field-list:first');
|
||||||
label: field.prop('label'),
|
var fields = acf.getFieldObjects({
|
||||||
value: field.prop('key')
|
list: $list
|
||||||
});
|
});
|
||||||
}); // render
|
|
||||||
|
// loop
|
||||||
acf.renderSelect($select, choices);
|
fields.map(function( field ){
|
||||||
}
|
choices.push({
|
||||||
});
|
label: field.prop('label'),
|
||||||
acf.registerFieldSetting(RepeaterCollapsedFieldSetting);
|
value: field.prop('key')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// render
|
||||||
|
acf.renderSelect( $select, choices );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
acf.registerFieldSetting( RepeaterCollapsedFieldSetting );
|
||||||
|
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
(function($){
|
||||||
(function ($) {
|
|
||||||
/**
|
/**
|
||||||
* CloneDisplayFieldSetting
|
* CloneDisplayFieldSetting
|
||||||
*
|
*
|
||||||
* Extra logic for this field setting
|
* Extra logic for this field setting
|
||||||
*
|
*
|
||||||
* @date 18/4/18
|
* @date 18/4/18
|
||||||
* @since 5.6.9
|
* @since 5.6.9
|
||||||
*
|
*
|
||||||
* @param void
|
* @param void
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
var FlexibleContentLayoutFieldSetting = acf.FieldSetting.extend({
|
|
||||||
type: 'flexible_content',
|
var FlexibleContentLayoutFieldSetting = acf.FieldSetting.extend({
|
||||||
name: 'fc_layout',
|
type: 'flexible_content',
|
||||||
events: {
|
name: 'fc_layout',
|
||||||
'blur .layout-label': 'onChangeLabel',
|
|
||||||
'click .add-layout': 'onClickAdd',
|
events: {
|
||||||
'click .duplicate-layout': 'onClickDuplicate',
|
'blur .layout-label': 'onChangeLabel',
|
||||||
'click .delete-layout': 'onClickDelete'
|
'click .add-layout': 'onClickAdd',
|
||||||
},
|
'click .duplicate-layout': 'onClickDuplicate',
|
||||||
$input: function (name) {
|
'click .delete-layout': 'onClickDelete'
|
||||||
return $('#' + this.getInputId() + '-' + name);
|
},
|
||||||
},
|
|
||||||
$list: function () {
|
$input: function( name ){
|
||||||
return this.$('.acf-field-list:first');
|
return $('#' + this.getInputId() + '-' + name);
|
||||||
},
|
},
|
||||||
getInputId: function () {
|
|
||||||
return this.fieldObject.getInputId() + '-layouts-' + this.field.get('id');
|
$list: function(){
|
||||||
},
|
return this.$('.acf-field-list:first');
|
||||||
// get all sub fields
|
},
|
||||||
getFields: function () {
|
|
||||||
return acf.getFieldObjects({
|
getInputId: function(){
|
||||||
parent: this.$el
|
return this.fieldObject.getInputId() + '-layouts-' + this.field.get('id');
|
||||||
});
|
},
|
||||||
},
|
|
||||||
// get imediate children
|
// get all sub fields
|
||||||
getChildren: function () {
|
getFields: function(){
|
||||||
return acf.getFieldObjects({
|
return acf.getFieldObjects({ parent: this.$el });
|
||||||
list: this.$list()
|
},
|
||||||
});
|
|
||||||
},
|
// get imediate children
|
||||||
initialize: function () {
|
getChildren: function(){
|
||||||
// add sortable
|
return acf.getFieldObjects({ list: this.$list() });
|
||||||
var $tbody = this.$el.parent();
|
},
|
||||||
|
|
||||||
if (!$tbody.hasClass('ui-sortable')) {
|
initialize: function(){
|
||||||
$tbody.sortable({
|
|
||||||
items: '> .acf-field-setting-fc_layout',
|
// add sortable
|
||||||
handle: '.reorder-layout',
|
var $tbody = this.$el.parent();
|
||||||
forceHelperSize: true,
|
if( !$tbody.hasClass('ui-sortable') ) {
|
||||||
forcePlaceholderSize: true,
|
|
||||||
scroll: true,
|
$tbody.sortable({
|
||||||
stop: this.proxy(function (event, ui) {
|
items: '> .acf-field-setting-fc_layout',
|
||||||
this.fieldObject.save();
|
handle: '.reorder-layout',
|
||||||
})
|
forceHelperSize: true,
|
||||||
});
|
forcePlaceholderSize: true,
|
||||||
} // add meta to sub fields
|
scroll: true,
|
||||||
|
stop: this.proxy(function(event, ui) {
|
||||||
|
this.fieldObject.save();
|
||||||
this.updateFieldLayouts();
|
})
|
||||||
},
|
});
|
||||||
updateFieldLayouts: function () {
|
}
|
||||||
this.getChildren().map(this.updateFieldLayout, this);
|
|
||||||
},
|
// add meta to sub fields
|
||||||
updateFieldLayout: function (field) {
|
this.updateFieldLayouts();
|
||||||
field.prop('parent_layout', this.get('id'));
|
},
|
||||||
},
|
|
||||||
onChangeLabel: function (e, $el) {
|
updateFieldLayouts: function(){
|
||||||
// vars
|
this.getChildren().map(this.updateFieldLayout, this);
|
||||||
var label = $el.val();
|
},
|
||||||
var $name = this.$input('name'); // render name
|
|
||||||
|
updateFieldLayout: function( field ){
|
||||||
if ($name.val() == '') {
|
field.prop('parent_layout', this.get('id'));
|
||||||
acf.val($name, acf.strSanitize(label));
|
},
|
||||||
}
|
|
||||||
},
|
onChangeLabel: function( e, $el ){
|
||||||
onClickAdd: function (e, $el) {
|
|
||||||
// vars
|
// vars
|
||||||
var prevKey = this.get('id');
|
var label = $el.val();
|
||||||
var newKey = acf.uniqid('layout_'); // duplicate
|
var $name = this.$input('name');
|
||||||
|
|
||||||
$layout = acf.duplicate({
|
// render name
|
||||||
$el: this.$el,
|
if( $name.val() == '' ) {
|
||||||
search: prevKey,
|
acf.val($name, acf.strSanitize(label));
|
||||||
replace: newKey,
|
}
|
||||||
after: function ($el, $el2) {
|
},
|
||||||
// vars
|
|
||||||
var $list = $el2.find('.acf-field-list:first'); // remove sub fields
|
onClickAdd: function( e, $el ){
|
||||||
|
|
||||||
$list.children('.acf-field-object').remove(); // show empty
|
// vars
|
||||||
|
var prevKey = this.get('id');
|
||||||
$list.addClass('-empty'); // reset layout meta values
|
var newKey = acf.uniqid('layout_');
|
||||||
|
|
||||||
$el2.find('.acf-fc-meta input').val('');
|
// duplicate
|
||||||
}
|
$layout = acf.duplicate({
|
||||||
}); // get layout
|
$el: this.$el,
|
||||||
|
search: prevKey,
|
||||||
var layout = acf.getFieldSetting($layout); // update hidden input
|
replace: newKey,
|
||||||
|
after: function( $el, $el2 ){
|
||||||
layout.$input('key').val(newKey); // save
|
|
||||||
|
// vars
|
||||||
this.fieldObject.save();
|
var $list = $el2.find('.acf-field-list:first');
|
||||||
},
|
|
||||||
onClickDuplicate: function (e, $el) {
|
// remove sub fields
|
||||||
// vars
|
$list.children('.acf-field-object').remove();
|
||||||
var prevKey = this.get('id');
|
|
||||||
var newKey = acf.uniqid('layout_'); // duplicate
|
// show empty
|
||||||
|
$list.addClass('-empty');
|
||||||
$layout = acf.duplicate({
|
|
||||||
$el: this.$el,
|
// reset layout meta values
|
||||||
search: prevKey,
|
$el2.find('.acf-fc-meta input').val('');
|
||||||
replace: newKey
|
}
|
||||||
}); // get all fields in new layout similar to fieldManager.onDuplicateField().
|
});
|
||||||
// important to run field.wipe() before making any changes to the "parent_layout" prop
|
|
||||||
// to ensure the correct input is modified.
|
// get layout
|
||||||
|
var layout = acf.getFieldSetting( $layout );
|
||||||
var children = acf.getFieldObjects({
|
|
||||||
parent: $layout
|
// update hidden input
|
||||||
});
|
layout.$input('key').val( newKey );
|
||||||
|
|
||||||
if (children.length) {
|
// save
|
||||||
// loop
|
this.fieldObject.save();
|
||||||
children.map(function (child) {
|
},
|
||||||
// wipe field
|
|
||||||
child.wipe(); // update parent
|
onClickDuplicate: function( e, $el ){
|
||||||
|
|
||||||
child.updateParent();
|
// vars
|
||||||
}); // action
|
var prevKey = this.get('id');
|
||||||
|
var newKey = acf.uniqid('layout_');
|
||||||
acf.doAction('duplicate_field_objects', children, this.fieldObject, this.fieldObject);
|
|
||||||
} // get layout
|
// duplicate
|
||||||
|
$layout = acf.duplicate({
|
||||||
|
$el: this.$el,
|
||||||
var layout = acf.getFieldSetting($layout); // update hidden input
|
search: prevKey,
|
||||||
|
replace: newKey
|
||||||
layout.$input('key').val(newKey); // save
|
});
|
||||||
|
|
||||||
this.fieldObject.save();
|
// get all fields in new layout similar to fieldManager.onDuplicateField().
|
||||||
},
|
// important to run field.wipe() before making any changes to the "parent_layout" prop
|
||||||
onClickDelete: function (e, $el) {
|
// to ensure the correct input is modified.
|
||||||
// Bypass confirmation when holding down "shift" key.
|
var children = acf.getFieldObjects({ parent: $layout });
|
||||||
if (e.shiftKey) {
|
if( children.length ) {
|
||||||
return this.delete();
|
|
||||||
} // add class
|
// loop
|
||||||
|
children.map(function( child ){
|
||||||
|
|
||||||
this.$el.addClass('-hover'); // add tooltip
|
// wipe field
|
||||||
|
child.wipe();
|
||||||
var tooltip = acf.newTooltip({
|
|
||||||
confirmRemove: true,
|
// update parent
|
||||||
target: $el,
|
child.updateParent();
|
||||||
context: this,
|
});
|
||||||
confirm: function () {
|
|
||||||
this.delete();
|
// action
|
||||||
},
|
acf.doAction('duplicate_field_objects', children, this.fieldObject, this.fieldObject);
|
||||||
cancel: function () {
|
}
|
||||||
this.$el.removeClass('-hover');
|
|
||||||
}
|
// get layout
|
||||||
});
|
var layout = acf.getFieldSetting( $layout );
|
||||||
},
|
|
||||||
delete: function () {
|
// update hidden input
|
||||||
// vars
|
layout.$input('key').val( newKey );
|
||||||
var $siblings = this.$el.siblings('.acf-field-setting-fc_layout'); // validate
|
|
||||||
|
// save
|
||||||
if (!$siblings.length) {
|
this.fieldObject.save();
|
||||||
alert(acf.__('Flexible Content requires at least 1 layout'));
|
},
|
||||||
return false;
|
|
||||||
} // delete sub fields
|
onClickDelete: function( e, $el ){
|
||||||
|
|
||||||
|
// Bypass confirmation when holding down "shift" key.
|
||||||
this.getFields().map(function (child) {
|
if( e.shiftKey ) {
|
||||||
child.delete({
|
return this.delete();
|
||||||
animate: false
|
}
|
||||||
});
|
|
||||||
}); // remove tr
|
// add class
|
||||||
|
this.$el.addClass('-hover');
|
||||||
acf.remove(this.$el); // save
|
|
||||||
|
// add tooltip
|
||||||
this.fieldObject.save();
|
var tooltip = acf.newTooltip({
|
||||||
}
|
confirmRemove: true,
|
||||||
});
|
target: $el,
|
||||||
acf.registerFieldSetting(FlexibleContentLayoutFieldSetting);
|
context: this,
|
||||||
/**
|
confirm: function(){
|
||||||
* flexibleContentHelper
|
this.delete();
|
||||||
*
|
},
|
||||||
* description
|
cancel: function(){
|
||||||
*
|
this.$el.removeClass('-hover');
|
||||||
* @date 19/4/18
|
}
|
||||||
* @since 5.6.9
|
});
|
||||||
*
|
},
|
||||||
* @param type $var Description. Default.
|
|
||||||
* @return type Description.
|
delete: function(){
|
||||||
*/
|
|
||||||
|
// vars
|
||||||
var flexibleContentHelper = new acf.Model({
|
var $siblings = this.$el.siblings('.acf-field-setting-fc_layout');
|
||||||
actions: {
|
|
||||||
'sortstop_field_object': 'updateParentLayout',
|
// validate
|
||||||
'change_field_object_parent': 'updateParentLayout'
|
if( !$siblings.length ) {
|
||||||
},
|
alert( acf.__('Flexible Content requires at least 1 layout') );
|
||||||
updateParentLayout: function (fieldObject) {
|
return false;
|
||||||
// vars
|
}
|
||||||
var parent = fieldObject.getParent(); // delete meta
|
|
||||||
|
// delete sub fields
|
||||||
if (!parent || parent.prop('type') !== 'flexible_content') {
|
this.getFields().map(function( child ){
|
||||||
fieldObject.prop('parent_layout', null);
|
child.delete({
|
||||||
return;
|
animate: false
|
||||||
} // get layout
|
});
|
||||||
|
});
|
||||||
|
|
||||||
var $layout = fieldObject.$el.closest('.acf-field-setting-fc_layout');
|
// remove tr
|
||||||
var layout = acf.getFieldSetting($layout); // check if previous prop exists
|
acf.remove( this.$el );
|
||||||
// - if not, set prop to allow following code to trigger 'change' and save the field
|
|
||||||
|
// save
|
||||||
if (!fieldObject.has('parent_layout')) {
|
this.fieldObject.save();
|
||||||
fieldObject.prop('parent_layout', 0);
|
}
|
||||||
} // update meta
|
|
||||||
|
});
|
||||||
|
|
||||||
fieldObject.prop('parent_layout', layout.get('id'));
|
acf.registerFieldSetting( FlexibleContentLayoutFieldSetting );
|
||||||
}
|
|
||||||
});
|
|
||||||
|
/**
|
||||||
|
* flexibleContentHelper
|
||||||
|
*
|
||||||
|
* description
|
||||||
|
*
|
||||||
|
* @date 19/4/18
|
||||||
|
* @since 5.6.9
|
||||||
|
*
|
||||||
|
* @param type $var Description. Default.
|
||||||
|
* @return type Description.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var flexibleContentHelper = new acf.Model({
|
||||||
|
actions: {
|
||||||
|
'sortstop_field_object': 'updateParentLayout',
|
||||||
|
'change_field_object_parent': 'updateParentLayout'
|
||||||
|
},
|
||||||
|
|
||||||
|
updateParentLayout: function( fieldObject ){
|
||||||
|
|
||||||
|
// vars
|
||||||
|
var parent = fieldObject.getParent();
|
||||||
|
|
||||||
|
// delete meta
|
||||||
|
if( !parent || parent.prop('type') !== 'flexible_content' ) {
|
||||||
|
fieldObject.prop('parent_layout', null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get layout
|
||||||
|
var $layout = fieldObject.$el.closest('.acf-field-setting-fc_layout');
|
||||||
|
var layout = acf.getFieldSetting($layout);
|
||||||
|
|
||||||
|
// check if previous prop exists
|
||||||
|
// - if not, set prop to allow following code to trigger 'change' and save the field
|
||||||
|
if( !fieldObject.has('parent_layout') ) {
|
||||||
|
fieldObject.prop('parent_layout', 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// update meta
|
||||||
|
fieldObject.prop('parent_layout', layout.get('id'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
(function($){
|
||||||
(function ($) {
|
|
||||||
/**
|
/**
|
||||||
* CloneDisplayFieldSetting
|
* CloneDisplayFieldSetting
|
||||||
*
|
*
|
||||||
* Extra logic for this field setting
|
* Extra logic for this field setting
|
||||||
*
|
*
|
||||||
* @date 18/4/18
|
* @date 18/4/18
|
||||||
* @since 5.6.9
|
* @since 5.6.9
|
||||||
*
|
*
|
||||||
* @param void
|
* @param void
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
var CloneDisplayFieldSetting = acf.FieldSetting.extend({
|
|
||||||
type: 'clone',
|
var CloneDisplayFieldSetting = acf.FieldSetting.extend({
|
||||||
name: 'display',
|
type: 'clone',
|
||||||
render: function () {
|
name: 'display',
|
||||||
// vars
|
render: function(){
|
||||||
var display = this.field.val(); // set data attribute used by CSS to hide/show
|
|
||||||
|
// vars
|
||||||
this.$fieldObject.attr('data-display', display);
|
var display = this.field.val();
|
||||||
}
|
|
||||||
});
|
// set data attribute used by CSS to hide/show
|
||||||
acf.registerFieldSetting(CloneDisplayFieldSetting);
|
this.$fieldObject.attr('data-display', display);
|
||||||
/**
|
}
|
||||||
* ClonePrefixLabelFieldSetting
|
});
|
||||||
*
|
|
||||||
* Extra logic for this field setting
|
acf.registerFieldSetting( CloneDisplayFieldSetting );
|
||||||
*
|
|
||||||
* @date 18/4/18
|
|
||||||
* @since 5.6.9
|
/**
|
||||||
*
|
* ClonePrefixLabelFieldSetting
|
||||||
* @param void
|
*
|
||||||
* @return void
|
* Extra logic for this field setting
|
||||||
*/
|
*
|
||||||
|
* @date 18/4/18
|
||||||
var ClonePrefixLabelFieldSetting = acf.FieldSetting.extend({
|
* @since 5.6.9
|
||||||
type: 'clone',
|
*
|
||||||
name: 'prefix_label',
|
* @param void
|
||||||
render: function () {
|
* @return void
|
||||||
// vars
|
*/
|
||||||
var prefix = ''; // if checked
|
|
||||||
|
var ClonePrefixLabelFieldSetting = acf.FieldSetting.extend({
|
||||||
if (this.field.val()) {
|
type: 'clone',
|
||||||
prefix = this.fieldObject.prop('label') + ' ';
|
name: 'prefix_label',
|
||||||
} // update HTML
|
render: function(){
|
||||||
|
|
||||||
|
// vars
|
||||||
this.$('code').html(prefix + '%field_label%');
|
var prefix = '';
|
||||||
}
|
|
||||||
});
|
// if checked
|
||||||
acf.registerFieldSetting(ClonePrefixLabelFieldSetting);
|
if( this.field.val() ) {
|
||||||
/**
|
prefix = this.fieldObject.prop('label') + ' ';
|
||||||
* ClonePrefixNameFieldSetting
|
}
|
||||||
*
|
|
||||||
* Extra logic for this field setting
|
// update HTML
|
||||||
*
|
this.$('code').html( prefix + '%field_label%' );
|
||||||
* @date 18/4/18
|
}
|
||||||
* @since 5.6.9
|
});
|
||||||
*
|
|
||||||
* @param void
|
acf.registerFieldSetting( ClonePrefixLabelFieldSetting );
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
|
/**
|
||||||
var ClonePrefixNameFieldSetting = acf.FieldSetting.extend({
|
* ClonePrefixNameFieldSetting
|
||||||
type: 'clone',
|
*
|
||||||
name: 'prefix_name',
|
* Extra logic for this field setting
|
||||||
render: function () {
|
*
|
||||||
// vars
|
* @date 18/4/18
|
||||||
var prefix = ''; // if checked
|
* @since 5.6.9
|
||||||
|
*
|
||||||
if (this.field.val()) {
|
* @param void
|
||||||
prefix = this.fieldObject.prop('name') + '_';
|
* @return void
|
||||||
} // update HTML
|
*/
|
||||||
|
|
||||||
|
var ClonePrefixNameFieldSetting = acf.FieldSetting.extend({
|
||||||
this.$('code').html(prefix + '%field_name%');
|
type: 'clone',
|
||||||
}
|
name: 'prefix_name',
|
||||||
});
|
render: function(){
|
||||||
acf.registerFieldSetting(ClonePrefixNameFieldSetting);
|
|
||||||
/**
|
// vars
|
||||||
* cloneFieldSelectHelper
|
var prefix = '';
|
||||||
*
|
|
||||||
* Customizes the clone field setting Select2 isntance
|
// if checked
|
||||||
*
|
if( this.field.val() ) {
|
||||||
* @date 18/4/18
|
prefix = this.fieldObject.prop('name') + '_';
|
||||||
* @since 5.6.9
|
}
|
||||||
*
|
|
||||||
* @param void
|
// update HTML
|
||||||
* @return void
|
this.$('code').html( prefix + '%field_name%' );
|
||||||
*/
|
}
|
||||||
|
});
|
||||||
var cloneFieldSelectHelper = new acf.Model({
|
|
||||||
filters: {
|
acf.registerFieldSetting( ClonePrefixNameFieldSetting );
|
||||||
'select2_args': 'select2Args'
|
|
||||||
},
|
|
||||||
select2Args: function (options, $select, data, $el, instance) {
|
/**
|
||||||
// check
|
* cloneFieldSelectHelper
|
||||||
if (data.ajaxAction == 'acf/fields/clone/query') {
|
*
|
||||||
// remain open on select
|
* Customizes the clone field setting Select2 isntance
|
||||||
options.closeOnSelect = false; // customize ajaxData function
|
*
|
||||||
|
* @date 18/4/18
|
||||||
instance.data.ajaxData = this.ajaxData;
|
* @since 5.6.9
|
||||||
} // return
|
*
|
||||||
|
* @param void
|
||||||
|
* @return void
|
||||||
return options;
|
*/
|
||||||
},
|
|
||||||
ajaxData: function (data) {
|
var cloneFieldSelectHelper = new acf.Model({
|
||||||
// find current fields
|
filters: {
|
||||||
data.fields = {}; // loop
|
'select2_args': 'select2Args'
|
||||||
|
},
|
||||||
acf.getFieldObjects().map(function (fieldObject) {
|
|
||||||
// append
|
select2Args: function( options, $select, data, $el, instance ){
|
||||||
data.fields[fieldObject.prop('key')] = {
|
|
||||||
key: fieldObject.prop('key'),
|
// check
|
||||||
type: fieldObject.prop('type'),
|
if( data.ajaxAction == 'acf/fields/clone/query' ) {
|
||||||
label: fieldObject.prop('label'),
|
|
||||||
ancestors: fieldObject.getParents().length
|
// remain open on select
|
||||||
};
|
options.closeOnSelect = false;
|
||||||
}); // append title
|
|
||||||
|
// customize ajaxData function
|
||||||
data.title = $('#title').val(); // return
|
instance.data.ajaxData = this.ajaxData;
|
||||||
|
}
|
||||||
return data;
|
|
||||||
}
|
// return
|
||||||
});
|
return options;
|
||||||
|
},
|
||||||
|
|
||||||
|
ajaxData: function( data ){
|
||||||
|
|
||||||
|
// find current fields
|
||||||
|
data.fields = {};
|
||||||
|
|
||||||
|
// loop
|
||||||
|
acf.getFieldObjects().map(function(fieldObject){
|
||||||
|
|
||||||
|
// append
|
||||||
|
data.fields[ fieldObject.prop('key') ] = {
|
||||||
|
key: fieldObject.prop('key'),
|
||||||
|
type: fieldObject.prop('type'),
|
||||||
|
label: fieldObject.prop('label'),
|
||||||
|
ancestors: fieldObject.getParents().length
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
// append title
|
||||||
|
data.title = $('#title').val();
|
||||||
|
|
||||||
|
// return
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 525 B After Width: | Height: | Size: 525 B |
|
Before Width: | Height: | Size: 653 B After Width: | Height: | Size: 653 B |
|
|
@ -80,7 +80,7 @@ if( $tabs === false ) {
|
||||||
} ?>
|
} ?>
|
||||||
|
|
||||||
<?php if ( ! defined( 'ACF_PRO' ) || ! ACF_PRO ) : ?>
|
<?php if ( ! defined( 'ACF_PRO' ) || ! ACF_PRO ) : ?>
|
||||||
<a href="https://www.advancedcustomfields.com/pro/?utm_source=ACF%2BFree&utm_medium=insideplugin&utm_campaign=ACF%2Bupgrade" class="btn-upgrade">
|
<a target="_blank" href="https://www.advancedcustomfields.com/pro/?utm_source=ACF%2BFree&utm_medium=insideplugin&utm_campaign=ACF%2Bupgrade" class="btn-upgrade">
|
||||||
<img src="<?php echo acf_get_url('assets/images/icon-upgrade-pro.svg' ); ?>" />
|
<img src="<?php echo acf_get_url('assets/images/icon-upgrade-pro.svg' ); ?>" />
|
||||||
<p><?php _e('Upgrade to Pro', 'acf'); ?></p>
|
<p><?php _e('Upgrade to Pro', 'acf'); ?></p>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
||||||
|
|
@ -3478,7 +3478,8 @@ function acf_validate_attachment( $attachment, $field, $context = 'prepare' ) {
|
||||||
// prepare
|
// prepare
|
||||||
} elseif( $context == 'prepare' ) {
|
} elseif( $context == 'prepare' ) {
|
||||||
|
|
||||||
$file['type'] = pathinfo($attachment['filename'], PATHINFO_EXTENSION);
|
$use_path = isset($attachment['filename']) ? $attachment['filename'] : $attachment['url'];
|
||||||
|
$file['type'] = pathinfo($use_path, PATHINFO_EXTENSION);
|
||||||
$file['size'] = acf_maybe_get($attachment, 'filesizeInBytes', 0);
|
$file['size'] = acf_maybe_get($attachment, 'filesizeInBytes', 0);
|
||||||
$file['width'] = acf_maybe_get($attachment, 'width', 0);
|
$file['width'] = acf_maybe_get($attachment, 'width', 0);
|
||||||
$file['height'] = acf_maybe_get($attachment, 'height', 0);
|
$file['height'] = acf_maybe_get($attachment, 'height', 0);
|
||||||
|
|
@ -3487,7 +3488,8 @@ function acf_validate_attachment( $attachment, $field, $context = 'prepare' ) {
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$file = array_merge($file, $attachment);
|
$file = array_merge($file, $attachment);
|
||||||
$file['type'] = pathinfo($attachment['filename'], PATHINFO_EXTENSION);
|
$use_path = isset($attachment['filename']) ? $attachment['filename'] : $attachment['url'];
|
||||||
|
$file['type'] = pathinfo($use_path, PATHINFO_EXTENSION);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1041,7 +1041,7 @@ function delete_field( $selector, $post_id = false ) {
|
||||||
|
|
||||||
|
|
||||||
// delete
|
// delete
|
||||||
return acf_delete_value( $post_id, $field );
|
return $field ? acf_delete_value( $post_id, $field ) : false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ $readonly = $active ? 1 : 0;
|
||||||
<h3><?php _e('License Information', 'acf'); ?></h3>
|
<h3><?php _e('License Information', 'acf'); ?></h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<p><?php printf(__('To unlock updates, please enter your license key below. If you don\'t have a licence key, please see <a href="%s" target="_blank">details & pricing</a>.','acf'), esc_url('https://www.advancedcustomfields.com/pro')); ?></p>
|
<p><?php printf(__('To unlock updates, please enter your license key below. If you don\'t have a licence key, please see <a href="%s" target="_blank">details & pricing</a>.','acf'), esc_url('https://www.advancedcustomfields.com/pro/?utm_source=ACF%2Bpro%2Bplugin&utm_medium=insideplugin&utm_campaign=ACF%2Bupgrade&utm_content=license%2Bactivations')); ?></p>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<?php acf_nonce_input( $nonce ); ?>
|
<?php acf_nonce_input( $nonce ); ?>
|
||||||
<table class="form-table">
|
<table class="form-table">
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ class acf_pro_updates {
|
||||||
|
|
||||||
|
|
||||||
// display message
|
// display message
|
||||||
echo '<br />' . sprintf( __('To enable updates, please enter your license key on the <a href="%s">Updates</a> page. If you don\'t have a licence key, please see <a href="%s">details & pricing</a>.', 'acf'), admin_url('edit.php?post_type=acf-field-group&page=acf-settings-updates'), 'https://www.advancedcustomfields.com/pro' );
|
echo '<br />' . sprintf( __('To enable updates, please enter your license key on the <a href="%s">Updates</a> page. If you don\'t have a licence key, please see <a href="%s" target="_blank">details & pricing</a>.', 'acf'), admin_url('edit.php?post_type=acf-field-group&page=acf-settings-updates'), 'https://www.advancedcustomfields.com/pro/?utm_source=ACF%2Bpro%2Bplugin&utm_medium=insideplugin&utm_campaign=ACF%2Bupgrade&utm_content=updates' );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
10
readme.txt
10
readme.txt
|
|
@ -2,8 +2,9 @@
|
||||||
Contributors: elliotcondon
|
Contributors: elliotcondon
|
||||||
Tags: acf, fields, custom fields, meta, repeater
|
Tags: acf, fields, custom fields, meta, repeater
|
||||||
Requires at least: 4.7
|
Requires at least: 4.7
|
||||||
Tested up to: 5.7
|
Tested up to: 5.8
|
||||||
Requires PHP: 5.6
|
Requires PHP: 5.6
|
||||||
|
Stable tag: 5.9.9
|
||||||
License: GPLv2 or later
|
License: GPLv2 or later
|
||||||
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
|
|
@ -65,6 +66,13 @@ From your WordPress dashboard
|
||||||
|
|
||||||
== Changelog ==
|
== Changelog ==
|
||||||
|
|
||||||
|
= 5.9.9 =
|
||||||
|
*Release Date - 20 July 2021*
|
||||||
|
|
||||||
|
* Fix - Fixed warning when deleting fields which don't exist
|
||||||
|
* Fix - Fixed issues with older browsers and the blocks JavaScript
|
||||||
|
* Fix - Fixed file size & file type validation for front end forms using the basic uploader
|
||||||
|
|
||||||
= 5.9.8 =
|
= 5.9.8 =
|
||||||
*Release Date - 08 July 2021*
|
*Release Date - 08 July 2021*
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue