[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 /******/ (() => { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ // The require scope 4 /******/ var __webpack_require__ = {}; 5 /******/ 6 /************************************************************************/ 7 /******/ /* webpack/runtime/compat get default export */ 8 /******/ (() => { 9 /******/ // getDefaultExport function for compatibility with non-harmony modules 10 /******/ __webpack_require__.n = (module) => { 11 /******/ var getter = module && module.__esModule ? 12 /******/ () => (module['default']) : 13 /******/ () => (module); 14 /******/ __webpack_require__.d(getter, { a: getter }); 15 /******/ return getter; 16 /******/ }; 17 /******/ })(); 18 /******/ 19 /******/ /* webpack/runtime/define property getters */ 20 /******/ (() => { 21 /******/ // define getter functions for harmony exports 22 /******/ __webpack_require__.d = (exports, definition) => { 23 /******/ for(var key in definition) { 24 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 25 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 26 /******/ } 27 /******/ } 28 /******/ }; 29 /******/ })(); 30 /******/ 31 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 32 /******/ (() => { 33 /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 34 /******/ })(); 35 /******/ 36 /******/ /* webpack/runtime/make namespace object */ 37 /******/ (() => { 38 /******/ // define __esModule on exports 39 /******/ __webpack_require__.r = (exports) => { 40 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 41 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 42 /******/ } 43 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 44 /******/ }; 45 /******/ })(); 46 /******/ 47 /************************************************************************/ 48 var __webpack_exports__ = {}; 49 // ESM COMPAT FLAG 50 __webpack_require__.r(__webpack_exports__); 51 52 // EXPORTS 53 __webpack_require__.d(__webpack_exports__, { 54 __unstableCreatePersistenceLayer: () => (/* binding */ __unstableCreatePersistenceLayer), 55 create: () => (/* reexport */ create) 56 }); 57 58 ;// CONCATENATED MODULE: external ["wp","apiFetch"] 59 const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"]; 60 var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject); 61 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/create/debounce-async.js 62 /** 63 * Performs a leading edge debounce of async functions. 64 * 65 * If three functions are throttled at the same time: 66 * - The first happens immediately. 67 * - The second is never called. 68 * - The third happens `delayMS` milliseconds after the first has resolved. 69 * 70 * This is distinct from `{ debounce } from @wordpress/compose` in that it 71 * waits for promise resolution. 72 * 73 * @param {Function} func A function that returns a promise. 74 * @param {number} delayMS A delay in milliseconds. 75 * 76 * @return {Function} A function that debounce whatever function is passed 77 * to it. 78 */ 79 function debounceAsync(func, delayMS) { 80 let timeoutId; 81 let activePromise; 82 return async function debounced(...args) { 83 // This is a leading edge debounce. If there's no promise or timeout 84 // in progress, call the debounced function immediately. 85 if (!activePromise && !timeoutId) { 86 return new Promise((resolve, reject) => { 87 // Keep a reference to the promise. 88 activePromise = func(...args).then((...thenArgs) => { 89 resolve(...thenArgs); 90 }).catch(error => { 91 reject(error); 92 }).finally(() => { 93 // As soon this promise is complete, clear the way for the 94 // next one to happen immediately. 95 activePromise = null; 96 }); 97 }); 98 } 99 if (activePromise) { 100 // Let any active promises finish before queuing the next request. 101 await activePromise; 102 } 103 104 // Clear any active timeouts, abandoning any requests that have 105 // been queued but not been made. 106 if (timeoutId) { 107 clearTimeout(timeoutId); 108 timeoutId = null; 109 } 110 111 // Trigger any trailing edge calls to the function. 112 return new Promise((resolve, reject) => { 113 // Schedule the next request but with a delay. 114 timeoutId = setTimeout(() => { 115 activePromise = func(...args).then((...thenArgs) => { 116 resolve(...thenArgs); 117 }).catch(error => { 118 reject(error); 119 }).finally(() => { 120 // As soon this promise is complete, clear the way for the 121 // next one to happen immediately. 122 activePromise = null; 123 timeoutId = null; 124 }); 125 }, delayMS); 126 }); 127 }; 128 } 129 130 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/create/index.js 131 /** 132 * WordPress dependencies 133 */ 134 135 136 /** 137 * Internal dependencies 138 */ 139 140 const EMPTY_OBJECT = {}; 141 const localStorage = window.localStorage; 142 143 /** 144 * Creates a persistence layer that stores data in WordPress user meta via the 145 * REST API. 146 * 147 * @param {Object} options 148 * @param {?Object} options.preloadedData Any persisted preferences data that should be preloaded. 149 * When set, the persistence layer will avoid fetching data 150 * from the REST API. 151 * @param {?string} options.localStorageRestoreKey The key to use for restoring the localStorage backup, used 152 * when the persistence layer calls `localStorage.getItem` or 153 * `localStorage.setItem`. 154 * @param {?number} options.requestDebounceMS Debounce requests to the API so that they only occur at 155 * minimum every `requestDebounceMS` milliseconds, and don't 156 * swamp the server. Defaults to 2500ms. 157 * 158 * @return {Object} A persistence layer for WordPress user meta. 159 */ 160 function create({ 161 preloadedData, 162 localStorageRestoreKey = 'WP_PREFERENCES_RESTORE_DATA', 163 requestDebounceMS = 2500 164 } = {}) { 165 let cache = preloadedData; 166 const debouncedApiFetch = debounceAsync((external_wp_apiFetch_default()), requestDebounceMS); 167 async function get() { 168 if (cache) { 169 return cache; 170 } 171 const user = await external_wp_apiFetch_default()({ 172 path: '/wp/v2/users/me?context=edit' 173 }); 174 const serverData = user?.meta?.persisted_preferences; 175 const localData = JSON.parse(localStorage.getItem(localStorageRestoreKey)); 176 177 // Date parse returns NaN for invalid input. Coerce anything invalid 178 // into a conveniently comparable zero. 179 const serverTimestamp = Date.parse(serverData?._modified) || 0; 180 const localTimestamp = Date.parse(localData?._modified) || 0; 181 182 // Prefer server data if it exists and is more recent. 183 // Otherwise fallback to localStorage data. 184 if (serverData && serverTimestamp >= localTimestamp) { 185 cache = serverData; 186 } else if (localData) { 187 cache = localData; 188 } else { 189 cache = EMPTY_OBJECT; 190 } 191 return cache; 192 } 193 function set(newData) { 194 const dataWithTimestamp = { 195 ...newData, 196 _modified: new Date().toISOString() 197 }; 198 cache = dataWithTimestamp; 199 200 // Store data in local storage as a fallback. If for some reason the 201 // api request does not complete or becomes unavailable, this data 202 // can be used to restore preferences. 203 localStorage.setItem(localStorageRestoreKey, JSON.stringify(dataWithTimestamp)); 204 205 // The user meta endpoint seems susceptible to errors when consecutive 206 // requests are made in quick succession. Ensure there's a gap between 207 // any consecutive requests. 208 // 209 // Catch and do nothing with errors from the REST API. 210 debouncedApiFetch({ 211 path: '/wp/v2/users/me', 212 method: 'PUT', 213 // `keepalive` will still send the request in the background, 214 // even when a browser unload event might interrupt it. 215 // This should hopefully make things more resilient. 216 // This does have a size limit of 64kb, but the data is usually 217 // much less. 218 keepalive: true, 219 data: { 220 meta: { 221 persisted_preferences: dataWithTimestamp 222 } 223 } 224 }).catch(() => {}); 225 } 226 return { 227 get, 228 set 229 }; 230 } 231 232 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/legacy-local-storage-data/move-feature-preferences.js 233 /** 234 * Move the 'features' object in local storage from the sourceStoreName to the 235 * preferences store data structure. 236 * 237 * Previously, editors used a data structure like this for feature preferences: 238 * ```js 239 * { 240 * 'core/edit-post': { 241 * preferences: { 242 * features; { 243 * topToolbar: true, 244 * // ... other boolean 'feature' preferences 245 * }, 246 * }, 247 * }, 248 * } 249 * ``` 250 * 251 * And for a while these feature preferences lived in the interface package: 252 * ```js 253 * { 254 * 'core/interface': { 255 * preferences: { 256 * features: { 257 * 'core/edit-post': { 258 * topToolbar: true 259 * } 260 * } 261 * } 262 * } 263 * } 264 * ``` 265 * 266 * In the preferences store, 'features' aren't considered special, they're 267 * merged to the root level of the scope along with other preferences: 268 * ```js 269 * { 270 * 'core/preferences': { 271 * preferences: { 272 * 'core/edit-post': { 273 * topToolbar: true, 274 * // ... any other preferences. 275 * } 276 * } 277 * } 278 * } 279 * ``` 280 * 281 * This function handles moving from either the source store or the interface 282 * store to the preferences data structure. 283 * 284 * @param {Object} state The state before migration. 285 * @param {string} sourceStoreName The name of the store that has persisted 286 * preferences to migrate to the preferences 287 * package. 288 * @return {Object} The migrated state 289 */ 290 function moveFeaturePreferences(state, sourceStoreName) { 291 const preferencesStoreName = 'core/preferences'; 292 const interfaceStoreName = 'core/interface'; 293 294 // Features most recently (and briefly) lived in the interface package. 295 // If data exists there, prioritize using that for the migration. If not 296 // also check the original package as the user may have updated from an 297 // older block editor version. 298 const interfaceFeatures = state?.[interfaceStoreName]?.preferences?.features?.[sourceStoreName]; 299 const sourceFeatures = state?.[sourceStoreName]?.preferences?.features; 300 const featuresToMigrate = interfaceFeatures ? interfaceFeatures : sourceFeatures; 301 if (!featuresToMigrate) { 302 return state; 303 } 304 const existingPreferences = state?.[preferencesStoreName]?.preferences; 305 306 // Avoid migrating features again if they've previously been migrated. 307 if (existingPreferences?.[sourceStoreName]) { 308 return state; 309 } 310 let updatedInterfaceState; 311 if (interfaceFeatures) { 312 const otherInterfaceState = state?.[interfaceStoreName]; 313 const otherInterfaceScopes = state?.[interfaceStoreName]?.preferences?.features; 314 updatedInterfaceState = { 315 [interfaceStoreName]: { 316 ...otherInterfaceState, 317 preferences: { 318 features: { 319 ...otherInterfaceScopes, 320 [sourceStoreName]: undefined 321 } 322 } 323 } 324 }; 325 } 326 let updatedSourceState; 327 if (sourceFeatures) { 328 const otherSourceState = state?.[sourceStoreName]; 329 const sourcePreferences = state?.[sourceStoreName]?.preferences; 330 updatedSourceState = { 331 [sourceStoreName]: { 332 ...otherSourceState, 333 preferences: { 334 ...sourcePreferences, 335 features: undefined 336 } 337 } 338 }; 339 } 340 341 // Set the feature values in the interface store, the features 342 // object is keyed by 'scope', which matches the store name for 343 // the source. 344 return { 345 ...state, 346 [preferencesStoreName]: { 347 preferences: { 348 ...existingPreferences, 349 [sourceStoreName]: featuresToMigrate 350 } 351 }, 352 ...updatedInterfaceState, 353 ...updatedSourceState 354 }; 355 } 356 357 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/legacy-local-storage-data/move-third-party-feature-preferences.js 358 /** 359 * The interface package previously had a public API that could be used by 360 * plugins to set persisted boolean 'feature' preferences. 361 * 362 * While usage was likely non-existent or very small, this function ensures 363 * those are migrated to the preferences data structure. The interface 364 * package's APIs have now been deprecated and use the preferences store. 365 * 366 * This will convert data that looks like this: 367 * ```js 368 * { 369 * 'core/interface': { 370 * preferences: { 371 * features: { 372 * 'my-plugin': { 373 * myPluginFeature: true 374 * } 375 * } 376 * } 377 * } 378 * } 379 * ``` 380 * 381 * To this: 382 * ```js 383 * * { 384 * 'core/preferences': { 385 * preferences: { 386 * 'my-plugin': { 387 * myPluginFeature: true 388 * } 389 * } 390 * } 391 * } 392 * ``` 393 * 394 * @param {Object} state The local storage state 395 * 396 * @return {Object} The state with third party preferences moved to the 397 * preferences data structure. 398 */ 399 function moveThirdPartyFeaturePreferencesToPreferences(state) { 400 const interfaceStoreName = 'core/interface'; 401 const preferencesStoreName = 'core/preferences'; 402 const interfaceScopes = state?.[interfaceStoreName]?.preferences?.features; 403 const interfaceScopeKeys = interfaceScopes ? Object.keys(interfaceScopes) : []; 404 if (!interfaceScopeKeys?.length) { 405 return state; 406 } 407 return interfaceScopeKeys.reduce(function (convertedState, scope) { 408 if (scope.startsWith('core')) { 409 return convertedState; 410 } 411 const featuresToMigrate = interfaceScopes?.[scope]; 412 if (!featuresToMigrate) { 413 return convertedState; 414 } 415 const existingMigratedData = convertedState?.[preferencesStoreName]?.preferences?.[scope]; 416 if (existingMigratedData) { 417 return convertedState; 418 } 419 const otherPreferencesScopes = convertedState?.[preferencesStoreName]?.preferences; 420 const otherInterfaceState = convertedState?.[interfaceStoreName]; 421 const otherInterfaceScopes = convertedState?.[interfaceStoreName]?.preferences?.features; 422 return { 423 ...convertedState, 424 [preferencesStoreName]: { 425 preferences: { 426 ...otherPreferencesScopes, 427 [scope]: featuresToMigrate 428 } 429 }, 430 [interfaceStoreName]: { 431 ...otherInterfaceState, 432 preferences: { 433 features: { 434 ...otherInterfaceScopes, 435 [scope]: undefined 436 } 437 } 438 } 439 }; 440 }, state); 441 } 442 443 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/legacy-local-storage-data/move-individual-preference.js 444 const identity = arg => arg; 445 446 /** 447 * Migrates an individual item inside the `preferences` object for a package's store. 448 * 449 * Previously, some packages had individual 'preferences' of any data type, and many used 450 * complex nested data structures. For example: 451 * ```js 452 * { 453 * 'core/edit-post': { 454 * preferences: { 455 * panels: { 456 * publish: { 457 * opened: true, 458 * enabled: true, 459 * } 460 * }, 461 * // ...other preferences. 462 * }, 463 * }, 464 * } 465 * 466 * This function supports moving an individual preference like 'panels' above into the 467 * preferences package data structure. 468 * 469 * It supports moving a preference to a particular scope in the preferences store and 470 * optionally converting the data using a `convert` function. 471 * 472 * ``` 473 * 474 * @param {Object} state The original state. 475 * @param {Object} migrate An options object that contains details of the migration. 476 * @param {string} migrate.from The name of the store to migrate from. 477 * @param {string} migrate.to The scope in the preferences store to migrate to. 478 * @param {string} key The key in the preferences object to migrate. 479 * @param {?Function} convert A function that converts preferences from one format to another. 480 */ 481 function moveIndividualPreferenceToPreferences(state, { 482 from: sourceStoreName, 483 to: scope 484 }, key, convert = identity) { 485 const preferencesStoreName = 'core/preferences'; 486 const sourcePreference = state?.[sourceStoreName]?.preferences?.[key]; 487 488 // There's nothing to migrate, exit early. 489 if (sourcePreference === undefined) { 490 return state; 491 } 492 const targetPreference = state?.[preferencesStoreName]?.preferences?.[scope]?.[key]; 493 494 // There's existing data at the target, so don't overwrite it, exit early. 495 if (targetPreference) { 496 return state; 497 } 498 const otherScopes = state?.[preferencesStoreName]?.preferences; 499 const otherPreferences = state?.[preferencesStoreName]?.preferences?.[scope]; 500 const otherSourceState = state?.[sourceStoreName]; 501 const allSourcePreferences = state?.[sourceStoreName]?.preferences; 502 503 // Pass an object with the key and value as this allows the convert 504 // function to convert to a data structure that has different keys. 505 const convertedPreferences = convert({ 506 [key]: sourcePreference 507 }); 508 return { 509 ...state, 510 [preferencesStoreName]: { 511 preferences: { 512 ...otherScopes, 513 [scope]: { 514 ...otherPreferences, 515 ...convertedPreferences 516 } 517 } 518 }, 519 [sourceStoreName]: { 520 ...otherSourceState, 521 preferences: { 522 ...allSourcePreferences, 523 [key]: undefined 524 } 525 } 526 }; 527 } 528 529 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/legacy-local-storage-data/move-interface-enable-items.js 530 /** 531 * Migrates interface 'enableItems' data to the preferences store. 532 * 533 * The interface package stores this data in this format: 534 * ```js 535 * { 536 * enableItems: { 537 * singleEnableItems: { 538 * complementaryArea: { 539 * 'core/edit-post': 'edit-post/document', 540 * 'core/edit-site': 'edit-site/global-styles', 541 * } 542 * }, 543 * multipleEnableItems: { 544 * pinnedItems: { 545 * 'core/edit-post': { 546 * 'plugin-1': true, 547 * }, 548 * 'core/edit-site': { 549 * 'plugin-2': true, 550 * }, 551 * }, 552 * } 553 * } 554 * } 555 * ``` 556 * 557 * and it should be converted it to: 558 * ```js 559 * { 560 * 'core/edit-post': { 561 * complementaryArea: 'edit-post/document', 562 * pinnedItems: { 563 * 'plugin-1': true, 564 * }, 565 * }, 566 * 'core/edit-site': { 567 * complementaryArea: 'edit-site/global-styles', 568 * pinnedItems: { 569 * 'plugin-2': true, 570 * }, 571 * }, 572 * } 573 * ``` 574 * 575 * @param {Object} state The local storage state. 576 */ 577 function moveInterfaceEnableItems(state) { 578 var _state$preferencesSto, _sourceEnableItems$si, _sourceEnableItems$mu; 579 const interfaceStoreName = 'core/interface'; 580 const preferencesStoreName = 'core/preferences'; 581 const sourceEnableItems = state?.[interfaceStoreName]?.enableItems; 582 583 // There's nothing to migrate, exit early. 584 if (!sourceEnableItems) { 585 return state; 586 } 587 const allPreferences = (_state$preferencesSto = state?.[preferencesStoreName]?.preferences) !== null && _state$preferencesSto !== void 0 ? _state$preferencesSto : {}; 588 589 // First convert complementaryAreas into the right format. 590 // Use the existing preferences as the accumulator so that the data is 591 // merged. 592 const sourceComplementaryAreas = (_sourceEnableItems$si = sourceEnableItems?.singleEnableItems?.complementaryArea) !== null && _sourceEnableItems$si !== void 0 ? _sourceEnableItems$si : {}; 593 const preferencesWithConvertedComplementaryAreas = Object.keys(sourceComplementaryAreas).reduce((accumulator, scope) => { 594 const data = sourceComplementaryAreas[scope]; 595 596 // Don't overwrite any existing data in the preferences store. 597 if (accumulator?.[scope]?.complementaryArea) { 598 return accumulator; 599 } 600 return { 601 ...accumulator, 602 [scope]: { 603 ...accumulator[scope], 604 complementaryArea: data 605 } 606 }; 607 }, allPreferences); 608 609 // Next feed the converted complementary areas back into a reducer that 610 // converts the pinned items, resulting in the fully migrated data. 611 const sourcePinnedItems = (_sourceEnableItems$mu = sourceEnableItems?.multipleEnableItems?.pinnedItems) !== null && _sourceEnableItems$mu !== void 0 ? _sourceEnableItems$mu : {}; 612 const allConvertedData = Object.keys(sourcePinnedItems).reduce((accumulator, scope) => { 613 const data = sourcePinnedItems[scope]; 614 // Don't overwrite any existing data in the preferences store. 615 if (accumulator?.[scope]?.pinnedItems) { 616 return accumulator; 617 } 618 return { 619 ...accumulator, 620 [scope]: { 621 ...accumulator[scope], 622 pinnedItems: data 623 } 624 }; 625 }, preferencesWithConvertedComplementaryAreas); 626 const otherInterfaceItems = state[interfaceStoreName]; 627 return { 628 ...state, 629 [preferencesStoreName]: { 630 preferences: allConvertedData 631 }, 632 [interfaceStoreName]: { 633 ...otherInterfaceItems, 634 enableItems: undefined 635 } 636 }; 637 } 638 639 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/legacy-local-storage-data/convert-edit-post-panels.js 640 /** 641 * Convert the post editor's panels state from: 642 * ``` 643 * { 644 * panels: { 645 * tags: { 646 * enabled: true, 647 * opened: true, 648 * }, 649 * permalinks: { 650 * enabled: false, 651 * opened: false, 652 * }, 653 * }, 654 * } 655 * ``` 656 * 657 * to a new, more concise data structure: 658 * { 659 * inactivePanels: [ 660 * 'permalinks', 661 * ], 662 * openPanels: [ 663 * 'tags', 664 * ], 665 * } 666 * 667 * @param {Object} preferences A preferences object. 668 * 669 * @return {Object} The converted data. 670 */ 671 function convertEditPostPanels(preferences) { 672 var _preferences$panels; 673 const panels = (_preferences$panels = preferences?.panels) !== null && _preferences$panels !== void 0 ? _preferences$panels : {}; 674 return Object.keys(panels).reduce((convertedData, panelName) => { 675 const panel = panels[panelName]; 676 if (panel?.enabled === false) { 677 convertedData.inactivePanels.push(panelName); 678 } 679 if (panel?.opened === true) { 680 convertedData.openPanels.push(panelName); 681 } 682 return convertedData; 683 }, { 684 inactivePanels: [], 685 openPanels: [] 686 }); 687 } 688 689 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/legacy-local-storage-data/index.js 690 /** 691 * Internal dependencies 692 */ 693 694 695 696 697 698 699 /** 700 * Gets the legacy local storage data for a given user. 701 * 702 * @param {string | number} userId The user id. 703 * 704 * @return {Object | null} The local storage data. 705 */ 706 function getLegacyData(userId) { 707 const key = `WP_DATA_USER_$userId}`; 708 const unparsedData = window.localStorage.getItem(key); 709 return JSON.parse(unparsedData); 710 } 711 712 /** 713 * Converts data from the old `@wordpress/data` package format. 714 * 715 * @param {Object | null | undefined} data The legacy data in its original format. 716 * 717 * @return {Object | undefined} The converted data or `undefined` if there was 718 * nothing to convert. 719 */ 720 function convertLegacyData(data) { 721 if (!data) { 722 return; 723 } 724 725 // Move boolean feature preferences from each editor into the 726 // preferences store data structure. 727 data = moveFeaturePreferences(data, 'core/edit-widgets'); 728 data = moveFeaturePreferences(data, 'core/customize-widgets'); 729 data = moveFeaturePreferences(data, 'core/edit-post'); 730 data = moveFeaturePreferences(data, 'core/edit-site'); 731 732 // Move third party boolean feature preferences from the interface package 733 // to the preferences store data structure. 734 data = moveThirdPartyFeaturePreferencesToPreferences(data); 735 736 // Move and convert the interface store's `enableItems` data into the 737 // preferences data structure. 738 data = moveInterfaceEnableItems(data); 739 740 // Move individual ad-hoc preferences from various packages into the 741 // preferences store data structure. 742 data = moveIndividualPreferenceToPreferences(data, { 743 from: 'core/edit-post', 744 to: 'core/edit-post' 745 }, 'hiddenBlockTypes'); 746 data = moveIndividualPreferenceToPreferences(data, { 747 from: 'core/edit-post', 748 to: 'core/edit-post' 749 }, 'editorMode'); 750 data = moveIndividualPreferenceToPreferences(data, { 751 from: 'core/edit-post', 752 to: 'core/edit-post' 753 }, 'panels', convertEditPostPanels); 754 data = moveIndividualPreferenceToPreferences(data, { 755 from: 'core/editor', 756 to: 'core' 757 }, 'isPublishSidebarEnabled'); 758 data = moveIndividualPreferenceToPreferences(data, { 759 from: 'core/edit-post', 760 to: 'core' 761 }, 'isPublishSidebarEnabled'); 762 data = moveIndividualPreferenceToPreferences(data, { 763 from: 'core/edit-site', 764 to: 'core/edit-site' 765 }, 'editorMode'); 766 767 // The new system is only concerned with persisting 768 // 'core/preferences' preferences reducer, so only return that. 769 return data?.['core/preferences']?.preferences; 770 } 771 772 /** 773 * Gets the legacy local storage data for the given user and returns the 774 * data converted to the new format. 775 * 776 * @param {string | number} userId The user id. 777 * 778 * @return {Object | undefined} The converted data or undefined if no local 779 * storage data could be found. 780 */ 781 function convertLegacyLocalStorageData(userId) { 782 const data = getLegacyData(userId); 783 return convertLegacyData(data); 784 } 785 786 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/preferences-package-data/convert-complementary-areas.js 787 function convertComplementaryAreas(state) { 788 return Object.keys(state).reduce((stateAccumulator, scope) => { 789 const scopeData = state[scope]; 790 791 // If a complementary area is truthy, convert it to the `isComplementaryAreaVisible` boolean. 792 if (scopeData?.complementaryArea) { 793 const updatedScopeData = { 794 ...scopeData 795 }; 796 delete updatedScopeData.complementaryArea; 797 updatedScopeData.isComplementaryAreaVisible = true; 798 stateAccumulator[scope] = updatedScopeData; 799 return stateAccumulator; 800 } 801 return stateAccumulator; 802 }, state); 803 } 804 805 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/preferences-package-data/convert-editor-settings.js 806 /** 807 * Internal dependencies 808 */ 809 810 function convertEditorSettings(data) { 811 var _newData$coreEditPo, _newData$coreEditSi; 812 let newData = data; 813 const settingsToMoveToCore = ['allowRightClickOverrides', 'distractionFree', 'editorMode', 'fixedToolbar', 'focusMode', 'hiddenBlockTypes', 'inactivePanels', 'keepCaretInsideBlock', 'mostUsedBlocks', 'openPanels', 'showBlockBreadcrumbs', 'showIconLabels', 'showListViewByDefault', 'isPublishSidebarEnabled', 'isComplementaryAreaVisible', 'pinnedItems']; 814 settingsToMoveToCore.forEach(setting => { 815 if (data?.['core/edit-post']?.[setting] !== undefined) { 816 newData = { 817 ...newData, 818 core: { 819 ...newData?.core, 820 [setting]: data['core/edit-post'][setting] 821 } 822 }; 823 delete newData['core/edit-post'][setting]; 824 } 825 if (data?.['core/edit-site']?.[setting] !== undefined) { 826 delete newData['core/edit-site'][setting]; 827 } 828 }); 829 if (Object.keys((_newData$coreEditPo = newData?.['core/edit-post']) !== null && _newData$coreEditPo !== void 0 ? _newData$coreEditPo : {})?.length === 0) { 830 delete newData['core/edit-post']; 831 } 832 if (Object.keys((_newData$coreEditSi = newData?.['core/edit-site']) !== null && _newData$coreEditSi !== void 0 ? _newData$coreEditSi : {})?.length === 0) { 833 delete newData['core/edit-site']; 834 } 835 return newData; 836 } 837 838 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/migrations/preferences-package-data/index.js 839 /** 840 * Internal dependencies 841 */ 842 843 844 function convertPreferencesPackageData(data) { 845 let newData = convertComplementaryAreas(data); 846 newData = convertEditorSettings(newData); 847 return newData; 848 } 849 850 ;// CONCATENATED MODULE: ./node_modules/@wordpress/preferences-persistence/build-module/index.js 851 /** 852 * Internal dependencies 853 */ 854 855 856 857 858 859 /** 860 * Creates the persistence layer with preloaded data. 861 * 862 * It prioritizes any data from the server, but falls back first to localStorage 863 * restore data, and then to any legacy data. 864 * 865 * This function is used internally by WordPress in an inline script, so 866 * prefixed with `__unstable`. 867 * 868 * @param {Object} serverData Preferences data preloaded from the server. 869 * @param {string} userId The user id. 870 * 871 * @return {Object} The persistence layer initialized with the preloaded data. 872 */ 873 function __unstableCreatePersistenceLayer(serverData, userId) { 874 const localStorageRestoreKey = `WP_PREFERENCES_USER_$userId}`; 875 const localData = JSON.parse(window.localStorage.getItem(localStorageRestoreKey)); 876 877 // Date parse returns NaN for invalid input. Coerce anything invalid 878 // into a conveniently comparable zero. 879 const serverModified = Date.parse(serverData && serverData._modified) || 0; 880 const localModified = Date.parse(localData && localData._modified) || 0; 881 let preloadedData; 882 if (serverData && serverModified >= localModified) { 883 preloadedData = convertPreferencesPackageData(serverData); 884 } else if (localData) { 885 preloadedData = convertPreferencesPackageData(localData); 886 } else { 887 // Check if there is data in the legacy format from the old persistence system. 888 preloadedData = convertLegacyLocalStorageData(userId); 889 } 890 return create({ 891 preloadedData, 892 localStorageRestoreKey 893 }); 894 } 895 896 (window.wp = window.wp || {}).preferencesPersistence = __webpack_exports__; 897 /******/ })() 898 ;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Thu Nov 21 08:20:01 2024 | Cross-referenced by PHPXref |