web/wp-content/plugins/acf-extended/assets/js/acfe-admin.js (602 lines of code) (raw):

(function($) { if (typeof acf === 'undefined' || typeof acfe === 'undefined') { return; } /** * Module: Author */ acf.addAction('new_field/name=acfe_author', function(field) { field.on('change', function(e) { e.stopPropagation(); }); }); })(jQuery); (function($) { if (typeof acf === 'undefined' || typeof acfe === 'undefined') { return; } new acf.Model({ wait: 'prepare', actions: { 'refresh_post_screen': 'onRefreshScreen', }, events: { 'click .acfe-dev-delete-meta': 'onDeleteSingle', 'click .acfe-dev-bulk [type="submit"]': 'onDeleteBulk', 'change #acfe-wp-custom-fields-hide': 'onCheckPostbox', 'change #acfe-acf-custom-fields-hide': 'onCheckPostbox', }, $acf: function() { return $('#acfe-acf-custom-fields'); }, $wp: function() { return $('#acfe-wp-custom-fields'); }, $bulk: function() { return $('.acfe-dev-bulk'); }, count: function(metabox) { return this['$' + metabox]().find('tbody tr').length; }, hideBulk: function() { this.$bulk().hide(); }, showBulk: function() { this.$bulk().show(); }, initialize: function() { this.$bulk().insertAfter(this.$bulk().closest('.postbox')); if (!this.$acf().is(':visible') && !this.$wp().is(':visible')) { this.hideBulk(); } $('.metabox-prefs .acfe-dev-meta-count').remove(); }, syncMetaboxes: function() { this.$acf().find('.acfe-dev-meta-count').text(this.count('acf')); this.$wp().find('.acfe-dev-meta-count').text(this.count('wp')); if (!this.count('acf')) { this.$acf().remove(); } if (!this.count('wp')) { this.$wp().remove(); } if ((!this.count('acf') && !this.count('wp')) || (!this.$acf().is(':visible') && !this.$wp().is(':visible'))) { this.hideBulk(); } }, onDeleteSingle: function(e, $el) { e.preventDefault(); var self = this; var $tr = $el.closest('tr'); $.ajax({ url: acf.get('ajaxurl'), type: 'post', data: { action: 'acfe/dev/single_delete_meta', id: $el.attr('data-meta-id'), key: $el.attr('data-meta-key'), type: $el.attr('data-meta-type'), _wpnonce: $el.attr('data-nonce'), }, beforeSend: function() { $tr.addClass('deleted').delay(200).fadeOut(250, function() { $tr.remove(); self.syncMetaboxes(); }); }, success: function(response) { if (response !== '1') { $tr.removeClass('deleted'); $tr.show(); } } }); }, onDeleteBulk: function(e, $el) { e.preventDefault(); var self = this; var action = $el.prevAll('.acfe-dev-bulk-action').val(); var type = $el.prevAll('.acfe-dev-bulk-meta-type').val(); var nonce = $el.prevAll('.acfe-dev-bulk-nonce').val(); if (action !== 'delete') { return; } var ids = []; var trs = []; $('input.acfe-dev-bulk-checkbox:checked').each(function() { ids.push($(this).val()); trs.push($(this).closest('tr')); }); if (!ids.length) { return; } $.ajax({ url: acf.get('ajaxurl'), type: 'post', data: { action: 'acfe/dev/bulk_delete_meta', ids: ids, type: type, _wpnonce: nonce, }, beforeSend: function() { trs.map(function(tr) { $(tr).addClass('deleted').delay(200).fadeOut(250, function() { $(tr).remove(); self.syncMetaboxes(); }); }); } }); }, onCheckPostbox: function(e, $el) { var val = $el.val(); if ($el.prop('checked')) { this.showBulk(); } else if ((val === 'acfe-wp-custom-fields' && !this.$acf().is(':visible')) || (val === 'acfe-acf-custom-fields' && !this.$wp().is(':visible'))) { this.hideBulk(); } }, onRefreshScreen: function(data) { // fix dev mode postbox being hidden // on page attributes template change data.hidden.map(function(id) { if (id === 'acfe-wp-custom-fields' || id === 'acfe-acf-custom-fields' || id === 'acfe-performance') { acf.getPostbox(id).showEnable(); } }); } }); })(jQuery); (function($) { if (typeof acf === 'undefined' || typeof acfe === 'undefined') { return; } /** * Field: Enable Switch */ new acf.Model({ actions: { 'new_field': 'newField', }, isRepeater: function(field) { return field.get('type') === 'repeater' || field.get('type') === 'flexible_content'; }, getCondition: function(target) { return this.isRepeater(target) ? target.val() === 0 : !target.val().length; }, newField: function(field) { if (field.get('enableSwitch')) { this.enableSwitch(field); } else if (field.get('switched') || field.get('switcher')) { this.enableSwitcher(field); } }, enableSwitcher: function(field) { var self = this; var switcher, target; if (field.get('switched')) { switcher = acf.getField(field.$el.prev()); target = field; } else if (field.get('switcher')) { switcher = field; target = acf.getField(field.$el.next()); } if (self.getCondition(target)) { switcher.switchOff(); switcher.show('switcher'); target.hide('switcher'); } else { switcher.hide('switcher'); target.show('switcher'); } if (field.get('switcher')) { // Switch Action switcher.on('change', function() { if (switcher.$input().prop('checked')) { switcher.hide('switcher'); target.show('switcher'); if (self.isRepeater(target)) { target.add(); } } }); // Field Action target.on('change', function(e, $el) { if (self.getCondition(target)) { switcher.switchOff(); switcher.show('switcher'); target.hide('switcher'); } }); } }, enableSwitch: function(field) { // Clone var $row = field.$el.clone(); // Params $row.removeAttr('data-enable-switch'); $row.attr('data-switcher', true); $row.attr('data-name', field.get('name') + '_acfe_switch'); $row.attr('data-key', field.get('name') + '_acfe_switch'); $row.attr('data-type', 'true_false'); // HTML $row.find('>.acf-input').html('<div class="acf-true-false">\n' + '<input type="hidden" value="0">' + '<label>\n' + '<input type="checkbox" value="1" class="acf-switch-input" autocomplete="off">\n' + '<div class="acf-switch"><span class="acf-switch-on" style="min-width: 18px;">' + acf.__('Yes') + '</span>' + '<span class="acf-switch-off" style="min-width: 18px;">' + acf.__('No') + '</span><div class="acf-switch-slider"></div></div>' + '</label>\n' + '</div>'); // Insert $row = $row.insertBefore(field.$el); // New Switch acf.getField($row); // Remove Attribute field.$el.removeAttr('data-enable-switch'); field.set('enableSwitch', false); field.$el.attr('data-switched', true); field.set('switched', true); }, }); })(jQuery); (function($) { if (typeof acf === 'undefined' || typeof acfe === 'undefined') { return; } var moduleManager = new acf.Model({ wait: 'prepare', priority: 1, initialize: function() { if (acfe.get('module') && acfe.get('module.screen') === 'post') { new module(acfe.get('module')); } } }); var module = acf.Model.extend({ setup: function(props) { this.inherit(props); }, filters: { 'validation_complete': 'onValidationComplete', }, onValidationComplete: function(data, $el, instance) { // title var $title = $('#titlewrap #title'); // validate post title if (!$title.val()) { // data data.valid = 0; data.errors = data.errors || []; // push error data.errors.push({ input: '', message: this.get('messages.label') }); $title.focus(); } return data; }, initialize: function() { // update status $('#post-status-display').html(this.get('messages.status')); // move export links $('.acfe-misc-export').insertAfter('.misc-pub-post-status'); }, }); })(jQuery); (function($) { if (typeof acf === 'undefined' || typeof acfe === 'undefined') { return; } /** * module manager * @type {acf.Model} */ var moduleManager = new acf.Model({ wait: 'prepare', priority: 1, initialize: function() { if (acfe.get('module.name') === 'form' && acfe.get('module.screen') === 'post') { new module(); } } }); var hideLoadFieldsCheckboxes = function() { var loadFields = acf.getFields({ name: 'load_acf_fields', }); // loop loadFields.map(function(field) { var values = []; var selects = acf.getFields({ type: 'select', sibling: field.$el, }); selects.map(function(select) { if (select.has('relatedField') && select.val()) { values.push(select.val()); } }); // checkbox inputs var $inputs = field.$inputs(); // loop checkboxes $inputs.each(function() { var $li = $(this).closest('li'); // show checkbox if not selected if (!acfe.inArray($(this).val(), values)) { acf.show($li); } else { acf.hide($li); } }); field.$control().find('> li').each(function() { var $li = $(this); // check inputs hidden if ($li.find('li').not('.acf-hidden').length === 0) { acf.hide($li); } else { acf.show($li); } }); // hide field if all checkboxes hidden if (field.$control().find('> li').not('.acf-hidden').length === 0) { field.hideDisable('acfe_form_field_groups', 'acfe_form_field_groups'); } else { field.showEnable('acfe_form_field_groups', 'acfe_form_field_groups'); } }); } /** * module */ var module = acf.Model.extend({ actions: { 'new_select2': 'newSelect2', 'new_field/key=field_post_action_save_append_terms': 'newAppendTerms', 'new_field/key=field_actions': 'newActions', 'new_field/key=field_email_action_files': 'newFiles', 'new_field/key=field_email_action_files_static': 'newFiles', 'new_field/name=save_acf_fields': 'newCheckboxes', 'new_field/name=load_acf_fields': 'newCheckboxes', 'new_field/key=field_field_groups': 'newFieldGroups' }, filters: { 'select2_args': 'select2Args', 'select2_ajax_data/action=acfe/form/map_field_ajax': 'mapFieldAjax', 'select2_ajax_data/action=acfe/form/map_field_groups_ajax': 'mapFieldGroupsAjax', 'select2_ajax_data/key=field_post_action_save_target_custom': 'customAjaxData', 'select2_ajax_data/key=field_post_action_load_source_custom': 'customAjaxData', 'select2_ajax_data/key=field_post_action_save_post_author_custom': 'customAjaxData', 'select2_ajax_data/key=field_post_action_save_post_parent_custom': 'customAjaxData', 'select2_ajax_data/key=field_term_action_save_target_custom': 'customAjaxData', 'select2_ajax_data/key=field_term_action_save_parent_custom': 'customAjaxData', 'select2_ajax_data/key=field_term_action_load_source_custom': 'customAjaxData', 'select2_ajax_data/key=field_user_action_save_target_custom': 'customAjaxData', 'select2_ajax_data/key=field_user_action_load_source_custom': 'customAjaxData', }, /** * newSelect2 * * new_select2 */ newSelect2: function(select2) { // spawn related field model if (select2.get('field') && select2.get('field').has('relatedField')) { new relatedField(select2); } }, /** * newAppendTerms * * new_field/key=field_post_action_save_append_terms */ newAppendTerms: function(field) { // get save post terms var postTerms = acf.getFields({ key: 'field_post_action_save_post_terms', sibling: field.$el }).shift(); // move append terms if (postTerms) { field.$inputWrap().addClass('append-terms').appendTo(postTerms.$inputWrap()); field.$el.remove(); } }, /** * newActions * * new_field/key=field_actions */ newActions: function(field) { field.on('click', '[data-name="add-layout"]', function(e) { $('body').find('.acf-fc-popup').addClass('acfe-fc-popup-grey'); }); }, /** * newFiles * * new_field/key=field_email_action_files * new_field/key=field_email_action_files_static */ newFiles: function(field) { field.$('> .acf-input > .acf-repeater > .acf-actions > .acf-button').removeClass('button-primary'); }, /** * select2Args * * select2_args */ select2Args: function(options, $select, fieldData, field, instance) { if (field.get('acfeAllowCustom')) { var replaceCode = function(state) { // /[{\w:]*(?<full>{(?<name>[\w]+)(?!:})(?::(?<value>\S*?))?})}*/g // /({[\w: +-\\]+}*)/g if (state.text && state.text.indexOf('<code>') === -1) { state.text = state.text.replace(/({[\w: +-\\]+}*)/g, "<code>$1</code>"); } // we must escape to let user re-order var $selection = $('<span class="acf-selection"></span>'); $selection.html(acf.escHtml(state.text)); $selection.data('element', state.element); return $selection; }; options.templateSelection = replaceCode; options.templateResult = replaceCode; } return options; }, /** * mapFieldAjax * * select2_ajax_data/action=acfe/form/map_field_ajax * * @param ajaxData * @param data * @param $el * @param field * @param instance * @returns {*} */ mapFieldAjax: function(ajaxData, data, $el, field, instance) { ajaxData.field_label = ''; ajaxData.value = field.val(); ajaxData.choices = []; ajaxData.custom_choices = []; ajaxData.field_groups = []; ajaxData.is_load = field.has('relatedField') ? 1 : 0; // field label // get node text to avoid additional HTML (like tooltip) var fieldLabel = acfe.getTextNode(field.$labelWrap().find('label')); if (!fieldLabel) { var parent = acf.getInstance(field.$el.closest('.acf-field-group')); if (parent) { fieldLabel = acfe.getTextNode(parent.$labelWrap().find('label')); } } ajaxData.field_label = fieldLabel; // choices var choices = field.get('choices'); if (choices) { ajaxData.choices = choices; } // custom choices var customChoices = field.get('customChoices'); if (customChoices) { ajaxData.custom_choices = customChoices; } // field groups var fieldGroups = acf.getField('field_field_groups').val(); if (fieldGroups.length) { ajaxData.field_groups = fieldGroups; } return ajaxData; }, /** * mapFieldGroupsAjax * * select2_ajax_data/action=acfe/form/map_field_groups_ajax * * @param ajaxData * @param data * @param $el * @param field * @param instance * @returns {*} */ mapFieldGroupsAjax: function(ajaxData, data, $el, field, instance) { // data ajaxData.value = field.val(); ajaxData.choices = []; ajaxData.custom_choices = []; // choices var choices = field.get('choices'); if (choices) { ajaxData.choices = choices; } // custom choices var customChoices = field.get('customChoices'); if (customChoices) { ajaxData.custom_choices = customChoices; } return ajaxData; }, /** * customAjaxData * * @param ajaxData * @param data * @param $el * @param field * @param instance * @returns {*} */ customAjaxData: function(ajaxData, data, $el, field, instance) { ajaxData.is_form = 1; return ajaxData; }, /** * newCheckboxes * * new_field/name=save_acf_fields * new_field/name=load_acf_fields * * @param field */ newCheckboxes: function(field) { this.refreshCheckboxChoicesHtml(field); }, /** * newFieldGroups * * new_field/key=field_field_groups */ newFieldGroups: function(field) { field.on('change', this.proxy(function(e) { this.refreshFieldGroupsMetabox(); this.refreshCheckboxesChoices(); })); }, refreshFieldGroupsMetabox: function() { // get field groups var fieldGroups = acf.getField('field_field_groups').val(); var metabox = acf.getPostbox('acfe-field-groups'); if (!metabox) { return; } if (!fieldGroups.length) { return metabox.hide(); } $.ajax({ url: acf.get('ajaxurl'), data: acf.prepareForAjax({ action: 'acfe/form/field_groups_metabox', field_groups: fieldGroups }), type: 'post', dataType: 'html', context: this, success: function(response) { metabox.show(); metabox.html(response); }, }); }, refreshCheckboxesChoices: function() { // get save acf fields var saveFields = acf.getFields({ name: 'save_acf_fields', }); // get load acf fields var loadFields = acf.getFields({ name: 'load_acf_fields', }); // merge fields var checkboxes = [].concat(saveFields, loadFields); // loop checkboxes fields checkboxes.map(function(field) { this.refreshCheckboxChoicesHtml(field); }, this); }, refreshCheckboxChoicesHtml: function(field) { // get field groups var fieldGroups = acf.getField('field_field_groups').val(); if (!fieldGroups.length) { return field.hideDisable('acfe_form_field_groups', 'acfe_form_field_groups'); } // send ajax $.ajax({ url: acf.get('ajaxurl'), data: acf.prepareForAjax({ action: 'acfe/form/map_checkbox_ajax', name: field.getInputName(), // acf[field_actions][row-0][field_post_action_save_acf_fields] _name: field.get('name'), key: field.get('key'), value: field.val(), field_groups: fieldGroups }), type: 'post', dataType: 'html', context: this, success: function(response) { field.$inputWrap().html(response); if (field.$control().find('> li').length) { var labels = field.$inputWrap().find('> [data-labels]').data('labels'); if (labels.length) { labels.map(function(label, i) { field.$control().find('> li:eq(' + i + ')').prepend('<strong>' + label + '</strong>'); }); } // show enable field field.showEnable('acfe_form_field_groups', 'acfe_form_field_groups'); } else { field.hideDisable('acfe_form_field_groups', 'acfe_form_field_groups'); } // hide checkboxes based on "load fields" hideLoadFieldsCheckboxes(); }, }); }, }); /** * relatedField * * new_select2 */ var relatedField = acf.Model.extend({ field: {}, select2: {}, relatedField: false, events: { 'change': 'onChange', 'hideField': 'onHideField', 'showField': 'onShowField', }, setup: function(select2) { this.select2 = select2; this.field = select2.get('field'); // used for events this.$el = this.field.$el; }, initialize: function() { // bail early if no related field this.relatedField = this.getRelatedField(); if (!this.relatedField) { return; } this.setupRelatedHTML(); this.showRelatedMessage(true); }, onChange: function() { if (this.field.val()) { this.showRelatedMessage(); } else { this.hideRelatedMessage(); } }, onHideField: function(e, $el, context) { if (this.relatedField && context === 'conditional_logic') { this.hideRelatedMessage(); } }, onShowField: function(e, $el, context) { if (this.relatedField && context === 'conditional_logic') { this.showRelatedMessage(); } }, setupRelatedHTML: function() { if (!this.relatedField.$inputWrap().find('.related-message').length) { this.relatedField.$inputWrap().append('<div class="related-message" />'); } }, showRelatedMessage: function(initialize) { initialize = initialize || false; // get select value var id = this.field.val(); var value = this.field.val(); // get select2 option label if (this.select2) { var options = this.select2.getValue(); var option = options.shift(); if (option && option.id) { id = option.id; value = option.text; } } // if value found if (value) { // display related message this.relatedField.$inputWrap().addClass('acfe-display-related-message'); this.relatedField.$inputWrap().find('.related-message').html('Field: ' + value); if (!initialize) { // var $input = this.relatedField.$input(); // if(!$input.is('select')){ // console.log($input) // acf.val($input, '', true); // silent // } if (acf.isset(this.relatedField, 'select2')) { this.relatedField.select2.$el.val(null); this.relatedField.select2.$el.trigger('change'); } } // // set empty value for conditional logic // var relatedFieldVal = this.relatedField.val(); // // // delete value silently (to avoid trigger exit prompt) // if(acfe.isFieldKey(relatedFieldVal) || (acfe.isArray(relatedFieldVal) && acfe.isFieldKey(relatedFieldVal.shift()))){ // acf.val(this.relatedField.$input(), '', true); // // // delete value normally // }else{ // this.relatedField.select2.$el.val(null); // this.relatedField.select2.$el.trigger('change'); // } hideLoadFieldsCheckboxes(); } }, hideRelatedMessage: function() { this.relatedField.$inputWrap().removeClass('acfe-display-related-message'); this.relatedField.$inputWrap().find('.related-message').html(''); hideLoadFieldsCheckboxes(); }, getRelatedField: function() { var key = this.field.get('relatedField'); var $layout = this.field.$el.closest('.layout'); var relatedField = acf.getFields({ key: key, parent: $layout }); return relatedField.shift(); } }); })(jQuery); (function($) { if (typeof acf === 'undefined' || typeof acfe === 'undefined') { return; } /** * Postboxes: ACFE Class */ acf.addAction('show_postbox', function(postbox) { postbox.$el.removeClass('acfe-postbox-left acfe-postbox-top'); }); })(jQuery);