web/wp-content/plugins/acf-extended/assets/js/acfe-field-group.js (215 lines of code) (raw):

(function($) { if (typeof acf === 'undefined' || typeof acfe === 'undefined') { return; } /** * Field: Code Editor */ new acf.Model({ actions: { 'append_field_object': 'appendCodeEditor' }, // Fix duplicate Code Editor appendCodeEditor: function(field) { if (field.get('type') !== 'acfe_code_editor') { return; } var $defaultValue = field.$setting('default_value').find('> .acf-input > .acf-input-wrap > .CodeMirror'); if ($defaultValue.length > 1) { $defaultValue.last().remove(); } var $placeholder = field.$setting('placeholder').find('> .acf-input > .acf-input-wrap > .CodeMirror'); if ($placeholder.length > 1) { $placeholder.last().remove(); } }, }); /** * Field: Column */ new acf.Model({ actions: { 'change_field_label/type=acfe_column': 'renderTitle', 'change_field_type/type=acfe_column': 'renderTitle', 'render_field_settings/type=acfe_column': 'renderField', }, ucFirst: function(string) { return string.charAt(0).toUpperCase() + string.slice(1); }, renderTitle: function($el) { var field = acf.getInstance($el); var $columns = field.$setting('columns'); var columns = acf.getInstance($columns).getValue(); var $endpoint = field.$setting('endpoint'); var endpoint = acf.getInstance($endpoint).getValue(); if (endpoint) { columns = 'Endpoint'; } field.set('label', '(Column ' + this.ucFirst(columns) + ')'); }, renderField: function($el) { var field = acf.getFieldObject($el); var setLabel = function() { field.set('label', true); } field.on('change', '.acfe-field-columns', setLabel); field.on('change', '.acfe-field-columns-endpoint', setLabel); } }); /** * Field: Taxonomy Terms */ new acf.Model({ filters: { 'select2_ajax_data/action=acfe/fields/taxonomy_terms/allow_query': 'taxonomyTermsAjax', }, taxonomyTermsAjax: function(ajaxData, data, $el, field, select) { // Taxonomies var $taxonomies = $el.closest('.acf-field-settings').find('.acf-field-setting-taxonomy > .acf-input > select > option:selected'); var tax = []; $taxonomies.each(function() { tax.push($(this).val()); }); ajaxData.taxonomies = tax; // Terms level var $level = $el.closest('.acf-field-settings').find('.acf-field-setting-allow_terms > .acf-input input[type="number"]'); ajaxData.level = $level.val(); return ajaxData; } }); /** * Field: Data */ new acf.Model({ wait: 'prepare', initialize: function() { $('.button.edit-field').each(function() { var $this = $(this); var tbody = $this.closest('tbody, .acf-field-settings'); // ACF 6.0 doesn't use tbody anymore $(tbody).find('.acfe-data-button:first').insertAfter($this); $(tbody).find('.acfe-modal:first').appendTo($('body')); $(tbody).find('.acf-field-setting-acfe_field_data:first').remove(); }); } }); /** * Field Attribute: Before/After */ new acf.Model({ actions: { 'new_field': 'onNewField' }, onNewField: function(field) { // bail early if no before/after if (field.has('before') || field.has('after')) { // bail early if (field.get('type') === 'tab') { return; } // vars var type = field.has('before') ? 'before' : 'after'; var $fieldObject = field.$el.closest('.acf-field-object'); var fieldObject, fieldObjectKey; if ($fieldObject.length) { fieldObject = acf.getFieldObject($fieldObject); fieldObjectKey = fieldObject.get('key'); } // get parent from acf-fields div var $fields = field.$el.closest('.acf-fields'); // get parent from acf-table div if (!$fields.length) { $fields = field.$el.closest('.acf-table'); } // found parent if ($fields.length) { var $sibling; // find within parent field if (fieldObjectKey) { $sibling = $fields.find('[data-name="' + field.get(type) + '"]').not('.acf-input-sub .acf-field-object[data-key!="' + fieldObjectKey + '"] [data-name="' + field.get(type) + '"]').first(); // find within parent } else { $sibling = $fields.find('[data-name="' + field.get(type) + '"]').first(); } if ($sibling.length) { // apply after/before $sibling[type](field.$el); } } } } }); /** * Tab Attribute: Before/After */ var Tab = acf.models.TabField; acf.models.TabField = Tab.extend({ initialize: function() { // bail early if no before/after if (this.has('before') || this.has('after')) { // vars var type = this.has('before') ? 'before' : 'after'; // get parent from acf-fields div var $fields = this.$el.closest('.acf-fields'); var $fieldObject = this.$el.closest('.acf-field-object'); var fieldObject, fieldObjectKey; if ($fieldObject.length) { fieldObject = acf.getFieldObject($fieldObject); fieldObjectKey = fieldObject.get('key'); } // get parent from acf-table div if (!$fields.length) { $fields = this.$el.closest('.acf-table'); } // found parent if ($fields.length) { var $sibling; // find within parent field if (fieldObjectKey) { $sibling = $fields.find('[data-name="' + this.get(type) + '"]').not('.acf-input-sub .acf-field-object[data-key!="' + fieldObjectKey + '"] [data-name="' + this.get(type) + '"]').first(); // find within parent } else { $sibling = $fields.find('[data-name="' + this.get(type) + '"]').first(); } if ($sibling.length) { // apply after/before $sibling[type](this.$el); } } } // Setup Tab.prototype.initialize.apply(this, arguments); } }); /** * Field Group: Locations - Date/Time Picker */ new acf.Model({ wait: 'ready', actions: { 'append': 'onAppend', 'acfe/field_group/rule_refresh': 'refreshFields' }, initialize: function() { // ACF 6.0 changed #acf-field-group-locations to .field-group-locations this.$el = $('#acf-field-group-locations, .field-group-locations'); }, onAppend: function($el) { if (!$el.is('.rule-group') && !$el.parent().parent().parent().is('.rule-group')) { return; } this.refreshFields(); }, refreshFields: function() { var fields = acf.getFields({ parent: this.$('td.value') }); fields.map(function(field) { if (!acfe.inArray(field.get('type'), ['date_picker', 'date_time_picker', 'time_picker'])) { return; } field.$inputText().removeClass('hasDatepicker').removeAttr('id'); field.initialize(); }); } }); /** * Field Group: Meta */ new acf.Model({ actions: { 'new_field/name=acfe_meta': 'renderClass', 'new_field/name=acfe_settings': 'renderClass', 'new_field/name=acfe_validate': 'renderClass', }, renderClass: function(field) { field.$('.acf-button').removeClass('button-primary'); } }); /** * Field Group Custom Slug */ new acf.Model({ events: { 'keyup #post_name': 'onInput' }, onInput: function(e, $el) { var val = $el.val(); if (!val.startsWith('group_')) { val = 'group_' + val; $el.val(val); } $('[name="acf_field_group[key]"]').val(val); $('.misc-pub-acfe-field-group-key code').html(val); }, }); })(jQuery); (function($) { if (typeof acf === 'undefined' || typeof acfe === 'undefined') { return; } /** * Field: Repeater * * Fix ACF 6.0 repeater settings such as Advanced Settings/Validation not working correctly */ new acf.Model({ actions: { 'duplicate': 'onAppend', }, onAppend: function($el, $el2) { if (acfe.versionCompare(acf.get('acf_version'), '>=', '6.0')) { // do not use acf.getClosestField() in order to not instantiate the field // otherwise, this would create a bug when duplicating a flexible content layout: // new layout sub fields would be moved back to the original layout var $field = acf.findClosestField($el2); if ($field.is('[data-type="repeater"]')) { // instantiate the field here var field = acf.getField($field); // field.render() should have been in the repeater "add" method, at the end of acf.duplicate() // but it was removed in acf 6.0 field.render(); } } } }); })(jQuery);