1 line
14 KiB
JavaScript
1 line
14 KiB
JavaScript
(()=>{"use strict";const e={context:{postId:0,postType:""},fields:{},values:{},savedValues:{},nameToKey:{},fieldGroups:[],initialized:!1,syncing:!1},t=e=>null===e||"object"!=typeof e?e:JSON.parse(JSON.stringify(e)),n=(e,t,i)=>{if(0===t.length)return i;const s=t[0],a=e??{},r=Array.isArray(a)?[...a]:{...a};return r[s]=n(r[s],t.slice(1),i),r},i=(e,t)=>{if(t)return e.fields[t]?t:e.nameToKey[t]},s=(s=e,a)=>{switch(a.type){case"INITIALIZE_STORE":{const e={},n=a.fields??{};for(const t of Object.keys(n)){const i=n[t];i.name&&(e[i.name]=t)}return{...s,context:a.context??s.context,fields:n,values:a.values??{},savedValues:t(a.values??{}),nameToKey:e,fieldGroups:a.fieldGroups??[],initialized:!0}}case"REGISTER_FIELD_GROUP":{const e=a.fields??{},n={...s.fields,...e},i={};for(const e of Object.keys(n)){const t=n[e];t.name&&(i[t.name]=e)}const r=a.values??{},o={...s.values},l={...s.savedValues};for(const e of Object.keys(r))e in o||(o[e]=r[e]),e in l||(l[e]=t(r[e]));const c=new Set(s.fieldGroups.map(e=>e.key)),f=(a.fieldGroups??[]).filter(e=>!c.has(e.key)),u=0===s.context.postId&&a.context?a.context:s.context;return{...s,context:u,fields:n,values:o,savedValues:l,nameToKey:i,fieldGroups:[...s.fieldGroups,...f],initialized:!0}}case"SET_FIELD_VALUE":{const e=i(s,a.fieldKey);return e?{...s,values:{...s.values,[e]:a.value}}:s}case"SET_VALUES":{const e={};for(const t of Object.keys(a.values)){const n=i(s,t);n&&(e[n]=a.values[t])}return{...s,values:{...s.values,...e}}}case"SET_SUB_FIELD_VALUE":{const e=i(s,a.parentKey);if(!e)return s;const t=s.values[e]??{},r=n(t,a.path,a.value);return{...s,values:{...s.values,[e]:r}}}case"ADD_REPEATER_ROW":{const e=i(s,a.fieldKey);if(!e)return s;let t=s.values[e];Array.isArray(t)||(t=[]);const n=[...t],r=a.rowData??{},o=a.index??n.length,l=Math.max(0,Math.min(o,n.length));return n.splice(l,0,r),{...s,values:{...s.values,[e]:n}}}case"REMOVE_REPEATER_ROW":{const e=i(s,a.fieldKey);if(!e)return s;const t=s.values[e];if(!Array.isArray(t))return s;if(a.rowIndex<0||a.rowIndex>=t.length)return s;const n=[...t];return n.splice(a.rowIndex,1),{...s,values:{...s.values,[e]:n}}}case"MOVE_REPEATER_ROW":{const e=i(s,a.fieldKey);if(!e)return s;const t=s.values[e];if(!Array.isArray(t))return s;if(a.fromIndex<0||a.fromIndex>=t.length||a.toIndex<0||a.toIndex>=t.length)return s;const n=[...t],[r]=n.splice(a.fromIndex,1);return n.splice(a.toIndex,0,r),{...s,values:{...s.values,[e]:n}}}case"MARK_AS_SAVED":return{...s,savedValues:t(s.values)};case"SET_SYNCING":return{...s,syncing:a.isSyncing};default:return s}},a={getFieldValue:(e,t)=>{const n=i(e,t);return n?e.values[n]:void 0},getFieldValueByKey:(e,t)=>e.values[t],getFieldValueByName:(e,t)=>{const n=e.nameToKey[t];return n?e.values[n]:void 0},getAllValues:e=>e.values,getAllValuesByName:e=>{const t={};for(const n of Object.keys(e.nameToKey)){const i=e.nameToKey[n];i in e.values&&(t[n]=e.values[i])}return t},getChangedValues:e=>{const t={};for(const n of Object.keys(e.values))JSON.stringify(e.values[n])!==JSON.stringify(e.savedValues[n])&&(t[n]=e.values[n]);return t},getField:(e,t)=>{const n=i(e,t);return n?e.fields[n]:void 0},getFields:e=>e.fields,getFieldsByGroup:(e,t)=>{const n={};for(const i of Object.keys(e.fields))e.fields[i].fieldGroupKey===t&&(n[i]=e.fields[i]);return n},getFieldKeyByName:(e,t)=>e.nameToKey[t],getSubFieldValue:(e,t,...n)=>{const s=i(e,t);if(!s)return;const a=e.values[s];return void 0===a?void 0:((e,t)=>{let n=e;for(const e of t){if(null==n)return;n=n[e]}return n})(a,n)},isInitialized:e=>e.initialized,isSyncing:e=>e.syncing,hasChanges:e=>JSON.stringify(e.values)!==JSON.stringify(e.savedValues),isDirty:(e,t)=>{const n=i(e,t);return!!n&&JSON.stringify(e.values[n])!==JSON.stringify(e.savedValues[n])},getContext:e=>e.context,getFieldGroups:e=>e.fieldGroups},r={initializeStore:e=>({type:"INITIALIZE_STORE",context:e.context,fields:e.fields,values:e.values,fieldGroups:e.fieldGroups}),registerFieldGroup:e=>({type:"REGISTER_FIELD_GROUP",context:e.context,fields:e.fields,values:e.values,fieldGroups:e.fieldGroups}),setFieldValue:(e,t)=>({type:"SET_FIELD_VALUE",fieldKey:e,value:t}),setValues:e=>({type:"SET_VALUES",values:e}),setSubFieldValue:(e,...t)=>{const n=t.pop();return{type:"SET_SUB_FIELD_VALUE",parentKey:e,path:t,value:n}},addRepeaterRow:(e,t,n)=>({type:"ADD_REPEATER_ROW",fieldKey:e,rowData:t,index:n}),removeRepeaterRow:(e,t)=>({type:"REMOVE_REPEATER_ROW",fieldKey:e,rowIndex:t}),moveRepeaterRow:(e,t,n)=>({type:"MOVE_REPEATER_ROW",fieldKey:e,fromIndex:t,toIndex:n}),markAsSaved:()=>({type:"MARK_AS_SAVED"}),setSyncing:e=>({type:"SET_SYNCING",isSyncing:e})},o="acf/fields";if(window.wp?.data?.createReduxStore){const e=wp.data.createReduxStore(o,{reducer:s,selectors:a,actions:r});wp.data.register(e)}const l=["repeater","group","flexible_content","clone"],c=e=>l.includes(e),f=new Set(["post_object","page_link","relationship","taxonomy","user"]),u=(e,t)=>{const n=e.get("type");if(!f.has(n))return[];const i=(e=>null==e||""===e||!1===e?[]:Array.isArray(e)?e.filter(e=>null!=e&&""!==e):[e])(t);if(!i.length)return[];if("relationship"===n){const t=e.$el.find(".choices-list .acf-rel-item"),n=new Set;return t.each(function(){n.add(String(jQuery(this).data("id")))}),i.filter(e=>!n.has(String(e)))}const s=e.$el.find("select").first();if(!s.length)return[];const a=new Set;return s.find("option").each(function(){a.add(String(jQuery(this).val()))}),i.filter(e=>!a.has(String(e)))},d=(e,t)=>{if(!t.length)return;if("relationship"===e.get("type")){const n=e.$el.find(".choices-list").first();if(!n.length)return;for(const e of t){const t=String(e.id);if(n.find(".acf-rel-item").toArray().some(e=>String(jQuery(e).data("id"))===t))continue;const i=jQuery('<li><span tabindex="0" class="acf-rel-item acf-rel-item-add"></span></li>');i.find(".acf-rel-item").attr("data-id",t).text(e.text),n.append(i)}return}const n=e.$el.find("select").first();if(n.length)for(const e of t){const t=String(e.id);n.find("option").toArray().some(e=>String(e.value)===t)||n.append(jQuery("<option></option>").attr("value",t).text(e.text))}},p=async(e,t)=>{const n=e.get("type"),i=e.get("key"),s=e.get("nonce");if(!n||!i||!s)return null;const a=new FormData;if(a.append("action",`acf/fields/${n}/query`),a.append("field_key",i),a.append("nonce",s),a.append("include",String(t)),!window.ajaxurl)return null;try{const e=await fetch(window.ajaxurl,{method:"POST",credentials:"same-origin",body:a});return e.ok?((e,t)=>{const n=e?.results;if(!Array.isArray(n))return null;const i=String(t);for(const e of n){if(!e||"object"!=typeof e)continue;const t=e;if(Array.isArray(t.children))for(const e of t.children){if(!e||"object"!=typeof e)continue;const t=e;if(String(t.id)===i&&"string"==typeof t.text)return{id:t.id,text:t.text}}else if(String(t.id)===i&&"string"==typeof t.text)return{id:t.id,text:t.text}}return null})(await e.json(),t):null}catch{return null}},y=e=>{const t=e.get("type");return"group"===t||"clone"===t?g(e):"repeater"===t?h(e):"flexible_content"===t?v(e):void 0},g=e=>{const t={},n=acf.getFields({parent:e.$el});for(const e of n){const n=e.get("key"),i=e.get("type");t[n]=c(i)?y(e):e.val()}return t},h=e=>{const t=[];return e.$el.find("> .acf-input > .acf-repeater > table > tbody > tr.acf-row:not(.acf-clone)").each(function(){const e=jQuery(this),n={},i=acf.getFields({parent:e});for(const e of i){const t=e.get("key"),i=e.get("type");n[t]=c(i)?y(e):e.val()}t.push(n)}),t},v=e=>{const t=[];return e.$el.find("> .acf-input > .acf-flexible-content > .values > .layout:not(.acf-clone)").each(function(){const e=jQuery(this),n={acf_fc_layout:e.data("layout")},i=acf.getFields({parent:e});for(const e of i){const t=e.get("key"),i=e.get("type");n[t]=c(i)?y(e):e.val()}t.push(n)}),t},w=(e,t)=>{const n=e.get("type");c(n)?S(e,t):e.val(t)},S=(e,t)=>{const n=e.get("type");"group"===n||"clone"===n?A(e,t):"repeater"===n?E(e,t):"flexible_content"===n&&_(e,t)},A=(e,t)=>{t&&"object"==typeof t&&!Array.isArray(t)&&F(e.$el,t)},E=(e,t)=>{if(e.get("pagination"))return;const n=Array.isArray(t)?t:[],i=e,s=()=>e.$el.find("> .acf-input > .acf-repeater > table > tbody > tr.acf-row:not(.acf-clone)"),a=s().length;for(let e=a-1;e>=n.length;e--)b(s().eq(e));for(let e=a;e<n.length;e++)i.add();s().each(function(e){const t=n[e];t&&"object"==typeof t&&F(jQuery(this),t)})},_=(e,t)=>{const n=Array.isArray(t)?t:[],i=e,s=i.$layouts();if(s.length!==n.length||!s.toArray().every((e,t)=>{const i=jQuery(e).data("layout"),s=n[t]?.acf_fc_layout;return i===s})){s.each(function(){b(jQuery(this))});for(const e of n){const t=e?.acf_fc_layout;"string"==typeof t&&t&&i.add({layout:t})}}i.$layouts().each(function(e){const t=n[e];t&&"object"==typeof t&&F(jQuery(this),t)})},F=(e,t)=>{for(const n of acf.getFields({parent:e})){const e=n.get("key");e in t&&w(n,t[e])}},b=e=>{acf.doAction("remove",e),e.remove()};if(window.wp?.data?.select&&window.wp?.data?.dispatch){let e=!1,t=null;const n=e=>{const t=e.parents();return t.length?t[t.length-1].get("key"):e.get("key")},i=(e,t)=>{const n=acf.findField(e);if(!n.length)return;const i=acf.getField(n);i&&w(i,t)},s=async(e,t)=>{const n={},i=[];for(const s of e){const e=acf.findField(s);if(!e.length)continue;const a=acf.getField(e);if(!a)continue;const r=a.get("type");if(!f.has(r))continue;const o=u(a,t[s]);if(o.length){n[s]=[];for(const e of o)i.push(p(a,e).then(e=>{e&&n[s].push(e)}))}}return await Promise.all(i),n},a=()=>{if(e)return;const n=wp.data.select(o);if(!n.isInitialized())return;const r=n.getAllValues();if(r===t)return;const l=t??{},c=Object.keys(r).filter(e=>r[e]!==l[e]);if(t=r,!c.length)return;let p=!1;for(const e of c){const t=acf.findField(e);if(!t.length)continue;const n=acf.getField(t);if(n&&f.has(n.get("type"))&&u(n,r[e]).length){p=!0;break}}if(p)e=!0,s(c,r).then(n=>{try{for(const[e,t]of Object.entries(n)){const n=acf.findField(e);if(!n.length)continue;const i=acf.getField(n);i&&d(i,t)}for(const e of c)i(e,r[e])}finally{e=!1,t=r,wp.data.select(o).getAllValues()!==r&&queueMicrotask(a)}}).catch(()=>{e=!1});else{e=!0;try{for(const e of c)i(e,r[e])}finally{e=!1}}};new acf.Model({id:"datastoreSync",wait:"prepare",initialize(){acf.isGutenbergPostEditor()&&(this.initializeStore(),this.subscribeToStore(),this.listenToDOM(),this.setupConvenienceAPI())},initializeStore(){const e=acf.get("storeData");e&&(wp.data.dispatch(o).initializeStore(e),this.reconcileWithDOM(),t=wp.data.select(o).getAllValues())},reconcileWithDOM(){const e=wp.data.select(o),t=acf.getFields();if(!t?.length)return;const n={};for(const i of t){const t=i.get("key");if(!t)continue;if(!e.getField(t))continue;const s=i.get("type"),a=e.getFieldValue(t);if(void 0===a)continue;const r=c(s)?y(i):i.val();JSON.stringify(r)!==JSON.stringify(a)&&(n[t]=r)}Object.keys(n).length&&wp.data.dispatch(o).setValues(n)},subscribeToStore(){this.storeUnsubscribe=wp.data.subscribe(a)},listenToDOM(){acf.addAction("change_field",this.onFieldChange,10,this),acf.addAction("append_field",this.onFieldStructureChange,10,this),acf.addAction("remove_field",this.onFieldStructureChange,10,this),acf.addAction("sortstop_field",this.onFieldStructureChange,10,this),acf.addAction("refresh_post_screen",this.onRefreshPostScreen,10,this)},onFieldChange(i){if(e)return;if(!wp.data.select(o).isInitialized())return;const s=i.get("key");if(!s)return;const a=i.get("type");e=!0;try{const e=i.parent();if(e&&c(e.get("type"))){const e=n(i);if(e){const t=acf.findField(e);if(t.length){const n=acf.getField(t);if(n){const t=y(n);wp.data.dispatch(o).setFieldValue(e,t)}}}}else if(c(a)){const e=y(i);wp.data.dispatch(o).setFieldValue(s,e)}else wp.data.dispatch(o).setFieldValue(s,i.val())}finally{e=!1,t=wp.data.select(o).getAllValues()}},onFieldStructureChange(i){if(e)return;if(!wp.data.select(o).isInitialized())return;const s=n(i);if(!s)return;const a=acf.findField(s);if(!a.length)return;const r=acf.getField(a);if(r&&c(r.get("type"))){e=!0;try{const e=y(r);wp.data.dispatch(o).setFieldValue(s,e)}finally{e=!1,t=wp.data.select(o).getAllValues()}}},onRefreshPostScreen(n){if(n?.storeData){e=!0;try{wp.data.dispatch(o).registerFieldGroup(n.storeData),this.reconcileWithDOM()}finally{e=!1,t=wp.data.select(o).getAllValues()}}},setupConvenienceAPI(){acf.store={get(e){if(wp.data.select(o).isInitialized())return wp.data.select(o).getFieldValue(e)},set(e,t){wp.data.select(o).isInitialized()&&wp.data.dispatch(o).setFieldValue(e,t)},subscribe(e,t){let n=wp.data.select(o).getFieldValue(e);return wp.data.subscribe(()=>{const i=wp.data.select(o).getFieldValue(e);if(i!==n){const e=n;n=i,t(i,e)}})}}}})}const x=new RegExp(`\\[acf_(${["added","changed","deleted","reordered","inserted"].join("|")})]$`);function V(e){const t=acf.findField(e);if(!t.length)return{};const n=t.find("> .acf-input > .acf-repeater > table > tbody > tr.acf-row:not(.acf-clone)"),i={};return n.each(function(){const e=jQuery(this),t=e.data("id");if(!t)return;const n={};for(const t of acf.getFields({parent:e})){const e=t.get("key"),i=t.get("type");n[e]=c(i)?y(t):t.val()}e.find("input.acf-row-status").each(function(){const e=(jQuery(this).attr("name")??"").match(x);e&&(n[`acf_${e[1]}`]=jQuery(this).val())}),i[t]=n}),i}let m=null,O=null,I=!1;acf.gutenbergEditPost=function(){if(!acf.isGutenbergPostEditor())return;const e=wp.data.select(o);if(!e||!e.isInitialized())return;const t={...e.getAllValues()};for(const n of Object.keys(t)){const i=e.getField(n);"repeater"===i?.type&&i.pagination&&(t[n]=V(n))}const n=JSON.stringify(t);m=n,O=n,wp.data.dispatch("core/editor").editPost({meta:{_acf:n}})},window.wp?.data?.subscribe&&wp.data.subscribe(()=>{if(I)return;const e=wp.data.select(o);if(!e?.isInitialized())return;const t=wp.data.select("core/editor");if(!t?.getEditedPostAttribute)return;const n=t.getEditedPostAttribute("meta"),i=n&&"string"==typeof n._acf?n._acf:null;if(!i)return;if(i===O)return;if(i===m)return void(O=i);let s;try{s=JSON.parse(i)}catch{return void(O=i)}if(s&&"object"==typeof s&&!Array.isArray(s)){O=i,I=!0;try{wp.data.dispatch(o).setValues(s)}finally{I=!1}}else O=i})})(); |