plugin updates
This commit is contained in:
144
wp/wp-includes/js/dist/script-modules/a11y/index.js
vendored
Normal file
144
wp/wp-includes/js/dist/script-modules/a11y/index.js
vendored
Normal file
@@ -0,0 +1,144 @@
|
||||
/******/ // The require scope
|
||||
/******/ var __webpack_require__ = {};
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
|
||||
// EXPORTS
|
||||
__webpack_require__.d(__webpack_exports__, {
|
||||
m: () => (/* binding */ setup),
|
||||
L: () => (/* reexport */ speak)
|
||||
});
|
||||
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/shared/clear.js
|
||||
/**
|
||||
* Clears the a11y-speak-region elements and hides the explanatory text.
|
||||
*/
|
||||
function clear() {
|
||||
const regions = document.getElementsByClassName('a11y-speak-region');
|
||||
const introText = document.getElementById('a11y-speak-intro-text');
|
||||
for (let i = 0; i < regions.length; i++) {
|
||||
regions[i].textContent = '';
|
||||
}
|
||||
|
||||
// Make sure the explanatory text is hidden from assistive technologies.
|
||||
if (introText) {
|
||||
introText.setAttribute('hidden', 'hidden');
|
||||
}
|
||||
}
|
||||
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/shared/filter-message.js
|
||||
let previousMessage = '';
|
||||
|
||||
/**
|
||||
* Filter the message to be announced to the screenreader.
|
||||
*
|
||||
* @param {string} message The message to be announced.
|
||||
*
|
||||
* @return {string} The filtered message.
|
||||
*/
|
||||
function filterMessage(message) {
|
||||
/*
|
||||
* Strip HTML tags (if any) from the message string. Ideally, messages should
|
||||
* be simple strings, carefully crafted for specific use with A11ySpeak.
|
||||
* When re-using already existing strings this will ensure simple HTML to be
|
||||
* stripped out and replaced with a space. Browsers will collapse multiple
|
||||
* spaces natively.
|
||||
*/
|
||||
message = message.replace(/<[^<>]+>/g, ' ');
|
||||
|
||||
/*
|
||||
* Safari + VoiceOver don't announce repeated, identical strings. We use
|
||||
* a `no-break space` to force them to think identical strings are different.
|
||||
*/
|
||||
if (previousMessage === message) {
|
||||
message += '\u00A0';
|
||||
}
|
||||
previousMessage = message;
|
||||
return message;
|
||||
}
|
||||
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/shared/index.js
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Allows you to easily announce dynamic interface updates to screen readers using ARIA live regions.
|
||||
* This module is inspired by the `speak` function in `wp-a11y.js`.
|
||||
*
|
||||
* @param {string} message The message to be announced by assistive technologies.
|
||||
* @param {'polite'|'assertive'} [ariaLive] The politeness level for aria-live; default: 'polite'.
|
||||
*
|
||||
* @example
|
||||
* ```js
|
||||
* import { speak } from '@wordpress/a11y';
|
||||
*
|
||||
* // For polite messages that shouldn't interrupt what screen readers are currently announcing.
|
||||
* speak( 'The message you want to send to the ARIA live region' );
|
||||
*
|
||||
* // For assertive messages that should interrupt what screen readers are currently announcing.
|
||||
* speak( 'The message you want to send to the ARIA live region', 'assertive' );
|
||||
* ```
|
||||
*/
|
||||
function speak(message, ariaLive) {
|
||||
/*
|
||||
* Clear previous messages to allow repeated strings being read out and hide
|
||||
* the explanatory text from assistive technologies.
|
||||
*/
|
||||
clear();
|
||||
message = filterMessage(message);
|
||||
const introText = document.getElementById('a11y-speak-intro-text');
|
||||
const containerAssertive = document.getElementById('a11y-speak-assertive');
|
||||
const containerPolite = document.getElementById('a11y-speak-polite');
|
||||
if (containerAssertive && ariaLive === 'assertive') {
|
||||
containerAssertive.textContent = message;
|
||||
} else if (containerPolite) {
|
||||
containerPolite.textContent = message;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make the explanatory text available to assistive technologies by removing
|
||||
* the 'hidden' HTML attribute.
|
||||
*/
|
||||
if (introText) {
|
||||
introText.removeAttribute('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/module/index.js
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* This no-op function is exported to provide compatibility with the `wp-a11y` Script.
|
||||
*
|
||||
* Filters should inject the relevant HTML on page load instead of requiring setup.
|
||||
*/
|
||||
const setup = () => {};
|
||||
|
||||
var __webpack_exports__setup = __webpack_exports__.m;
|
||||
var __webpack_exports__speak = __webpack_exports__.L;
|
||||
export { __webpack_exports__setup as setup, __webpack_exports__speak as speak };
|
||||
1
wp/wp-includes/js/dist/script-modules/a11y/index.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/a11y/index.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
var e={d:(t,n)=>{for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{m:()=>a,L:()=>o});let n="";function o(e,t){!function(){const e=document.getElementsByClassName("a11y-speak-region"),t=document.getElementById("a11y-speak-intro-text");for(let t=0;t<e.length;t++)e[t].textContent="";t&&t.setAttribute("hidden","hidden")}(),e=function(e){return e=e.replace(/<[^<>]+>/g," "),n===e&&(e+=" "),n=e,e}(e);const o=document.getElementById("a11y-speak-intro-text"),a=document.getElementById("a11y-speak-assertive"),r=document.getElementById("a11y-speak-polite");a&&"assertive"===t?a.textContent=e:r&&(r.textContent=e),o&&o.removeAttribute("hidden")}const a=()=>{};var r=t.m,s=t.L;export{r as setup,s as speak};
|
||||
97
wp/wp-includes/js/dist/script-modules/block-library/file/view.js
vendored
Normal file
97
wp/wp-includes/js/dist/script-modules/block-library/file/view.js
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
|
||||
/******/ // The require scope
|
||||
/******/ var __webpack_require__ = {};
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
|
||||
;// CONCATENATED MODULE: external "@wordpress/interactivity"
|
||||
var x = (y) => {
|
||||
var x = {}; __webpack_require__.d(x, y); return x
|
||||
}
|
||||
var y = (x) => (() => (x))
|
||||
const interactivity_namespaceObject = x({ ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store) });
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-library/build-module/file/utils/index.js
|
||||
/**
|
||||
* Uses a combination of user agent matching and feature detection to determine whether
|
||||
* the current browser supports rendering PDFs inline.
|
||||
*
|
||||
* @return {boolean} Whether or not the browser supports inline PDFs.
|
||||
*/
|
||||
const browserSupportsPdfs = () => {
|
||||
// Most mobile devices include "Mobi" in their UA.
|
||||
if (window.navigator.userAgent.indexOf('Mobi') > -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Android tablets are the noteable exception.
|
||||
if (window.navigator.userAgent.indexOf('Android') > -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// iPad pretends to be a Mac.
|
||||
if (window.navigator.userAgent.indexOf('Macintosh') > -1 && window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// IE only supports PDFs when there's an ActiveX object available for it.
|
||||
if (!!(window.ActiveXObject || 'ActiveXObject' in window) && !(createActiveXObject('AcroPDF.PDF') || createActiveXObject('PDF.PdfCtrl'))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper function for creating ActiveX objects, catching any errors that are thrown
|
||||
* when it's generated.
|
||||
*
|
||||
* @param {string} type The name of the ActiveX object to create.
|
||||
* @return {window.ActiveXObject|undefined} The generated ActiveXObject, or null if it failed.
|
||||
*/
|
||||
const createActiveXObject = type => {
|
||||
let ax;
|
||||
try {
|
||||
ax = new window.ActiveXObject(type);
|
||||
} catch (e) {
|
||||
ax = undefined;
|
||||
}
|
||||
return ax;
|
||||
};
|
||||
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-library/build-module/file/view.js
|
||||
/**
|
||||
* WordPress dependencies
|
||||
*/
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
|
||||
(0,interactivity_namespaceObject.store)('core/file', {
|
||||
state: {
|
||||
get hasPdfPreview() {
|
||||
return browserSupportsPdfs();
|
||||
}
|
||||
}
|
||||
}, {
|
||||
lock: true
|
||||
});
|
||||
|
||||
1
wp/wp-includes/js/dist/script-modules/block-library/file/view.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/block-library/file/view.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import*as e from"@wordpress/interactivity";var t={d:(e,o)=>{for(var r in o)t.o(o,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:o[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const o=(e=>{var o={};return t.d(o,e),o})({store:()=>e.store}),r=e=>{let t;try{t=new window.ActiveXObject(e)}catch(e){t=void 0}return t};(0,o.store)("core/file",{state:{get hasPdfPreview(){return!(window.navigator.userAgent.indexOf("Mobi")>-1||window.navigator.userAgent.indexOf("Android")>-1||window.navigator.userAgent.indexOf("Macintosh")>-1&&window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>2||(window.ActiveXObject||"ActiveXObject"in window)&&!r("AcroPDF.PDF")&&!r("PDF.PdfCtrl"))}}},{lock:!0});
|
||||
440
wp/wp-includes/js/dist/script-modules/block-library/image/view.js
vendored
Normal file
440
wp/wp-includes/js/dist/script-modules/block-library/image/view.js
vendored
Normal file
@@ -0,0 +1,440 @@
|
||||
import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
|
||||
/******/ // The require scope
|
||||
/******/ var __webpack_require__ = {};
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
|
||||
;// CONCATENATED MODULE: external "@wordpress/interactivity"
|
||||
var x = (y) => {
|
||||
var x = {}; __webpack_require__.d(x, y); return x
|
||||
}
|
||||
var y = (x) => (() => (x))
|
||||
const interactivity_namespaceObject = x({ ["getContext"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getContext), ["getElement"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getElement), ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store) });
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-library/build-module/image/view.js
|
||||
/**
|
||||
* WordPress dependencies
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Tracks whether user is touching screen; used to differentiate behavior for
|
||||
* touch and mouse input.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
let isTouching = false;
|
||||
|
||||
/**
|
||||
* Tracks the last time the screen was touched; used to differentiate behavior
|
||||
* for touch and mouse input.
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
let lastTouchTime = 0;
|
||||
const {
|
||||
state,
|
||||
actions,
|
||||
callbacks
|
||||
} = (0,interactivity_namespaceObject.store)('core/image', {
|
||||
state: {
|
||||
currentImageId: null,
|
||||
get currentImage() {
|
||||
return state.metadata[state.currentImageId];
|
||||
},
|
||||
get overlayOpened() {
|
||||
return state.currentImageId !== null;
|
||||
},
|
||||
get roleAttribute() {
|
||||
return state.overlayOpened ? 'dialog' : null;
|
||||
},
|
||||
get ariaModal() {
|
||||
return state.overlayOpened ? 'true' : null;
|
||||
},
|
||||
get enlargedSrc() {
|
||||
return state.currentImage.uploadedSrc || 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
|
||||
},
|
||||
get figureStyles() {
|
||||
return state.overlayOpened && `${state.currentImage.figureStyles?.replace(/margin[^;]*;?/g, '')};`;
|
||||
},
|
||||
get imgStyles() {
|
||||
return state.overlayOpened && `${state.currentImage.imgStyles?.replace(/;$/, '')}; object-fit:cover;`;
|
||||
},
|
||||
get imageButtonRight() {
|
||||
const {
|
||||
imageId
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
return state.metadata[imageId].imageButtonRight;
|
||||
},
|
||||
get imageButtonTop() {
|
||||
const {
|
||||
imageId
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
return state.metadata[imageId].imageButtonTop;
|
||||
},
|
||||
get isContentHidden() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
return state.overlayEnabled && state.currentImageId === ctx.imageId;
|
||||
},
|
||||
get isContentVisible() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
return !state.overlayEnabled && state.currentImageId === ctx.imageId;
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
showLightbox() {
|
||||
const {
|
||||
imageId
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
|
||||
// Bails out if the image has not loaded yet.
|
||||
if (!state.metadata[imageId].imageRef?.complete) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Stores the positions of the scroll to fix it until the overlay is
|
||||
// closed.
|
||||
state.scrollTopReset = document.documentElement.scrollTop;
|
||||
state.scrollLeftReset = document.documentElement.scrollLeft;
|
||||
|
||||
// Sets the current expanded image in the state and enables the overlay.
|
||||
state.overlayEnabled = true;
|
||||
state.currentImageId = imageId;
|
||||
|
||||
// Computes the styles of the overlay for the animation.
|
||||
callbacks.setOverlayStyles();
|
||||
},
|
||||
hideLightbox() {
|
||||
if (state.overlayEnabled) {
|
||||
// Starts the overlay closing animation. The showClosingAnimation
|
||||
// class is used to avoid showing it on page load.
|
||||
state.showClosingAnimation = true;
|
||||
state.overlayEnabled = false;
|
||||
|
||||
// Waits until the close animation has completed before allowing a
|
||||
// user to scroll again. The duration of this animation is defined in
|
||||
// the `styles.scss` file, but in any case we should wait a few
|
||||
// milliseconds longer than the duration, otherwise a user may scroll
|
||||
// too soon and cause the animation to look sloppy.
|
||||
setTimeout(function () {
|
||||
// Delays before changing the focus. Otherwise the focus ring will
|
||||
// appear on Firefox before the image has finished animating, which
|
||||
// looks broken.
|
||||
state.currentImage.buttonRef.focus({
|
||||
preventScroll: true
|
||||
});
|
||||
|
||||
// Resets the current image id to mark the overlay as closed.
|
||||
state.currentImageId = null;
|
||||
}, 450);
|
||||
}
|
||||
},
|
||||
handleKeydown(event) {
|
||||
if (state.overlayEnabled) {
|
||||
// Focuses the close button when the user presses the tab key.
|
||||
if (event.key === 'Tab') {
|
||||
event.preventDefault();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
ref.querySelector('button').focus();
|
||||
}
|
||||
// Closes the lightbox when the user presses the escape key.
|
||||
if (event.key === 'Escape') {
|
||||
actions.hideLightbox();
|
||||
}
|
||||
}
|
||||
},
|
||||
handleTouchMove(event) {
|
||||
// On mobile devices, prevents triggering the scroll event because
|
||||
// otherwise the page jumps around when it resets the scroll position.
|
||||
// This also means that closing the lightbox requires that a user
|
||||
// perform a simple tap. This may be changed in the future if there is a
|
||||
// better alternative to override or reset the scroll position during
|
||||
// swipe actions.
|
||||
if (state.overlayEnabled) {
|
||||
event.preventDefault();
|
||||
}
|
||||
},
|
||||
handleTouchStart() {
|
||||
isTouching = true;
|
||||
},
|
||||
handleTouchEnd() {
|
||||
// Waits a few milliseconds before resetting to ensure that pinch to
|
||||
// zoom works consistently on mobile devices when the lightbox is open.
|
||||
lastTouchTime = Date.now();
|
||||
isTouching = false;
|
||||
},
|
||||
handleScroll() {
|
||||
// Prevents scrolling behaviors that trigger content shift while the
|
||||
// lightbox is open. It would be better to accomplish through CSS alone,
|
||||
// but using overflow: hidden is currently the only way to do so and
|
||||
// that causes a layout to shift and prevents the zoom animation from
|
||||
// working in some cases because it's not possible to account for the
|
||||
// layout shift when doing the animation calculations. Instead, it uses
|
||||
// JavaScript to prevent and reset the scrolling behavior.
|
||||
if (state.overlayOpened) {
|
||||
// Avoids overriding the scroll behavior on mobile devices because
|
||||
// doing so breaks the pinch to zoom functionality, and users should
|
||||
// be able to zoom in further on the high-res image.
|
||||
if (!isTouching && Date.now() - lastTouchTime > 450) {
|
||||
// It doesn't rely on `event.preventDefault()` to prevent scrolling
|
||||
// because the scroll event can't be canceled, so it resets the
|
||||
// position instead.
|
||||
window.scrollTo(state.scrollLeftReset, state.scrollTopReset);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
callbacks: {
|
||||
setOverlayStyles() {
|
||||
if (!state.overlayEnabled) {
|
||||
return;
|
||||
}
|
||||
let {
|
||||
naturalWidth,
|
||||
naturalHeight,
|
||||
offsetWidth: originalWidth,
|
||||
offsetHeight: originalHeight
|
||||
} = state.currentImage.imageRef;
|
||||
let {
|
||||
x: screenPosX,
|
||||
y: screenPosY
|
||||
} = state.currentImage.imageRef.getBoundingClientRect();
|
||||
|
||||
// Natural ratio of the image clicked to open the lightbox.
|
||||
const naturalRatio = naturalWidth / naturalHeight;
|
||||
// Original ratio of the image clicked to open the lightbox.
|
||||
let originalRatio = originalWidth / originalHeight;
|
||||
|
||||
// If it has object-fit: contain, recalculates the original sizes
|
||||
// and the screen position without the blank spaces.
|
||||
if (state.currentImage.scaleAttr === 'contain') {
|
||||
if (naturalRatio > originalRatio) {
|
||||
const heightWithoutSpace = originalWidth / naturalRatio;
|
||||
// Recalculates screen position without the top space.
|
||||
screenPosY += (originalHeight - heightWithoutSpace) / 2;
|
||||
originalHeight = heightWithoutSpace;
|
||||
} else {
|
||||
const widthWithoutSpace = originalHeight * naturalRatio;
|
||||
// Recalculates screen position without the left space.
|
||||
screenPosX += (originalWidth - widthWithoutSpace) / 2;
|
||||
originalWidth = widthWithoutSpace;
|
||||
}
|
||||
}
|
||||
originalRatio = originalWidth / originalHeight;
|
||||
|
||||
// Typically, it uses the image's full-sized dimensions. If those
|
||||
// dimensions have not been set (i.e. an external image with only one
|
||||
// size), the image's dimensions in the lightbox are the same
|
||||
// as those of the image in the content.
|
||||
let imgMaxWidth = parseFloat(state.currentImage.targetWidth !== 'none' ? state.currentImage.targetWidth : naturalWidth);
|
||||
let imgMaxHeight = parseFloat(state.currentImage.targetHeight !== 'none' ? state.currentImage.targetHeight : naturalHeight);
|
||||
|
||||
// Ratio of the biggest image stored in the database.
|
||||
let imgRatio = imgMaxWidth / imgMaxHeight;
|
||||
let containerMaxWidth = imgMaxWidth;
|
||||
let containerMaxHeight = imgMaxHeight;
|
||||
let containerWidth = imgMaxWidth;
|
||||
let containerHeight = imgMaxHeight;
|
||||
|
||||
// Checks if the target image has a different ratio than the original
|
||||
// one (thumbnail). Recalculates the width and height.
|
||||
if (naturalRatio.toFixed(2) !== imgRatio.toFixed(2)) {
|
||||
if (naturalRatio > imgRatio) {
|
||||
// If the width is reached before the height, it keeps the maxWidth
|
||||
// and recalculates the height unless the difference between the
|
||||
// maxHeight and the reducedHeight is higher than the maxWidth,
|
||||
// where it keeps the reducedHeight and recalculate the width.
|
||||
const reducedHeight = imgMaxWidth / naturalRatio;
|
||||
if (imgMaxHeight - reducedHeight > imgMaxWidth) {
|
||||
imgMaxHeight = reducedHeight;
|
||||
imgMaxWidth = reducedHeight * naturalRatio;
|
||||
} else {
|
||||
imgMaxHeight = imgMaxWidth / naturalRatio;
|
||||
}
|
||||
} else {
|
||||
// If the height is reached before the width, it keeps the maxHeight
|
||||
// and recalculate the width unlesss the difference between the
|
||||
// maxWidth and the reducedWidth is higher than the maxHeight, where
|
||||
// it keeps the reducedWidth and recalculate the height.
|
||||
const reducedWidth = imgMaxHeight * naturalRatio;
|
||||
if (imgMaxWidth - reducedWidth > imgMaxHeight) {
|
||||
imgMaxWidth = reducedWidth;
|
||||
imgMaxHeight = reducedWidth / naturalRatio;
|
||||
} else {
|
||||
imgMaxWidth = imgMaxHeight * naturalRatio;
|
||||
}
|
||||
}
|
||||
containerWidth = imgMaxWidth;
|
||||
containerHeight = imgMaxHeight;
|
||||
imgRatio = imgMaxWidth / imgMaxHeight;
|
||||
|
||||
// Calculates the max size of the container.
|
||||
if (originalRatio > imgRatio) {
|
||||
containerMaxWidth = imgMaxWidth;
|
||||
containerMaxHeight = containerMaxWidth / originalRatio;
|
||||
} else {
|
||||
containerMaxHeight = imgMaxHeight;
|
||||
containerMaxWidth = containerMaxHeight * originalRatio;
|
||||
}
|
||||
}
|
||||
|
||||
// If the image has been pixelated on purpose, it keeps that size.
|
||||
if (originalWidth > containerWidth || originalHeight > containerHeight) {
|
||||
containerWidth = originalWidth;
|
||||
containerHeight = originalHeight;
|
||||
}
|
||||
|
||||
// Calculates the final lightbox image size and the scale factor.
|
||||
// MaxWidth is either the window container (accounting for padding) or
|
||||
// the image resolution.
|
||||
let horizontalPadding = 0;
|
||||
if (window.innerWidth > 480) {
|
||||
horizontalPadding = 80;
|
||||
} else if (window.innerWidth > 1920) {
|
||||
horizontalPadding = 160;
|
||||
}
|
||||
const verticalPadding = 80;
|
||||
const targetMaxWidth = Math.min(window.innerWidth - horizontalPadding, containerWidth);
|
||||
const targetMaxHeight = Math.min(window.innerHeight - verticalPadding, containerHeight);
|
||||
const targetContainerRatio = targetMaxWidth / targetMaxHeight;
|
||||
if (originalRatio > targetContainerRatio) {
|
||||
// If targetMaxWidth is reached before targetMaxHeight.
|
||||
containerWidth = targetMaxWidth;
|
||||
containerHeight = containerWidth / originalRatio;
|
||||
} else {
|
||||
// If targetMaxHeight is reached before targetMaxWidth.
|
||||
containerHeight = targetMaxHeight;
|
||||
containerWidth = containerHeight * originalRatio;
|
||||
}
|
||||
const containerScale = originalWidth / containerWidth;
|
||||
const lightboxImgWidth = imgMaxWidth * (containerWidth / containerMaxWidth);
|
||||
const lightboxImgHeight = imgMaxHeight * (containerHeight / containerMaxHeight);
|
||||
|
||||
// As of this writing, using the calculations above will render the
|
||||
// lightbox with a small, erroneous whitespace on the left side of the
|
||||
// image in iOS Safari, perhaps due to an inconsistency in how browsers
|
||||
// handle absolute positioning and CSS transformation. In any case,
|
||||
// adding 1 pixel to the container width and height solves the problem,
|
||||
// though this can be removed if the issue is fixed in the future.
|
||||
state.overlayStyles = `
|
||||
:root {
|
||||
--wp--lightbox-initial-top-position: ${screenPosY}px;
|
||||
--wp--lightbox-initial-left-position: ${screenPosX}px;
|
||||
--wp--lightbox-container-width: ${containerWidth + 1}px;
|
||||
--wp--lightbox-container-height: ${containerHeight + 1}px;
|
||||
--wp--lightbox-image-width: ${lightboxImgWidth}px;
|
||||
--wp--lightbox-image-height: ${lightboxImgHeight}px;
|
||||
--wp--lightbox-scale: ${containerScale};
|
||||
--wp--lightbox-scrollbar-width: ${window.innerWidth - document.documentElement.clientWidth}px;
|
||||
}
|
||||
`;
|
||||
},
|
||||
setButtonStyles() {
|
||||
const {
|
||||
imageId
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
state.metadata[imageId].imageRef = ref;
|
||||
state.metadata[imageId].currentSrc = ref.currentSrc;
|
||||
const {
|
||||
naturalWidth,
|
||||
naturalHeight,
|
||||
offsetWidth,
|
||||
offsetHeight
|
||||
} = ref;
|
||||
|
||||
// If the image isn't loaded yet, it can't calculate where the button
|
||||
// should be.
|
||||
if (naturalWidth === 0 || naturalHeight === 0) {
|
||||
return;
|
||||
}
|
||||
const figure = ref.parentElement;
|
||||
const figureWidth = ref.parentElement.clientWidth;
|
||||
|
||||
// It needs special handling for the height because a caption will cause
|
||||
// the figure to be taller than the image, which means it needs to
|
||||
// account for that when calculating the placement of the button in the
|
||||
// top right corner of the image.
|
||||
let figureHeight = ref.parentElement.clientHeight;
|
||||
const caption = figure.querySelector('figcaption');
|
||||
if (caption) {
|
||||
const captionComputedStyle = window.getComputedStyle(caption);
|
||||
if (!['absolute', 'fixed'].includes(captionComputedStyle.position)) {
|
||||
figureHeight = figureHeight - caption.offsetHeight - parseFloat(captionComputedStyle.marginTop) - parseFloat(captionComputedStyle.marginBottom);
|
||||
}
|
||||
}
|
||||
const buttonOffsetTop = figureHeight - offsetHeight;
|
||||
const buttonOffsetRight = figureWidth - offsetWidth;
|
||||
let imageButtonTop = buttonOffsetTop + 16;
|
||||
let imageButtonRight = buttonOffsetRight + 16;
|
||||
|
||||
// In the case of an image with object-fit: contain, the size of the
|
||||
// <img> element can be larger than the image itself, so it needs to
|
||||
// calculate where to place the button.
|
||||
if (state.metadata[imageId].scaleAttr === 'contain') {
|
||||
// Natural ratio of the image.
|
||||
const naturalRatio = naturalWidth / naturalHeight;
|
||||
// Offset ratio of the image.
|
||||
const offsetRatio = offsetWidth / offsetHeight;
|
||||
if (naturalRatio >= offsetRatio) {
|
||||
// If it reaches the width first, it keeps the width and compute the
|
||||
// height.
|
||||
const referenceHeight = offsetWidth / naturalRatio;
|
||||
imageButtonTop = (offsetHeight - referenceHeight) / 2 + buttonOffsetTop + 16;
|
||||
imageButtonRight = buttonOffsetRight + 16;
|
||||
} else {
|
||||
// If it reaches the height first, it keeps the height and compute
|
||||
// the width.
|
||||
const referenceWidth = offsetHeight * naturalRatio;
|
||||
imageButtonTop = buttonOffsetTop + 16;
|
||||
imageButtonRight = (offsetWidth - referenceWidth) / 2 + buttonOffsetRight + 16;
|
||||
}
|
||||
}
|
||||
state.metadata[imageId].imageButtonTop = imageButtonTop;
|
||||
state.metadata[imageId].imageButtonRight = imageButtonRight;
|
||||
},
|
||||
setOverlayFocus() {
|
||||
if (state.overlayEnabled) {
|
||||
// Moves the focus to the dialog when it opens.
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
ref.focus();
|
||||
}
|
||||
},
|
||||
initTriggerButton() {
|
||||
const {
|
||||
imageId
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
state.metadata[imageId].buttonRef = ref;
|
||||
}
|
||||
}
|
||||
}, {
|
||||
lock: true
|
||||
});
|
||||
|
||||
1
wp/wp-includes/js/dist/script-modules/block-library/image/view.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/block-library/image/view.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import*as t from"@wordpress/interactivity";var e={d:(t,n)=>{for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const n=(t=>{var n={};return e.d(n,t),n})({getContext:()=>t.getContext,getElement:()=>t.getElement,store:()=>t.store});let o=!1,a=0;const{state:r,actions:i,callbacks:l}=(0,n.store)("core/image",{state:{currentImageId:null,get currentImage(){return r.metadata[r.currentImageId]},get overlayOpened(){return null!==r.currentImageId},get roleAttribute(){return r.overlayOpened?"dialog":null},get ariaModal(){return r.overlayOpened?"true":null},get enlargedSrc(){return r.currentImage.uploadedSrc||"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},get figureStyles(){return r.overlayOpened&&`${r.currentImage.figureStyles?.replace(/margin[^;]*;?/g,"")};`},get imgStyles(){return r.overlayOpened&&`${r.currentImage.imgStyles?.replace(/;$/,"")}; object-fit:cover;`},get imageButtonRight(){const{imageId:t}=(0,n.getContext)();return r.metadata[t].imageButtonRight},get imageButtonTop(){const{imageId:t}=(0,n.getContext)();return r.metadata[t].imageButtonTop},get isContentHidden(){const t=(0,n.getContext)();return r.overlayEnabled&&r.currentImageId===t.imageId},get isContentVisible(){const t=(0,n.getContext)();return!r.overlayEnabled&&r.currentImageId===t.imageId}},actions:{showLightbox(){const{imageId:t}=(0,n.getContext)();r.metadata[t].imageRef?.complete&&(r.scrollTopReset=document.documentElement.scrollTop,r.scrollLeftReset=document.documentElement.scrollLeft,r.overlayEnabled=!0,r.currentImageId=t,l.setOverlayStyles())},hideLightbox(){r.overlayEnabled&&(r.showClosingAnimation=!0,r.overlayEnabled=!1,setTimeout((function(){r.currentImage.buttonRef.focus({preventScroll:!0}),r.currentImageId=null}),450))},handleKeydown(t){if(r.overlayEnabled){if("Tab"===t.key){t.preventDefault();const{ref:e}=(0,n.getElement)();e.querySelector("button").focus()}"Escape"===t.key&&i.hideLightbox()}},handleTouchMove(t){r.overlayEnabled&&t.preventDefault()},handleTouchStart(){o=!0},handleTouchEnd(){a=Date.now(),o=!1},handleScroll(){r.overlayOpened&&!o&&Date.now()-a>450&&window.scrollTo(r.scrollLeftReset,r.scrollTopReset)}},callbacks:{setOverlayStyles(){if(!r.overlayEnabled)return;let{naturalWidth:t,naturalHeight:e,offsetWidth:n,offsetHeight:o}=r.currentImage.imageRef,{x:a,y:i}=r.currentImage.imageRef.getBoundingClientRect();const l=t/e;let g=n/o;if("contain"===r.currentImage.scaleAttr)if(l>g){const t=n/l;i+=(o-t)/2,o=t}else{const t=o*l;a+=(n-t)/2,n=t}g=n/o;let c=parseFloat("none"!==r.currentImage.targetWidth?r.currentImage.targetWidth:t),s=parseFloat("none"!==r.currentImage.targetHeight?r.currentImage.targetHeight:e),d=c/s,u=c,m=s,h=c,p=s;if(l.toFixed(2)!==d.toFixed(2)){if(l>d){const t=c/l;s-t>c?(s=t,c=t*l):s=c/l}else{const t=s*l;c-t>s?(c=t,s=t/l):c=s*l}h=c,p=s,d=c/s,g>d?(u=c,m=u/g):(m=s,u=m*g)}(n>h||o>p)&&(h=n,p=o);let f=0;window.innerWidth>480?f=80:window.innerWidth>1920&&(f=160);const y=Math.min(window.innerWidth-f,h),b=Math.min(window.innerHeight-80,p);g>y/b?(h=y,p=h/g):(p=b,h=p*g);const w=n/h,I=c*(h/u),x=s*(p/m);r.overlayStyles=`\n\t\t\t\t:root {\n\t\t\t\t\t--wp--lightbox-initial-top-position: ${i}px;\n\t\t\t\t\t--wp--lightbox-initial-left-position: ${a}px;\n\t\t\t\t\t--wp--lightbox-container-width: ${h+1}px;\n\t\t\t\t\t--wp--lightbox-container-height: ${p+1}px;\n\t\t\t\t\t--wp--lightbox-image-width: ${I}px;\n\t\t\t\t\t--wp--lightbox-image-height: ${x}px;\n\t\t\t\t\t--wp--lightbox-scale: ${w};\n\t\t\t\t\t--wp--lightbox-scrollbar-width: ${window.innerWidth-document.documentElement.clientWidth}px;\n\t\t\t\t}\n\t\t\t`},setButtonStyles(){const{imageId:t}=(0,n.getContext)(),{ref:e}=(0,n.getElement)();r.metadata[t].imageRef=e,r.metadata[t].currentSrc=e.currentSrc;const{naturalWidth:o,naturalHeight:a,offsetWidth:i,offsetHeight:l}=e;if(0===o||0===a)return;const g=e.parentElement,c=e.parentElement.clientWidth;let s=e.parentElement.clientHeight;const d=g.querySelector("figcaption");if(d){const t=window.getComputedStyle(d);["absolute","fixed"].includes(t.position)||(s=s-d.offsetHeight-parseFloat(t.marginTop)-parseFloat(t.marginBottom))}const u=s-l,m=c-i;let h=u+16,p=m+16;if("contain"===r.metadata[t].scaleAttr){const t=o/a;if(t>=i/l){h=(l-i/t)/2+u+16,p=m+16}else{h=u+16,p=(i-l*t)/2+m+16}}r.metadata[t].imageButtonTop=h,r.metadata[t].imageButtonRight=p},setOverlayFocus(){if(r.overlayEnabled){const{ref:t}=(0,n.getElement)();t.focus()}},initTriggerButton(){const{imageId:t}=(0,n.getContext)(),{ref:e}=(0,n.getElement)();r.metadata[t].buttonRef=e}}},{lock:!0});
|
||||
223
wp/wp-includes/js/dist/script-modules/block-library/navigation/view.js
vendored
Normal file
223
wp/wp-includes/js/dist/script-modules/block-library/navigation/view.js
vendored
Normal file
@@ -0,0 +1,223 @@
|
||||
import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
|
||||
/******/ // The require scope
|
||||
/******/ var __webpack_require__ = {};
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
|
||||
;// CONCATENATED MODULE: external "@wordpress/interactivity"
|
||||
var x = (y) => {
|
||||
var x = {}; __webpack_require__.d(x, y); return x
|
||||
}
|
||||
var y = (x) => (() => (x))
|
||||
const interactivity_namespaceObject = x({ ["getContext"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getContext), ["getElement"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getElement), ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store) });
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-library/build-module/navigation/view.js
|
||||
/**
|
||||
* WordPress dependencies
|
||||
*/
|
||||
|
||||
const focusableSelectors = ['a[href]', 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', '[contenteditable]', '[tabindex]:not([tabindex^="-"])'];
|
||||
|
||||
// This is a fix for Safari in iOS/iPadOS. Without it, Safari doesn't focus out
|
||||
// when the user taps in the body. It can be removed once we add an overlay to
|
||||
// capture the clicks, instead of relying on the focusout event.
|
||||
document.addEventListener('click', () => {});
|
||||
const {
|
||||
state,
|
||||
actions
|
||||
} = (0,interactivity_namespaceObject.store)('core/navigation', {
|
||||
state: {
|
||||
get roleAttribute() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
return ctx.type === 'overlay' && state.isMenuOpen ? 'dialog' : null;
|
||||
},
|
||||
get ariaModal() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
return ctx.type === 'overlay' && state.isMenuOpen ? 'true' : null;
|
||||
},
|
||||
get ariaLabel() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
return ctx.type === 'overlay' && state.isMenuOpen ? ctx.ariaLabel : null;
|
||||
},
|
||||
get isMenuOpen() {
|
||||
// The menu is opened if either `click`, `hover` or `focus` is true.
|
||||
return Object.values(state.menuOpenedBy).filter(Boolean).length > 0;
|
||||
},
|
||||
get menuOpenedBy() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
return ctx.type === 'overlay' ? ctx.overlayOpenedBy : ctx.submenuOpenedBy;
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
openMenuOnHover() {
|
||||
const {
|
||||
type,
|
||||
overlayOpenedBy
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
if (type === 'submenu' &&
|
||||
// Only open on hover if the overlay is closed.
|
||||
Object.values(overlayOpenedBy || {}).filter(Boolean).length === 0) {
|
||||
actions.openMenu('hover');
|
||||
}
|
||||
},
|
||||
closeMenuOnHover() {
|
||||
const {
|
||||
type,
|
||||
overlayOpenedBy
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
if (type === 'submenu' &&
|
||||
// Only close on hover if the overlay is closed.
|
||||
Object.values(overlayOpenedBy || {}).filter(Boolean).length === 0) {
|
||||
actions.closeMenu('hover');
|
||||
}
|
||||
},
|
||||
openMenuOnClick() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
ctx.previousFocus = ref;
|
||||
actions.openMenu('click');
|
||||
},
|
||||
closeMenuOnClick() {
|
||||
actions.closeMenu('click');
|
||||
actions.closeMenu('focus');
|
||||
},
|
||||
openMenuOnFocus() {
|
||||
actions.openMenu('focus');
|
||||
},
|
||||
toggleMenuOnClick() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
// Safari won't send focus to the clicked element, so we need to manually place it: https://bugs.webkit.org/show_bug.cgi?id=22261
|
||||
if (window.document.activeElement !== ref) {
|
||||
ref.focus();
|
||||
}
|
||||
const {
|
||||
menuOpenedBy
|
||||
} = state;
|
||||
if (menuOpenedBy.click || menuOpenedBy.focus) {
|
||||
actions.closeMenu('click');
|
||||
actions.closeMenu('focus');
|
||||
} else {
|
||||
ctx.previousFocus = ref;
|
||||
actions.openMenu('click');
|
||||
}
|
||||
},
|
||||
handleMenuKeydown(event) {
|
||||
const {
|
||||
type,
|
||||
firstFocusableElement,
|
||||
lastFocusableElement
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
if (state.menuOpenedBy.click) {
|
||||
// If Escape close the menu.
|
||||
if (event?.key === 'Escape') {
|
||||
actions.closeMenu('click');
|
||||
actions.closeMenu('focus');
|
||||
return;
|
||||
}
|
||||
|
||||
// Trap focus if it is an overlay (main menu).
|
||||
if (type === 'overlay' && event.key === 'Tab') {
|
||||
// If shift + tab it change the direction.
|
||||
if (event.shiftKey && window.document.activeElement === firstFocusableElement) {
|
||||
event.preventDefault();
|
||||
lastFocusableElement.focus();
|
||||
} else if (!event.shiftKey && window.document.activeElement === lastFocusableElement) {
|
||||
event.preventDefault();
|
||||
firstFocusableElement.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
handleMenuFocusout(event) {
|
||||
const {
|
||||
modal,
|
||||
type
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
// If focus is outside modal, and in the document, close menu
|
||||
// event.target === The element losing focus
|
||||
// event.relatedTarget === The element receiving focus (if any)
|
||||
// When focusout is outside the document,
|
||||
// `window.document.activeElement` doesn't change.
|
||||
|
||||
// The event.relatedTarget is null when something outside the navigation menu is clicked. This is only necessary for Safari.
|
||||
if (event.relatedTarget === null || !modal?.contains(event.relatedTarget) && event.target !== window.document.activeElement && type === 'submenu') {
|
||||
actions.closeMenu('click');
|
||||
actions.closeMenu('focus');
|
||||
}
|
||||
},
|
||||
openMenu(menuOpenedOn = 'click') {
|
||||
const {
|
||||
type
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
state.menuOpenedBy[menuOpenedOn] = true;
|
||||
if (type === 'overlay') {
|
||||
// Add a `has-modal-open` class to the <html> root.
|
||||
document.documentElement.classList.add('has-modal-open');
|
||||
}
|
||||
},
|
||||
closeMenu(menuClosedOn = 'click') {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
state.menuOpenedBy[menuClosedOn] = false;
|
||||
// Check if the menu is still open or not.
|
||||
if (!state.isMenuOpen) {
|
||||
if (ctx.modal?.contains(window.document.activeElement)) {
|
||||
ctx.previousFocus?.focus();
|
||||
}
|
||||
ctx.modal = null;
|
||||
ctx.previousFocus = null;
|
||||
if (ctx.type === 'overlay') {
|
||||
document.documentElement.classList.remove('has-modal-open');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
callbacks: {
|
||||
initMenu() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
if (state.isMenuOpen) {
|
||||
const focusableElements = ref.querySelectorAll(focusableSelectors);
|
||||
ctx.modal = ref;
|
||||
ctx.firstFocusableElement = focusableElements[0];
|
||||
ctx.lastFocusableElement = focusableElements[focusableElements.length - 1];
|
||||
}
|
||||
},
|
||||
focusFirstElement() {
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
if (state.isMenuOpen) {
|
||||
const focusableElements = ref.querySelectorAll(focusableSelectors);
|
||||
focusableElements?.[0]?.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
lock: true
|
||||
});
|
||||
|
||||
1
wp/wp-includes/js/dist/script-modules/block-library/navigation/view.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/block-library/navigation/view.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import*as e from"@wordpress/interactivity";var t={d:(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const n=(e=>{var n={};return t.d(n,e),n})({getContext:()=>e.getContext,getElement:()=>e.getElement,store:()=>e.store}),o=["a[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","[contenteditable]",'[tabindex]:not([tabindex^="-"])'];document.addEventListener("click",(()=>{}));const{state:l,actions:c}=(0,n.store)("core/navigation",{state:{get roleAttribute(){return"overlay"===(0,n.getContext)().type&&l.isMenuOpen?"dialog":null},get ariaModal(){return"overlay"===(0,n.getContext)().type&&l.isMenuOpen?"true":null},get ariaLabel(){const e=(0,n.getContext)();return"overlay"===e.type&&l.isMenuOpen?e.ariaLabel:null},get isMenuOpen(){return Object.values(l.menuOpenedBy).filter(Boolean).length>0},get menuOpenedBy(){const e=(0,n.getContext)();return"overlay"===e.type?e.overlayOpenedBy:e.submenuOpenedBy}},actions:{openMenuOnHover(){const{type:e,overlayOpenedBy:t}=(0,n.getContext)();"submenu"===e&&0===Object.values(t||{}).filter(Boolean).length&&c.openMenu("hover")},closeMenuOnHover(){const{type:e,overlayOpenedBy:t}=(0,n.getContext)();"submenu"===e&&0===Object.values(t||{}).filter(Boolean).length&&c.closeMenu("hover")},openMenuOnClick(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();e.previousFocus=t,c.openMenu("click")},closeMenuOnClick(){c.closeMenu("click"),c.closeMenu("focus")},openMenuOnFocus(){c.openMenu("focus")},toggleMenuOnClick(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();window.document.activeElement!==t&&t.focus();const{menuOpenedBy:o}=l;o.click||o.focus?(c.closeMenu("click"),c.closeMenu("focus")):(e.previousFocus=t,c.openMenu("click"))},handleMenuKeydown(e){const{type:t,firstFocusableElement:o,lastFocusableElement:u}=(0,n.getContext)();if(l.menuOpenedBy.click){if("Escape"===e?.key)return c.closeMenu("click"),void c.closeMenu("focus");"overlay"===t&&"Tab"===e.key&&(e.shiftKey&&window.document.activeElement===o?(e.preventDefault(),u.focus()):e.shiftKey||window.document.activeElement!==u||(e.preventDefault(),o.focus()))}},handleMenuFocusout(e){const{modal:t,type:o}=(0,n.getContext)();(null===e.relatedTarget||!t?.contains(e.relatedTarget)&&e.target!==window.document.activeElement&&"submenu"===o)&&(c.closeMenu("click"),c.closeMenu("focus"))},openMenu(e="click"){const{type:t}=(0,n.getContext)();l.menuOpenedBy[e]=!0,"overlay"===t&&document.documentElement.classList.add("has-modal-open")},closeMenu(e="click"){const t=(0,n.getContext)();l.menuOpenedBy[e]=!1,l.isMenuOpen||(t.modal?.contains(window.document.activeElement)&&t.previousFocus?.focus(),t.modal=null,t.previousFocus=null,"overlay"===t.type&&document.documentElement.classList.remove("has-modal-open"))}},callbacks:{initMenu(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();if(l.isMenuOpen){const n=t.querySelectorAll(o);e.modal=t,e.firstFocusableElement=n[0],e.lastFocusableElement=n[n.length-1]}},focusFirstElement(){const{ref:e}=(0,n.getElement)();if(l.isMenuOpen){const t=e.querySelectorAll(o);t?.[0]?.focus()}}}},{lock:!0});
|
||||
135
wp/wp-includes/js/dist/script-modules/block-library/query/view.js
vendored
Normal file
135
wp/wp-includes/js/dist/script-modules/block-library/query/view.js
vendored
Normal file
@@ -0,0 +1,135 @@
|
||||
import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ 438:
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = import("@wordpress/interactivity-router");;
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
(() => {
|
||||
|
||||
;// CONCATENATED MODULE: external "@wordpress/interactivity"
|
||||
var x = (y) => {
|
||||
var x = {}; __webpack_require__.d(x, y); return x
|
||||
}
|
||||
var y = (x) => (() => (x))
|
||||
const interactivity_namespaceObject = x({ ["getContext"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getContext), ["getElement"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getElement), ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store) });
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-library/build-module/query/view.js
|
||||
/**
|
||||
* WordPress dependencies
|
||||
*/
|
||||
|
||||
const isValidLink = ref => ref && ref instanceof window.HTMLAnchorElement && ref.href && (!ref.target || ref.target === '_self') && ref.origin === window.location.origin;
|
||||
const isValidEvent = event => event.button === 0 &&
|
||||
// Left clicks only.
|
||||
!event.metaKey &&
|
||||
// Open in new tab (Mac).
|
||||
!event.ctrlKey &&
|
||||
// Open in new tab (Windows).
|
||||
!event.altKey &&
|
||||
// Download.
|
||||
!event.shiftKey && !event.defaultPrevented;
|
||||
(0,interactivity_namespaceObject.store)('core/query', {
|
||||
actions: {
|
||||
*navigate(event) {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
const queryRef = ref.closest('.wp-block-query[data-wp-router-region]');
|
||||
if (isValidLink(ref) && isValidEvent(event)) {
|
||||
event.preventDefault();
|
||||
const {
|
||||
actions
|
||||
} = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
|
||||
yield actions.navigate(ref.href);
|
||||
ctx.url = ref.href;
|
||||
|
||||
// Focus the first anchor of the Query block.
|
||||
const firstAnchor = `.wp-block-post-template a[href]`;
|
||||
queryRef.querySelector(firstAnchor)?.focus();
|
||||
}
|
||||
},
|
||||
*prefetch() {
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
if (isValidLink(ref)) {
|
||||
const {
|
||||
actions
|
||||
} = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
|
||||
yield actions.prefetch(ref.href);
|
||||
}
|
||||
}
|
||||
},
|
||||
callbacks: {
|
||||
*prefetch() {
|
||||
const {
|
||||
url
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
if (url && isValidLink(ref)) {
|
||||
const {
|
||||
actions
|
||||
} = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
|
||||
yield actions.prefetch(ref.href);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
lock: true
|
||||
});
|
||||
|
||||
})();
|
||||
|
||||
1
wp/wp-includes/js/dist/script-modules/block-library/query/view.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/block-library/query/view.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import*as e from"@wordpress/interactivity";var t={438:e=>{e.exports=import("@wordpress/interactivity-router")}},r={};function o(e){var n=r[e];if(void 0!==n)return n.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,o),i.exports}o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const t=(e=>{var t={};return o.d(t,e),t})({getContext:()=>e.getContext,getElement:()=>e.getElement,store:()=>e.store}),r=e=>e&&e instanceof window.HTMLAnchorElement&&e.href&&(!e.target||"_self"===e.target)&&e.origin===window.location.origin;(0,t.store)("core/query",{actions:{*navigate(e){const n=(0,t.getContext)(),{ref:i}=(0,t.getElement)(),s=i.closest(".wp-block-query[data-wp-router-region]");if(r(i)&&(e=>!(0!==e.button||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||e.defaultPrevented))(e)){e.preventDefault();const{actions:t}=yield Promise.resolve().then(o.bind(o,438));yield t.navigate(i.href),n.url=i.href;const r=".wp-block-post-template a[href]";s.querySelector(r)?.focus()}},*prefetch(){const{ref:e}=(0,t.getElement)();if(r(e)){const{actions:t}=yield Promise.resolve().then(o.bind(o,438));yield t.prefetch(e.href)}}},callbacks:{*prefetch(){const{url:e}=(0,t.getContext)(),{ref:n}=(0,t.getElement)();if(e&&r(n)){const{actions:e}=yield Promise.resolve().then(o.bind(o,438));yield e.prefetch(n.href)}}}},{lock:!0})})();
|
||||
112
wp/wp-includes/js/dist/script-modules/block-library/search/view.js
vendored
Normal file
112
wp/wp-includes/js/dist/script-modules/block-library/search/view.js
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
|
||||
/******/ // The require scope
|
||||
/******/ var __webpack_require__ = {};
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
|
||||
;// CONCATENATED MODULE: external "@wordpress/interactivity"
|
||||
var x = (y) => {
|
||||
var x = {}; __webpack_require__.d(x, y); return x
|
||||
}
|
||||
var y = (x) => (() => (x))
|
||||
const interactivity_namespaceObject = x({ ["getContext"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getContext), ["getElement"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getElement), ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store) });
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-library/build-module/search/view.js
|
||||
/**
|
||||
* WordPress dependencies
|
||||
*/
|
||||
|
||||
const {
|
||||
actions
|
||||
} = (0,interactivity_namespaceObject.store)('core/search', {
|
||||
state: {
|
||||
get ariaLabel() {
|
||||
const {
|
||||
isSearchInputVisible,
|
||||
ariaLabelCollapsed,
|
||||
ariaLabelExpanded
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
return isSearchInputVisible ? ariaLabelExpanded : ariaLabelCollapsed;
|
||||
},
|
||||
get ariaControls() {
|
||||
const {
|
||||
isSearchInputVisible,
|
||||
inputId
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
return isSearchInputVisible ? null : inputId;
|
||||
},
|
||||
get type() {
|
||||
const {
|
||||
isSearchInputVisible
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
return isSearchInputVisible ? 'submit' : 'button';
|
||||
},
|
||||
get tabindex() {
|
||||
const {
|
||||
isSearchInputVisible
|
||||
} = (0,interactivity_namespaceObject.getContext)();
|
||||
return isSearchInputVisible ? '0' : '-1';
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
openSearchInput(event) {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
if (!ctx.isSearchInputVisible) {
|
||||
event.preventDefault();
|
||||
ctx.isSearchInputVisible = true;
|
||||
ref.parentElement.querySelector('input').focus();
|
||||
}
|
||||
},
|
||||
closeSearchInput() {
|
||||
const ctx = (0,interactivity_namespaceObject.getContext)();
|
||||
ctx.isSearchInputVisible = false;
|
||||
},
|
||||
handleSearchKeydown(event) {
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
// If Escape close the menu.
|
||||
if (event?.key === 'Escape') {
|
||||
actions.closeSearchInput();
|
||||
ref.querySelector('button').focus();
|
||||
}
|
||||
},
|
||||
handleSearchFocusout(event) {
|
||||
const {
|
||||
ref
|
||||
} = (0,interactivity_namespaceObject.getElement)();
|
||||
// If focus is outside search form, and in the document, close menu
|
||||
// event.target === The element losing focus
|
||||
// event.relatedTarget === The element receiving focus (if any)
|
||||
// When focusout is outside the document,
|
||||
// `window.document.activeElement` doesn't change.
|
||||
if (!ref.contains(event.relatedTarget) && event.target !== window.document.activeElement) {
|
||||
actions.closeSearchInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
lock: true
|
||||
});
|
||||
|
||||
1
wp/wp-includes/js/dist/script-modules/block-library/search/view.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/block-library/search/view.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import*as e from"@wordpress/interactivity";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const n=(e=>{var n={};return t.d(n,e),n})({getContext:()=>e.getContext,getElement:()=>e.getElement,store:()=>e.store}),{actions:r}=(0,n.store)("core/search",{state:{get ariaLabel(){const{isSearchInputVisible:e,ariaLabelCollapsed:t,ariaLabelExpanded:r}=(0,n.getContext)();return e?r:t},get ariaControls(){const{isSearchInputVisible:e,inputId:t}=(0,n.getContext)();return e?null:t},get type(){const{isSearchInputVisible:e}=(0,n.getContext)();return e?"submit":"button"},get tabindex(){const{isSearchInputVisible:e}=(0,n.getContext)();return e?"0":"-1"}},actions:{openSearchInput(e){const t=(0,n.getContext)(),{ref:r}=(0,n.getElement)();t.isSearchInputVisible||(e.preventDefault(),t.isSearchInputVisible=!0,r.parentElement.querySelector("input").focus())},closeSearchInput(){(0,n.getContext)().isSearchInputVisible=!1},handleSearchKeydown(e){const{ref:t}=(0,n.getElement)();"Escape"===e?.key&&(r.closeSearchInput(),t.querySelector("button").focus())},handleSearchFocusout(e){const{ref:t}=(0,n.getElement)();t.contains(e.relatedTarget)||e.target===window.document.activeElement||r.closeSearchInput()}}},{lock:!0});
|
||||
416
wp/wp-includes/js/dist/script-modules/interactivity-router/index.js
vendored
Normal file
416
wp/wp-includes/js/dist/script-modules/interactivity-router/index.js
vendored
Normal file
@@ -0,0 +1,416 @@
|
||||
import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ 317:
|
||||
/***/ ((module) => {
|
||||
|
||||
module.exports = import("@wordpress/a11y");;
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ (() => {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = (exports, definition) => {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ (() => {
|
||||
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
||||
/******/ })();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||
(() => {
|
||||
|
||||
// EXPORTS
|
||||
__webpack_require__.d(__webpack_exports__, {
|
||||
o: () => (/* binding */ actions),
|
||||
w: () => (/* binding */ state)
|
||||
});
|
||||
|
||||
;// CONCATENATED MODULE: external "@wordpress/interactivity"
|
||||
var x = (y) => {
|
||||
var x = {}; __webpack_require__.d(x, y); return x
|
||||
}
|
||||
var y = (x) => (() => (x))
|
||||
const interactivity_namespaceObject = x({ ["getConfig"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getConfig), ["privateApis"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.privateApis), ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store) });
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/interactivity-router/build-module/index.js
|
||||
var _getConfig$navigation;
|
||||
/**
|
||||
* WordPress dependencies
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
|
||||
const {
|
||||
directivePrefix,
|
||||
getRegionRootFragment,
|
||||
initialVdom,
|
||||
toVdom,
|
||||
render,
|
||||
parseServerData,
|
||||
populateServerData,
|
||||
batch
|
||||
} = (0,interactivity_namespaceObject.privateApis)('I acknowledge that using private APIs means my theme or plugin will inevitably break in the next version of WordPress.');
|
||||
// Check if the navigation mode is full page or region based.
|
||||
const navigationMode = (_getConfig$navigation = (0,interactivity_namespaceObject.getConfig)('core/router').navigationMode) !== null && _getConfig$navigation !== void 0 ? _getConfig$navigation : 'regionBased';
|
||||
|
||||
// The cache of visited and prefetched pages, stylesheets and scripts.
|
||||
const pages = new Map();
|
||||
const headElements = new Map();
|
||||
|
||||
// Helper to remove domain and hash from the URL. We are only interesting in
|
||||
// caching the path and the query.
|
||||
const getPagePath = url => {
|
||||
const u = new URL(url, window.location.href);
|
||||
return u.pathname + u.search;
|
||||
};
|
||||
|
||||
// Fetch a new page and convert it to a static virtual DOM.
|
||||
const fetchPage = async (url, {
|
||||
html
|
||||
}) => {
|
||||
try {
|
||||
if (!html) {
|
||||
const res = await window.fetch(url);
|
||||
if (res.status !== 200) {
|
||||
return false;
|
||||
}
|
||||
html = await res.text();
|
||||
}
|
||||
const dom = new window.DOMParser().parseFromString(html, 'text/html');
|
||||
return regionsToVdom(dom);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Return an object with VDOM trees of those HTML regions marked with a
|
||||
// `router-region` directive.
|
||||
const regionsToVdom = async (dom, {
|
||||
vdom
|
||||
} = {}) => {
|
||||
const regions = {
|
||||
body: undefined
|
||||
};
|
||||
let head;
|
||||
if (false) {}
|
||||
if (navigationMode === 'regionBased') {
|
||||
const attrName = `data-${directivePrefix}-router-region`;
|
||||
dom.querySelectorAll(`[${attrName}]`).forEach(region => {
|
||||
const id = region.getAttribute(attrName);
|
||||
regions[id] = vdom?.has(region) ? vdom.get(region) : toVdom(region);
|
||||
});
|
||||
}
|
||||
const title = dom.querySelector('title')?.innerText;
|
||||
const initialData = parseServerData(dom);
|
||||
return {
|
||||
regions,
|
||||
head,
|
||||
title,
|
||||
initialData
|
||||
};
|
||||
};
|
||||
|
||||
// Render all interactive regions contained in the given page.
|
||||
const renderRegions = page => {
|
||||
batch(() => {
|
||||
if (false) {}
|
||||
if (navigationMode === 'regionBased') {
|
||||
populateServerData(page.initialData);
|
||||
const attrName = `data-${directivePrefix}-router-region`;
|
||||
document.querySelectorAll(`[${attrName}]`).forEach(region => {
|
||||
const id = region.getAttribute(attrName);
|
||||
const fragment = getRegionRootFragment(region);
|
||||
render(page.regions[id], fragment);
|
||||
});
|
||||
}
|
||||
if (page.title) {
|
||||
document.title = page.title;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Load the given page forcing a full page reload.
|
||||
*
|
||||
* The function returns a promise that won't resolve, useful to prevent any
|
||||
* potential feedback indicating that the navigation has finished while the new
|
||||
* page is being loaded.
|
||||
*
|
||||
* @param href The page href.
|
||||
* @return Promise that never resolves.
|
||||
*/
|
||||
const forcePageReload = href => {
|
||||
window.location.assign(href);
|
||||
return new Promise(() => {});
|
||||
};
|
||||
|
||||
// Listen to the back and forward buttons and restore the page if it's in the
|
||||
// cache.
|
||||
window.addEventListener('popstate', async () => {
|
||||
const pagePath = getPagePath(window.location.href); // Remove hash.
|
||||
const page = pages.has(pagePath) && (await pages.get(pagePath));
|
||||
if (page) {
|
||||
renderRegions(page);
|
||||
// Update the URL in the state.
|
||||
state.url = window.location.href;
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
|
||||
// Initialize the router and cache the initial page using the initial vDOM.
|
||||
// Once this code is tested and more mature, the head should be updated for
|
||||
// region based navigation as well.
|
||||
if (false) {}
|
||||
pages.set(getPagePath(window.location.href), Promise.resolve(regionsToVdom(document, {
|
||||
vdom: initialVdom
|
||||
})));
|
||||
|
||||
// Check if the link is valid for client-side navigation.
|
||||
const isValidLink = ref => ref && ref instanceof window.HTMLAnchorElement && ref.href && (!ref.target || ref.target === '_self') && ref.origin === window.location.origin && !ref.pathname.startsWith('/wp-admin') && !ref.pathname.startsWith('/wp-login.php') && !ref.getAttribute('href').startsWith('#') && !new URL(ref.href).searchParams.has('_wpnonce');
|
||||
|
||||
// Check if the event is valid for client-side navigation.
|
||||
const isValidEvent = event => event && event.button === 0 &&
|
||||
// Left clicks only.
|
||||
!event.metaKey &&
|
||||
// Open in new tab (Mac).
|
||||
!event.ctrlKey &&
|
||||
// Open in new tab (Windows).
|
||||
!event.altKey &&
|
||||
// Download.
|
||||
!event.shiftKey && !event.defaultPrevented;
|
||||
|
||||
// Variable to store the current navigation.
|
||||
let navigatingTo = '';
|
||||
let hasLoadedNavigationTextsData = false;
|
||||
const navigationTexts = {
|
||||
loading: 'Loading page, please wait.',
|
||||
loaded: 'Page Loaded.'
|
||||
};
|
||||
const {
|
||||
state,
|
||||
actions
|
||||
} = (0,interactivity_namespaceObject.store)('core/router', {
|
||||
state: {
|
||||
url: window.location.href,
|
||||
navigation: {
|
||||
hasStarted: false,
|
||||
hasFinished: false
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
/**
|
||||
* Navigates to the specified page.
|
||||
*
|
||||
* This function normalizes the passed href, fetchs the page HTML if
|
||||
* needed, and updates any interactive regions whose contents have
|
||||
* changed. It also creates a new entry in the browser session history.
|
||||
*
|
||||
* @param href The page href.
|
||||
* @param [options] Options object.
|
||||
* @param [options.force] If true, it forces re-fetching the URL.
|
||||
* @param [options.html] HTML string to be used instead of fetching the requested URL.
|
||||
* @param [options.replace] If true, it replaces the current entry in the browser session history.
|
||||
* @param [options.timeout] Time until the navigation is aborted, in milliseconds. Default is 10000.
|
||||
* @param [options.loadingAnimation] Whether an animation should be shown while navigating. Default to `true`.
|
||||
* @param [options.screenReaderAnnouncement] Whether a message for screen readers should be announced while navigating. Default to `true`.
|
||||
*
|
||||
* @return Promise that resolves once the navigation is completed or aborted.
|
||||
*/
|
||||
*navigate(href, options = {}) {
|
||||
const {
|
||||
clientNavigationDisabled
|
||||
} = (0,interactivity_namespaceObject.getConfig)();
|
||||
if (clientNavigationDisabled) {
|
||||
yield forcePageReload(href);
|
||||
}
|
||||
const pagePath = getPagePath(href);
|
||||
const {
|
||||
navigation
|
||||
} = state;
|
||||
const {
|
||||
loadingAnimation = true,
|
||||
screenReaderAnnouncement = true,
|
||||
timeout = 10000
|
||||
} = options;
|
||||
navigatingTo = href;
|
||||
actions.prefetch(pagePath, options);
|
||||
|
||||
// Create a promise that resolves when the specified timeout ends.
|
||||
// The timeout value is 10 seconds by default.
|
||||
const timeoutPromise = new Promise(resolve => setTimeout(resolve, timeout));
|
||||
|
||||
// Don't update the navigation status immediately, wait 400 ms.
|
||||
const loadingTimeout = setTimeout(() => {
|
||||
if (navigatingTo !== href) {
|
||||
return;
|
||||
}
|
||||
if (loadingAnimation) {
|
||||
navigation.hasStarted = true;
|
||||
navigation.hasFinished = false;
|
||||
}
|
||||
if (screenReaderAnnouncement) {
|
||||
a11ySpeak('loading');
|
||||
}
|
||||
}, 400);
|
||||
const page = yield Promise.race([pages.get(pagePath), timeoutPromise]);
|
||||
|
||||
// Dismiss loading message if it hasn't been added yet.
|
||||
clearTimeout(loadingTimeout);
|
||||
|
||||
// Once the page is fetched, the destination URL could have changed
|
||||
// (e.g., by clicking another link in the meantime). If so, bail
|
||||
// out, and let the newer execution to update the HTML.
|
||||
if (navigatingTo !== href) {
|
||||
return;
|
||||
}
|
||||
if (page && !page.initialData?.config?.['core/router']?.clientNavigationDisabled) {
|
||||
yield renderRegions(page);
|
||||
window.history[options.replace ? 'replaceState' : 'pushState']({}, '', href);
|
||||
|
||||
// Update the URL in the state.
|
||||
state.url = href;
|
||||
|
||||
// Update the navigation status once the the new page rendering
|
||||
// has been completed.
|
||||
if (loadingAnimation) {
|
||||
navigation.hasStarted = false;
|
||||
navigation.hasFinished = true;
|
||||
}
|
||||
if (screenReaderAnnouncement) {
|
||||
a11ySpeak('loaded');
|
||||
}
|
||||
|
||||
// Scroll to the anchor if exits in the link.
|
||||
const {
|
||||
hash
|
||||
} = new URL(href, window.location.href);
|
||||
if (hash) {
|
||||
document.querySelector(hash)?.scrollIntoView();
|
||||
}
|
||||
} else {
|
||||
yield forcePageReload(href);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Prefetchs the page with the passed URL.
|
||||
*
|
||||
* The function normalizes the URL and stores internally the fetch
|
||||
* promise, to avoid triggering a second fetch for an ongoing request.
|
||||
*
|
||||
* @param url The page URL.
|
||||
* @param [options] Options object.
|
||||
* @param [options.force] Force fetching the URL again.
|
||||
* @param [options.html] HTML string to be used instead of fetching the requested URL.
|
||||
*/
|
||||
prefetch(url, options = {}) {
|
||||
const {
|
||||
clientNavigationDisabled
|
||||
} = (0,interactivity_namespaceObject.getConfig)();
|
||||
if (clientNavigationDisabled) {
|
||||
return;
|
||||
}
|
||||
const pagePath = getPagePath(url);
|
||||
if (options.force || !pages.has(pagePath)) {
|
||||
pages.set(pagePath, fetchPage(pagePath, {
|
||||
html: options.html
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Announces a message to screen readers.
|
||||
*
|
||||
* This is a wrapper around the `@wordpress/a11y` package's `speak` function. It handles importing
|
||||
* the package on demand and should be used instead of calling `ally.speak` direacly.
|
||||
*
|
||||
* @param messageKey The message to be announced by assistive technologies.
|
||||
*/
|
||||
function a11ySpeak(messageKey) {
|
||||
if (!hasLoadedNavigationTextsData) {
|
||||
hasLoadedNavigationTextsData = true;
|
||||
const content = document.getElementById('wp-script-module-data-@wordpress/interactivity-router')?.textContent;
|
||||
if (content) {
|
||||
try {
|
||||
const parsed = JSON.parse(content);
|
||||
if (typeof parsed?.i18n?.loading === 'string') {
|
||||
navigationTexts.loading = parsed.i18n.loading;
|
||||
}
|
||||
if (typeof parsed?.i18n?.loaded === 'string') {
|
||||
navigationTexts.loaded = parsed.i18n.loaded;
|
||||
}
|
||||
} catch {}
|
||||
} else {
|
||||
// Fallback to localized strings from Interactivity API state.
|
||||
// @todo This block is for Core < 6.7.0. Remove when support is dropped.
|
||||
|
||||
// @ts-expect-error
|
||||
if (state.navigation.texts?.loading) {
|
||||
// @ts-expect-error
|
||||
navigationTexts.loading = state.navigation.texts.loading;
|
||||
}
|
||||
// @ts-expect-error
|
||||
if (state.navigation.texts?.loaded) {
|
||||
// @ts-expect-error
|
||||
navigationTexts.loaded = state.navigation.texts.loaded;
|
||||
}
|
||||
}
|
||||
}
|
||||
const message = navigationTexts[messageKey];
|
||||
Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 317)).then(({
|
||||
speak
|
||||
}) => speak(message),
|
||||
// Ignore failures to load the a11y module.
|
||||
() => {});
|
||||
}
|
||||
|
||||
// Add click and prefetch to all links.
|
||||
if (false) {}
|
||||
|
||||
})();
|
||||
|
||||
var __webpack_exports__actions = __webpack_exports__.o;
|
||||
var __webpack_exports__state = __webpack_exports__.w;
|
||||
export { __webpack_exports__actions as actions, __webpack_exports__state as state };
|
||||
1
wp/wp-includes/js/dist/script-modules/interactivity-router/index.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/interactivity-router/index.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import*as e from"@wordpress/interactivity";var t={317:e=>{e.exports=import("@wordpress/a11y")}},o={};function i(e){var n=o[e];if(void 0!==n)return n.exports;var a=o[e]={exports:{}};return t[e](a,a.exports,i),a.exports}i.d=(e,t)=>{for(var o in t)i.o(t,o)&&!i.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};(()=>{i.d(n,{o:()=>P,w:()=>S});const t=(e=>{var t={};return i.d(t,e),t})({getConfig:()=>e.getConfig,privateApis:()=>e.privateApis,store:()=>e.store});var o;const{directivePrefix:a,getRegionRootFragment:r,initialVdom:s,toVdom:d,render:l,parseServerData:c,populateServerData:g,batch:p}=(0,t.privateApis)("I acknowledge that using private APIs means my theme or plugin will inevitably break in the next version of WordPress."),u=null!==(o=(0,t.getConfig)("core/router").navigationMode)&&void 0!==o?o:"regionBased",w=new Map,h=(new Map,e=>{const t=new URL(e,window.location.href);return t.pathname+t.search}),f=async(e,{vdom:t}={})=>{const o={body:void 0};if("regionBased"===u){const i=`data-${a}-router-region`;e.querySelectorAll(`[${i}]`).forEach((e=>{const n=e.getAttribute(i);o[n]=t?.has(e)?t.get(e):d(e)}))}const i=e.querySelector("title")?.innerText,n=c(e);return{regions:o,head:undefined,title:i,initialData:n}},v=e=>{p((()=>{if("regionBased"===u){g(e.initialData);const t=`data-${a}-router-region`;document.querySelectorAll(`[${t}]`).forEach((o=>{const i=o.getAttribute(t),n=r(o);l(e.regions[i],n)}))}e.title&&(document.title=e.title)}))},m=e=>(window.location.assign(e),new Promise((()=>{})));window.addEventListener("popstate",(async()=>{const e=h(window.location.href),t=w.has(e)&&await w.get(e);t?(v(t),S.url=window.location.href):window.location.reload()})),w.set(h(window.location.href),Promise.resolve(f(document,{vdom:s})));let y="",x=!1;const b={loading:"Loading page, please wait.",loaded:"Page Loaded."},{state:S,actions:P}=(0,t.store)("core/router",{state:{url:window.location.href,navigation:{hasStarted:!1,hasFinished:!1}},actions:{*navigate(e,o={}){const{clientNavigationDisabled:i}=(0,t.getConfig)();i&&(yield m(e));const n=h(e),{navigation:a}=S,{loadingAnimation:r=!0,screenReaderAnnouncement:s=!0,timeout:d=1e4}=o;y=e,P.prefetch(n,o);const l=new Promise((e=>setTimeout(e,d))),c=setTimeout((()=>{y===e&&(r&&(a.hasStarted=!0,a.hasFinished=!1),s&&A("loading"))}),400),g=yield Promise.race([w.get(n),l]);if(clearTimeout(c),y===e)if(g&&!g.initialData?.config?.["core/router"]?.clientNavigationDisabled){yield v(g),window.history[o.replace?"replaceState":"pushState"]({},"",e),S.url=e,r&&(a.hasStarted=!1,a.hasFinished=!0),s&&A("loaded");const{hash:t}=new URL(e,window.location.href);t&&document.querySelector(t)?.scrollIntoView()}else yield m(e)},prefetch(e,o={}){const{clientNavigationDisabled:i}=(0,t.getConfig)();if(i)return;const n=h(e);!o.force&&w.has(n)||w.set(n,(async(e,{html:t})=>{try{if(!t){const o=await window.fetch(e);if(200!==o.status)return!1;t=await o.text()}const o=(new window.DOMParser).parseFromString(t,"text/html");return f(o)}catch(e){return!1}})(n,{html:o.html}))}}});function A(e){if(!x){x=!0;const e=document.getElementById("wp-script-module-data-@wordpress/interactivity-router")?.textContent;if(e)try{const t=JSON.parse(e);"string"==typeof t?.i18n?.loading&&(b.loading=t.i18n.loading),"string"==typeof t?.i18n?.loaded&&(b.loaded=t.i18n.loaded)}catch{}else S.navigation.texts?.loading&&(b.loading=S.navigation.texts.loading),S.navigation.texts?.loaded&&(b.loaded=S.navigation.texts.loaded)}const t=b[e];Promise.resolve().then(i.bind(i,317)).then((({speak:e})=>e(t)),(()=>{}))}})();var a=n.o,r=n.w;export{a as actions,r as state};
|
||||
2513
wp/wp-includes/js/dist/script-modules/interactivity/debug.js
vendored
Normal file
2513
wp/wp-includes/js/dist/script-modules/interactivity/debug.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
wp/wp-includes/js/dist/script-modules/interactivity/debug.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/interactivity/debug.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2467
wp/wp-includes/js/dist/script-modules/interactivity/index.js
vendored
Normal file
2467
wp/wp-includes/js/dist/script-modules/interactivity/index.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
wp/wp-includes/js/dist/script-modules/interactivity/index.min.js
vendored
Normal file
1
wp/wp-includes/js/dist/script-modules/interactivity/index.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user