a11y.js (10585B)
1 this["wp"] = this["wp"] || {}; this["wp"]["a11y"] = 2 /******/ (function(modules) { // webpackBootstrap 3 /******/ // The module cache 4 /******/ var installedModules = {}; 5 /******/ 6 /******/ // The require function 7 /******/ function __webpack_require__(moduleId) { 8 /******/ 9 /******/ // Check if module is in cache 10 /******/ if(installedModules[moduleId]) { 11 /******/ return installedModules[moduleId].exports; 12 /******/ } 13 /******/ // Create a new module (and put it into the cache) 14 /******/ var module = installedModules[moduleId] = { 15 /******/ i: moduleId, 16 /******/ l: false, 17 /******/ exports: {} 18 /******/ }; 19 /******/ 20 /******/ // Execute the module function 21 /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 22 /******/ 23 /******/ // Flag the module as loaded 24 /******/ module.l = true; 25 /******/ 26 /******/ // Return the exports of the module 27 /******/ return module.exports; 28 /******/ } 29 /******/ 30 /******/ 31 /******/ // expose the modules object (__webpack_modules__) 32 /******/ __webpack_require__.m = modules; 33 /******/ 34 /******/ // expose the module cache 35 /******/ __webpack_require__.c = installedModules; 36 /******/ 37 /******/ // define getter function for harmony exports 38 /******/ __webpack_require__.d = function(exports, name, getter) { 39 /******/ if(!__webpack_require__.o(exports, name)) { 40 /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 41 /******/ } 42 /******/ }; 43 /******/ 44 /******/ // define __esModule on exports 45 /******/ __webpack_require__.r = function(exports) { 46 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 47 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 48 /******/ } 49 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 50 /******/ }; 51 /******/ 52 /******/ // create a fake namespace object 53 /******/ // mode & 1: value is a module id, require it 54 /******/ // mode & 2: merge all properties of value into the ns 55 /******/ // mode & 4: return value when already ns object 56 /******/ // mode & 8|1: behave like require 57 /******/ __webpack_require__.t = function(value, mode) { 58 /******/ if(mode & 1) value = __webpack_require__(value); 59 /******/ if(mode & 8) return value; 60 /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 61 /******/ var ns = Object.create(null); 62 /******/ __webpack_require__.r(ns); 63 /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 64 /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 65 /******/ return ns; 66 /******/ }; 67 /******/ 68 /******/ // getDefaultExport function for compatibility with non-harmony modules 69 /******/ __webpack_require__.n = function(module) { 70 /******/ var getter = module && module.__esModule ? 71 /******/ function getDefault() { return module['default']; } : 72 /******/ function getModuleExports() { return module; }; 73 /******/ __webpack_require__.d(getter, 'a', getter); 74 /******/ return getter; 75 /******/ }; 76 /******/ 77 /******/ // Object.prototype.hasOwnProperty.call 78 /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 79 /******/ 80 /******/ // __webpack_public_path__ 81 /******/ __webpack_require__.p = ""; 82 /******/ 83 /******/ 84 /******/ // Load entry module and return exports 85 /******/ return __webpack_require__(__webpack_require__.s = "jncB"); 86 /******/ }) 87 /************************************************************************/ 88 /******/ ({ 89 90 /***/ "Y8OO": 91 /***/ (function(module, exports) { 92 93 (function() { module.exports = window["wp"]["domReady"]; }()); 94 95 /***/ }), 96 97 /***/ "jncB": 98 /***/ (function(module, __webpack_exports__, __webpack_require__) { 99 100 "use strict"; 101 // ESM COMPAT FLAG 102 __webpack_require__.r(__webpack_exports__); 103 104 // EXPORTS 105 __webpack_require__.d(__webpack_exports__, "setup", function() { return /* binding */ setup; }); 106 __webpack_require__.d(__webpack_exports__, "speak", function() { return /* binding */ speak; }); 107 108 // EXTERNAL MODULE: external ["wp","domReady"] 109 var external_wp_domReady_ = __webpack_require__("Y8OO"); 110 var external_wp_domReady_default = /*#__PURE__*/__webpack_require__.n(external_wp_domReady_); 111 112 // EXTERNAL MODULE: external ["wp","i18n"] 113 var external_wp_i18n_ = __webpack_require__("l3Sj"); 114 115 // CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/add-intro-text.js 116 /** 117 * WordPress dependencies 118 */ 119 120 /** 121 * Build the explanatory text to be placed before the aria live regions. 122 * 123 * This text is initially hidden from assistive technologies by using a `hidden` 124 * HTML attribute which is then removed once a message fills the aria-live regions. 125 * 126 * @return {HTMLParagraphElement} The explanatory text HTML element. 127 */ 128 129 function addIntroText() { 130 const introText = document.createElement('p'); 131 introText.id = 'a11y-speak-intro-text'; 132 introText.className = 'a11y-speak-intro-text'; 133 introText.textContent = Object(external_wp_i18n_["__"])('Notifications'); 134 introText.setAttribute('style', 'position: absolute;' + 'margin: -1px;' + 'padding: 0;' + 'height: 1px;' + 'width: 1px;' + 'overflow: hidden;' + 'clip: rect(1px, 1px, 1px, 1px);' + '-webkit-clip-path: inset(50%);' + 'clip-path: inset(50%);' + 'border: 0;' + 'word-wrap: normal !important;'); 135 introText.setAttribute('hidden', 'hidden'); 136 const { 137 body 138 } = document; 139 140 if (body) { 141 body.appendChild(introText); 142 } 143 144 return introText; 145 } 146 147 // CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/add-container.js 148 /** 149 * Build the live regions markup. 150 * 151 * @param {string} [ariaLive] Value for the 'aria-live' attribute; default: 'polite'. 152 * 153 * @return {HTMLDivElement} The ARIA live region HTML element. 154 */ 155 function addContainer(ariaLive = 'polite') { 156 const container = document.createElement('div'); 157 container.id = `a11y-speak-${ariaLive}`; 158 container.className = 'a11y-speak-region'; 159 container.setAttribute('style', 'position: absolute;' + 'margin: -1px;' + 'padding: 0;' + 'height: 1px;' + 'width: 1px;' + 'overflow: hidden;' + 'clip: rect(1px, 1px, 1px, 1px);' + '-webkit-clip-path: inset(50%);' + 'clip-path: inset(50%);' + 'border: 0;' + 'word-wrap: normal !important;'); 160 container.setAttribute('aria-live', ariaLive); 161 container.setAttribute('aria-relevant', 'additions text'); 162 container.setAttribute('aria-atomic', 'true'); 163 const { 164 body 165 } = document; 166 167 if (body) { 168 body.appendChild(container); 169 } 170 171 return container; 172 } 173 174 // CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/clear.js 175 /** 176 * Clears the a11y-speak-region elements and hides the explanatory text. 177 */ 178 function clear() { 179 const regions = document.getElementsByClassName('a11y-speak-region'); 180 const introText = document.getElementById('a11y-speak-intro-text'); 181 182 for (let i = 0; i < regions.length; i++) { 183 regions[i].textContent = ''; 184 } // Make sure the explanatory text is hidden from assistive technologies. 185 186 187 if (introText) { 188 introText.setAttribute('hidden', 'hidden'); 189 } 190 } 191 192 // CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/filter-message.js 193 let previousMessage = ''; 194 /** 195 * Filter the message to be announced to the screenreader. 196 * 197 * @param {string} message The message to be announced. 198 * 199 * @return {string} The filtered message. 200 */ 201 202 function filterMessage(message) { 203 /* 204 * Strip HTML tags (if any) from the message string. Ideally, messages should 205 * be simple strings, carefully crafted for specific use with A11ySpeak. 206 * When re-using already existing strings this will ensure simple HTML to be 207 * stripped out and replaced with a space. Browsers will collapse multiple 208 * spaces natively. 209 */ 210 message = message.replace(/<[^<>]+>/g, ' '); 211 /* 212 * Safari + VoiceOver don't announce repeated, identical strings. We use 213 * a `no-break space` to force them to think identical strings are different. 214 */ 215 216 if (previousMessage === message) { 217 message += '\u00A0'; 218 } 219 220 previousMessage = message; 221 return message; 222 } 223 224 // CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/index.js 225 /** 226 * WordPress dependencies 227 */ 228 229 /** 230 * Internal dependencies 231 */ 232 233 234 235 236 237 /** 238 * Create the live regions. 239 */ 240 241 function setup() { 242 const introText = document.getElementById('a11y-speak-intro-text'); 243 const containerAssertive = document.getElementById('a11y-speak-assertive'); 244 const containerPolite = document.getElementById('a11y-speak-polite'); 245 246 if (introText === null) { 247 addIntroText(); 248 } 249 250 if (containerAssertive === null) { 251 addContainer('assertive'); 252 } 253 254 if (containerPolite === null) { 255 addContainer('polite'); 256 } 257 } 258 /** 259 * Run setup on domReady. 260 */ 261 262 external_wp_domReady_default()(setup); 263 /** 264 * Allows you to easily announce dynamic interface updates to screen readers using ARIA live regions. 265 * This module is inspired by the `speak` function in `wp-a11y.js`. 266 * 267 * @param {string} message The message to be announced by assistive technologies. 268 * @param {string} [ariaLive] The politeness level for aria-live; default: 'polite'. 269 * 270 * @example 271 * ```js 272 * import { speak } from '@wordpress/a11y'; 273 * 274 * // For polite messages that shouldn't interrupt what screen readers are currently announcing. 275 * speak( 'The message you want to send to the ARIA live region' ); 276 * 277 * // For assertive messages that should interrupt what screen readers are currently announcing. 278 * speak( 'The message you want to send to the ARIA live region', 'assertive' ); 279 * ``` 280 */ 281 282 function speak(message, ariaLive) { 283 /* 284 * Clear previous messages to allow repeated strings being read out and hide 285 * the explanatory text from assistive technologies. 286 */ 287 clear(); 288 message = filterMessage(message); 289 const introText = document.getElementById('a11y-speak-intro-text'); 290 const containerAssertive = document.getElementById('a11y-speak-assertive'); 291 const containerPolite = document.getElementById('a11y-speak-polite'); 292 293 if (containerAssertive && ariaLive === 'assertive') { 294 containerAssertive.textContent = message; 295 } else if (containerPolite) { 296 containerPolite.textContent = message; 297 } 298 /* 299 * Make the explanatory text available to assistive technologies by removing 300 * the 'hidden' HTML attribute. 301 */ 302 303 304 if (introText) { 305 introText.removeAttribute('hidden'); 306 } 307 } 308 309 310 /***/ }), 311 312 /***/ "l3Sj": 313 /***/ (function(module, exports) { 314 315 (function() { module.exports = window["wp"]["i18n"]; }()); 316 317 /***/ }) 318 319 /******/ });