i18n.js (50774B)
1 this["wp"] = this["wp"] || {}; this["wp"]["i18n"] = 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 = "Vhyj"); 86 /******/ }) 87 /************************************************************************/ 88 /******/ ({ 89 90 /***/ "4Z/T": 91 /***/ (function(module, exports, __webpack_require__) { 92 93 var __WEBPACK_AMD_DEFINE_RESULT__;/* global window, exports, define */ 94 95 !function() { 96 'use strict' 97 98 var re = { 99 not_string: /[^s]/, 100 not_bool: /[^t]/, 101 not_type: /[^T]/, 102 not_primitive: /[^v]/, 103 number: /[diefg]/, 104 numeric_arg: /[bcdiefguxX]/, 105 json: /[j]/, 106 not_json: /[^j]/, 107 text: /^[^\x25]+/, 108 modulo: /^\x25{2}/, 109 placeholder: /^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/, 110 key: /^([a-z_][a-z_\d]*)/i, 111 key_access: /^\.([a-z_][a-z_\d]*)/i, 112 index_access: /^\[(\d+)\]/, 113 sign: /^[+-]/ 114 } 115 116 function sprintf(key) { 117 // `arguments` is not an array, but should be fine for this call 118 return sprintf_format(sprintf_parse(key), arguments) 119 } 120 121 function vsprintf(fmt, argv) { 122 return sprintf.apply(null, [fmt].concat(argv || [])) 123 } 124 125 function sprintf_format(parse_tree, argv) { 126 var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign 127 for (i = 0; i < tree_length; i++) { 128 if (typeof parse_tree[i] === 'string') { 129 output += parse_tree[i] 130 } 131 else if (typeof parse_tree[i] === 'object') { 132 ph = parse_tree[i] // convenience purposes only 133 if (ph.keys) { // keyword argument 134 arg = argv[cursor] 135 for (k = 0; k < ph.keys.length; k++) { 136 if (arg == undefined) { 137 throw new Error(sprintf('[sprintf] Cannot access property "%s" of undefined value "%s"', ph.keys[k], ph.keys[k-1])) 138 } 139 arg = arg[ph.keys[k]] 140 } 141 } 142 else if (ph.param_no) { // positional argument (explicit) 143 arg = argv[ph.param_no] 144 } 145 else { // positional argument (implicit) 146 arg = argv[cursor++] 147 } 148 149 if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) { 150 arg = arg() 151 } 152 153 if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) { 154 throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg)) 155 } 156 157 if (re.number.test(ph.type)) { 158 is_positive = arg >= 0 159 } 160 161 switch (ph.type) { 162 case 'b': 163 arg = parseInt(arg, 10).toString(2) 164 break 165 case 'c': 166 arg = String.fromCharCode(parseInt(arg, 10)) 167 break 168 case 'd': 169 case 'i': 170 arg = parseInt(arg, 10) 171 break 172 case 'j': 173 arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0) 174 break 175 case 'e': 176 arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential() 177 break 178 case 'f': 179 arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg) 180 break 181 case 'g': 182 arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg) 183 break 184 case 'o': 185 arg = (parseInt(arg, 10) >>> 0).toString(8) 186 break 187 case 's': 188 arg = String(arg) 189 arg = (ph.precision ? arg.substring(0, ph.precision) : arg) 190 break 191 case 't': 192 arg = String(!!arg) 193 arg = (ph.precision ? arg.substring(0, ph.precision) : arg) 194 break 195 case 'T': 196 arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase() 197 arg = (ph.precision ? arg.substring(0, ph.precision) : arg) 198 break 199 case 'u': 200 arg = parseInt(arg, 10) >>> 0 201 break 202 case 'v': 203 arg = arg.valueOf() 204 arg = (ph.precision ? arg.substring(0, ph.precision) : arg) 205 break 206 case 'x': 207 arg = (parseInt(arg, 10) >>> 0).toString(16) 208 break 209 case 'X': 210 arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase() 211 break 212 } 213 if (re.json.test(ph.type)) { 214 output += arg 215 } 216 else { 217 if (re.number.test(ph.type) && (!is_positive || ph.sign)) { 218 sign = is_positive ? '+' : '-' 219 arg = arg.toString().replace(re.sign, '') 220 } 221 else { 222 sign = '' 223 } 224 pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' ' 225 pad_length = ph.width - (sign + arg).length 226 pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : '' 227 output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg) 228 } 229 } 230 } 231 return output 232 } 233 234 var sprintf_cache = Object.create(null) 235 236 function sprintf_parse(fmt) { 237 if (sprintf_cache[fmt]) { 238 return sprintf_cache[fmt] 239 } 240 241 var _fmt = fmt, match, parse_tree = [], arg_names = 0 242 while (_fmt) { 243 if ((match = re.text.exec(_fmt)) !== null) { 244 parse_tree.push(match[0]) 245 } 246 else if ((match = re.modulo.exec(_fmt)) !== null) { 247 parse_tree.push('%') 248 } 249 else if ((match = re.placeholder.exec(_fmt)) !== null) { 250 if (match[2]) { 251 arg_names |= 1 252 var field_list = [], replacement_field = match[2], field_match = [] 253 if ((field_match = re.key.exec(replacement_field)) !== null) { 254 field_list.push(field_match[1]) 255 while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { 256 if ((field_match = re.key_access.exec(replacement_field)) !== null) { 257 field_list.push(field_match[1]) 258 } 259 else if ((field_match = re.index_access.exec(replacement_field)) !== null) { 260 field_list.push(field_match[1]) 261 } 262 else { 263 throw new SyntaxError('[sprintf] failed to parse named argument key') 264 } 265 } 266 } 267 else { 268 throw new SyntaxError('[sprintf] failed to parse named argument key') 269 } 270 match[2] = field_list 271 } 272 else { 273 arg_names |= 2 274 } 275 if (arg_names === 3) { 276 throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported') 277 } 278 279 parse_tree.push( 280 { 281 placeholder: match[0], 282 param_no: match[1], 283 keys: match[2], 284 sign: match[3], 285 pad_char: match[4], 286 align: match[5], 287 width: match[6], 288 precision: match[7], 289 type: match[8] 290 } 291 ) 292 } 293 else { 294 throw new SyntaxError('[sprintf] unexpected placeholder') 295 } 296 _fmt = _fmt.substring(match[0].length) 297 } 298 return sprintf_cache[fmt] = parse_tree 299 } 300 301 /** 302 * export to either browser or node.js 303 */ 304 /* eslint-disable quote-props */ 305 if (true) { 306 exports['sprintf'] = sprintf 307 exports['vsprintf'] = vsprintf 308 } 309 if (typeof window !== 'undefined') { 310 window['sprintf'] = sprintf 311 window['vsprintf'] = vsprintf 312 313 if (true) { 314 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { 315 return { 316 'sprintf': sprintf, 317 'vsprintf': vsprintf 318 } 319 }).call(exports, __webpack_require__, exports, module), 320 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) 321 } 322 } 323 /* eslint-enable quote-props */ 324 }(); // eslint-disable-line 325 326 327 /***/ }), 328 329 /***/ "4eJC": 330 /***/ (function(module, exports, __webpack_require__) { 331 332 /** 333 * Memize options object. 334 * 335 * @typedef MemizeOptions 336 * 337 * @property {number} [maxSize] Maximum size of the cache. 338 */ 339 340 /** 341 * Internal cache entry. 342 * 343 * @typedef MemizeCacheNode 344 * 345 * @property {?MemizeCacheNode|undefined} [prev] Previous node. 346 * @property {?MemizeCacheNode|undefined} [next] Next node. 347 * @property {Array<*>} args Function arguments for cache 348 * entry. 349 * @property {*} val Function result. 350 */ 351 352 /** 353 * Properties of the enhanced function for controlling cache. 354 * 355 * @typedef MemizeMemoizedFunction 356 * 357 * @property {()=>void} clear Clear the cache. 358 */ 359 360 /** 361 * Accepts a function to be memoized, and returns a new memoized function, with 362 * optional options. 363 * 364 * @template {Function} F 365 * 366 * @param {F} fn Function to memoize. 367 * @param {MemizeOptions} [options] Options object. 368 * 369 * @return {F & MemizeMemoizedFunction} Memoized function. 370 */ 371 function memize( fn, options ) { 372 var size = 0; 373 374 /** @type {?MemizeCacheNode|undefined} */ 375 var head; 376 377 /** @type {?MemizeCacheNode|undefined} */ 378 var tail; 379 380 options = options || {}; 381 382 function memoized( /* ...args */ ) { 383 var node = head, 384 len = arguments.length, 385 args, i; 386 387 searchCache: while ( node ) { 388 // Perform a shallow equality test to confirm that whether the node 389 // under test is a candidate for the arguments passed. Two arrays 390 // are shallowly equal if their length matches and each entry is 391 // strictly equal between the two sets. Avoid abstracting to a 392 // function which could incur an arguments leaking deoptimization. 393 394 // Check whether node arguments match arguments length 395 if ( node.args.length !== arguments.length ) { 396 node = node.next; 397 continue; 398 } 399 400 // Check whether node arguments match arguments values 401 for ( i = 0; i < len; i++ ) { 402 if ( node.args[ i ] !== arguments[ i ] ) { 403 node = node.next; 404 continue searchCache; 405 } 406 } 407 408 // At this point we can assume we've found a match 409 410 // Surface matched node to head if not already 411 if ( node !== head ) { 412 // As tail, shift to previous. Must only shift if not also 413 // head, since if both head and tail, there is no previous. 414 if ( node === tail ) { 415 tail = node.prev; 416 } 417 418 // Adjust siblings to point to each other. If node was tail, 419 // this also handles new tail's empty `next` assignment. 420 /** @type {MemizeCacheNode} */ ( node.prev ).next = node.next; 421 if ( node.next ) { 422 node.next.prev = node.prev; 423 } 424 425 node.next = head; 426 node.prev = null; 427 /** @type {MemizeCacheNode} */ ( head ).prev = node; 428 head = node; 429 } 430 431 // Return immediately 432 return node.val; 433 } 434 435 // No cached value found. Continue to insertion phase: 436 437 // Create a copy of arguments (avoid leaking deoptimization) 438 args = new Array( len ); 439 for ( i = 0; i < len; i++ ) { 440 args[ i ] = arguments[ i ]; 441 } 442 443 node = { 444 args: args, 445 446 // Generate the result from original function 447 val: fn.apply( null, args ), 448 }; 449 450 // Don't need to check whether node is already head, since it would 451 // have been returned above already if it was 452 453 // Shift existing head down list 454 if ( head ) { 455 head.prev = node; 456 node.next = head; 457 } else { 458 // If no head, follows that there's no tail (at initial or reset) 459 tail = node; 460 } 461 462 // Trim tail if we're reached max size and are pending cache insertion 463 if ( size === /** @type {MemizeOptions} */ ( options ).maxSize ) { 464 tail = /** @type {MemizeCacheNode} */ ( tail ).prev; 465 /** @type {MemizeCacheNode} */ ( tail ).next = null; 466 } else { 467 size++; 468 } 469 470 head = node; 471 472 return node.val; 473 } 474 475 memoized.clear = function() { 476 head = null; 477 tail = null; 478 size = 0; 479 }; 480 481 if ( false ) {} 482 483 // Ignore reason: There's not a clear solution to create an intersection of 484 // the function with additional properties, where the goal is to retain the 485 // function signature of the incoming argument and add control properties 486 // on the return value. 487 488 // @ts-ignore 489 return memoized; 490 } 491 492 module.exports = memize; 493 494 495 /***/ }), 496 497 /***/ "Vhyj": 498 /***/ (function(module, __webpack_exports__, __webpack_require__) { 499 500 "use strict"; 501 // ESM COMPAT FLAG 502 __webpack_require__.r(__webpack_exports__); 503 504 // EXPORTS 505 __webpack_require__.d(__webpack_exports__, "sprintf", function() { return /* reexport */ sprintf_sprintf; }); 506 __webpack_require__.d(__webpack_exports__, "createI18n", function() { return /* reexport */ createI18n; }); 507 __webpack_require__.d(__webpack_exports__, "defaultI18n", function() { return /* reexport */ default_i18n; }); 508 __webpack_require__.d(__webpack_exports__, "setLocaleData", function() { return /* reexport */ default_i18n_setLocaleData; }); 509 __webpack_require__.d(__webpack_exports__, "resetLocaleData", function() { return /* reexport */ default_i18n_resetLocaleData; }); 510 __webpack_require__.d(__webpack_exports__, "getLocaleData", function() { return /* reexport */ default_i18n_getLocaleData; }); 511 __webpack_require__.d(__webpack_exports__, "subscribe", function() { return /* reexport */ default_i18n_subscribe; }); 512 __webpack_require__.d(__webpack_exports__, "__", function() { return /* reexport */ default_i18n_; }); 513 __webpack_require__.d(__webpack_exports__, "_x", function() { return /* reexport */ default_i18n_x; }); 514 __webpack_require__.d(__webpack_exports__, "_n", function() { return /* reexport */ default_i18n_n; }); 515 __webpack_require__.d(__webpack_exports__, "_nx", function() { return /* reexport */ default_i18n_nx; }); 516 __webpack_require__.d(__webpack_exports__, "isRTL", function() { return /* reexport */ default_i18n_isRTL; }); 517 __webpack_require__.d(__webpack_exports__, "hasTranslation", function() { return /* reexport */ default_i18n_hasTranslation; }); 518 519 // EXTERNAL MODULE: ./node_modules/memize/index.js 520 var memize = __webpack_require__("4eJC"); 521 var memize_default = /*#__PURE__*/__webpack_require__.n(memize); 522 523 // EXTERNAL MODULE: ./node_modules/sprintf-js/src/sprintf.js 524 var sprintf = __webpack_require__("4Z/T"); 525 var sprintf_default = /*#__PURE__*/__webpack_require__.n(sprintf); 526 527 // CONCATENATED MODULE: ./node_modules/@wordpress/i18n/build-module/sprintf.js 528 /** 529 * External dependencies 530 */ 531 532 533 /** 534 * Log to console, once per message; or more precisely, per referentially equal 535 * argument set. Because Jed throws errors, we log these to the console instead 536 * to avoid crashing the application. 537 * 538 * @param {...*} args Arguments to pass to `console.error` 539 */ 540 541 const logErrorOnce = memize_default()(console.error); // eslint-disable-line no-console 542 543 /** 544 * Returns a formatted string. If an error occurs in applying the format, the 545 * original format string is returned. 546 * 547 * @param {string} format The format of the string to generate. 548 * @param {...*} args Arguments to apply to the format. 549 * 550 * @see https://www.npmjs.com/package/sprintf-js 551 * 552 * @return {string} The formatted string. 553 */ 554 555 function sprintf_sprintf(format, ...args) { 556 try { 557 return sprintf_default.a.sprintf(format, ...args); 558 } catch (error) { 559 logErrorOnce('sprintf error: \n\n' + error.toString()); 560 return format; 561 } 562 } 563 564 // CONCATENATED MODULE: ./node_modules/@tannin/postfix/index.js 565 var PRECEDENCE, OPENERS, TERMINATORS, PATTERN; 566 567 /** 568 * Operator precedence mapping. 569 * 570 * @type {Object} 571 */ 572 PRECEDENCE = { 573 '(': 9, 574 '!': 8, 575 '*': 7, 576 '/': 7, 577 '%': 7, 578 '+': 6, 579 '-': 6, 580 '<': 5, 581 '<=': 5, 582 '>': 5, 583 '>=': 5, 584 '==': 4, 585 '!=': 4, 586 '&&': 3, 587 '||': 2, 588 '?': 1, 589 '?:': 1, 590 }; 591 592 /** 593 * Characters which signal pair opening, to be terminated by terminators. 594 * 595 * @type {string[]} 596 */ 597 OPENERS = [ '(', '?' ]; 598 599 /** 600 * Characters which signal pair termination, the value an array with the 601 * opener as its first member. The second member is an optional operator 602 * replacement to push to the stack. 603 * 604 * @type {string[]} 605 */ 606 TERMINATORS = { 607 ')': [ '(' ], 608 ':': [ '?', '?:' ], 609 }; 610 611 /** 612 * Pattern matching operators and openers. 613 * 614 * @type {RegExp} 615 */ 616 PATTERN = /<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/; 617 618 /** 619 * Given a C expression, returns the equivalent postfix (Reverse Polish) 620 * notation terms as an array. 621 * 622 * If a postfix string is desired, simply `.join( ' ' )` the result. 623 * 624 * @example 625 * 626 * ```js 627 * import postfix from '@tannin/postfix'; 628 * 629 * postfix( 'n > 1' ); 630 * // ⇒ [ 'n', '1', '>' ] 631 * ``` 632 * 633 * @param {string} expression C expression. 634 * 635 * @return {string[]} Postfix terms. 636 */ 637 function postfix( expression ) { 638 var terms = [], 639 stack = [], 640 match, operator, term, element; 641 642 while ( ( match = expression.match( PATTERN ) ) ) { 643 operator = match[ 0 ]; 644 645 // Term is the string preceding the operator match. It may contain 646 // whitespace, and may be empty (if operator is at beginning). 647 term = expression.substr( 0, match.index ).trim(); 648 if ( term ) { 649 terms.push( term ); 650 } 651 652 while ( ( element = stack.pop() ) ) { 653 if ( TERMINATORS[ operator ] ) { 654 if ( TERMINATORS[ operator ][ 0 ] === element ) { 655 // Substitution works here under assumption that because 656 // the assigned operator will no longer be a terminator, it 657 // will be pushed to the stack during the condition below. 658 operator = TERMINATORS[ operator ][ 1 ] || operator; 659 break; 660 } 661 } else if ( OPENERS.indexOf( element ) >= 0 || PRECEDENCE[ element ] < PRECEDENCE[ operator ] ) { 662 // Push to stack if either an opener or when pop reveals an 663 // element of lower precedence. 664 stack.push( element ); 665 break; 666 } 667 668 // For each popped from stack, push to terms. 669 terms.push( element ); 670 } 671 672 if ( ! TERMINATORS[ operator ] ) { 673 stack.push( operator ); 674 } 675 676 // Slice matched fragment from expression to continue match. 677 expression = expression.substr( match.index + operator.length ); 678 } 679 680 // Push remainder of operand, if exists, to terms. 681 expression = expression.trim(); 682 if ( expression ) { 683 terms.push( expression ); 684 } 685 686 // Pop remaining items from stack into terms. 687 return terms.concat( stack.reverse() ); 688 } 689 690 // CONCATENATED MODULE: ./node_modules/@tannin/evaluate/index.js 691 /** 692 * Operator callback functions. 693 * 694 * @type {Object} 695 */ 696 var OPERATORS = { 697 '!': function( a ) { 698 return ! a; 699 }, 700 '*': function( a, b ) { 701 return a * b; 702 }, 703 '/': function( a, b ) { 704 return a / b; 705 }, 706 '%': function( a, b ) { 707 return a % b; 708 }, 709 '+': function( a, b ) { 710 return a + b; 711 }, 712 '-': function( a, b ) { 713 return a - b; 714 }, 715 '<': function( a, b ) { 716 return a < b; 717 }, 718 '<=': function( a, b ) { 719 return a <= b; 720 }, 721 '>': function( a, b ) { 722 return a > b; 723 }, 724 '>=': function( a, b ) { 725 return a >= b; 726 }, 727 '==': function( a, b ) { 728 return a === b; 729 }, 730 '!=': function( a, b ) { 731 return a !== b; 732 }, 733 '&&': function( a, b ) { 734 return a && b; 735 }, 736 '||': function( a, b ) { 737 return a || b; 738 }, 739 '?:': function( a, b, c ) { 740 if ( a ) { 741 throw b; 742 } 743 744 return c; 745 }, 746 }; 747 748 /** 749 * Given an array of postfix terms and operand variables, returns the result of 750 * the postfix evaluation. 751 * 752 * @example 753 * 754 * ```js 755 * import evaluate from '@tannin/evaluate'; 756 * 757 * // 3 + 4 * 5 / 6 ⇒ '3 4 5 * 6 / +' 758 * const terms = [ '3', '4', '5', '*', '6', '/', '+' ]; 759 * 760 * evaluate( terms, {} ); 761 * // ⇒ 6.333333333333334 762 * ``` 763 * 764 * @param {string[]} postfix Postfix terms. 765 * @param {Object} variables Operand variables. 766 * 767 * @return {*} Result of evaluation. 768 */ 769 function evaluate_evaluate( postfix, variables ) { 770 var stack = [], 771 i, j, args, getOperatorResult, term, value; 772 773 for ( i = 0; i < postfix.length; i++ ) { 774 term = postfix[ i ]; 775 776 getOperatorResult = OPERATORS[ term ]; 777 if ( getOperatorResult ) { 778 // Pop from stack by number of function arguments. 779 j = getOperatorResult.length; 780 args = Array( j ); 781 while ( j-- ) { 782 args[ j ] = stack.pop(); 783 } 784 785 try { 786 value = getOperatorResult.apply( null, args ); 787 } catch ( earlyReturn ) { 788 return earlyReturn; 789 } 790 } else if ( variables.hasOwnProperty( term ) ) { 791 value = variables[ term ]; 792 } else { 793 value = +term; 794 } 795 796 stack.push( value ); 797 } 798 799 return stack[ 0 ]; 800 } 801 802 // CONCATENATED MODULE: ./node_modules/@tannin/compile/index.js 803 804 805 806 /** 807 * Given a C expression, returns a function which can be called to evaluate its 808 * result. 809 * 810 * @example 811 * 812 * ```js 813 * import compile from '@tannin/compile'; 814 * 815 * const evaluate = compile( 'n > 1' ); 816 * 817 * evaluate( { n: 2 } ); 818 * // ⇒ true 819 * ``` 820 * 821 * @param {string} expression C expression. 822 * 823 * @return {(variables?:{[variable:string]:*})=>*} Compiled evaluator. 824 */ 825 function compile( expression ) { 826 var terms = postfix( expression ); 827 828 return function( variables ) { 829 return evaluate_evaluate( terms, variables ); 830 }; 831 } 832 833 // CONCATENATED MODULE: ./node_modules/@tannin/plural-forms/index.js 834 835 836 /** 837 * Given a C expression, returns a function which, when called with a value, 838 * evaluates the result with the value assumed to be the "n" variable of the 839 * expression. The result will be coerced to its numeric equivalent. 840 * 841 * @param {string} expression C expression. 842 * 843 * @return {Function} Evaluator function. 844 */ 845 function pluralForms( expression ) { 846 var evaluate = compile( expression ); 847 848 return function( n ) { 849 return +evaluate( { n: n } ); 850 }; 851 } 852 853 // CONCATENATED MODULE: ./node_modules/tannin/index.js 854 855 856 /** 857 * Tannin constructor options. 858 * 859 * @typedef {Object} TanninOptions 860 * 861 * @property {string} [contextDelimiter] Joiner in string lookup with context. 862 * @property {Function} [onMissingKey] Callback to invoke when key missing. 863 */ 864 865 /** 866 * Domain metadata. 867 * 868 * @typedef {Object} TanninDomainMetadata 869 * 870 * @property {string} [domain] Domain name. 871 * @property {string} [lang] Language code. 872 * @property {(string|Function)} [plural_forms] Plural forms expression or 873 * function evaluator. 874 */ 875 876 /** 877 * Domain translation pair respectively representing the singular and plural 878 * translation. 879 * 880 * @typedef {[string,string]} TanninTranslation 881 */ 882 883 /** 884 * Locale data domain. The key is used as reference for lookup, the value an 885 * array of two string entries respectively representing the singular and plural 886 * translation. 887 * 888 * @typedef {{[key:string]:TanninDomainMetadata|TanninTranslation,'':TanninDomainMetadata|TanninTranslation}} TanninLocaleDomain 889 */ 890 891 /** 892 * Jed-formatted locale data. 893 * 894 * @see http://messageformat.github.io/Jed/ 895 * 896 * @typedef {{[domain:string]:TanninLocaleDomain}} TanninLocaleData 897 */ 898 899 /** 900 * Default Tannin constructor options. 901 * 902 * @type {TanninOptions} 903 */ 904 var DEFAULT_OPTIONS = { 905 contextDelimiter: '\u0004', 906 onMissingKey: null, 907 }; 908 909 /** 910 * Given a specific locale data's config `plural_forms` value, returns the 911 * expression. 912 * 913 * @example 914 * 915 * ``` 916 * getPluralExpression( 'nplurals=2; plural=(n != 1);' ) === '(n != 1)' 917 * ``` 918 * 919 * @param {string} pf Locale data plural forms. 920 * 921 * @return {string} Plural forms expression. 922 */ 923 function getPluralExpression( pf ) { 924 var parts, i, part; 925 926 parts = pf.split( ';' ); 927 928 for ( i = 0; i < parts.length; i++ ) { 929 part = parts[ i ].trim(); 930 if ( part.indexOf( 'plural=' ) === 0 ) { 931 return part.substr( 7 ); 932 } 933 } 934 } 935 936 /** 937 * Tannin constructor. 938 * 939 * @class 940 * 941 * @param {TanninLocaleData} data Jed-formatted locale data. 942 * @param {TanninOptions} [options] Tannin options. 943 */ 944 function Tannin( data, options ) { 945 var key; 946 947 /** 948 * Jed-formatted locale data. 949 * 950 * @name Tannin#data 951 * @type {TanninLocaleData} 952 */ 953 this.data = data; 954 955 /** 956 * Plural forms function cache, keyed by plural forms string. 957 * 958 * @name Tannin#pluralForms 959 * @type {Object<string,Function>} 960 */ 961 this.pluralForms = {}; 962 963 /** 964 * Effective options for instance, including defaults. 965 * 966 * @name Tannin#options 967 * @type {TanninOptions} 968 */ 969 this.options = {}; 970 971 for ( key in DEFAULT_OPTIONS ) { 972 this.options[ key ] = options !== undefined && key in options 973 ? options[ key ] 974 : DEFAULT_OPTIONS[ key ]; 975 } 976 } 977 978 /** 979 * Returns the plural form index for the given domain and value. 980 * 981 * @param {string} domain Domain on which to calculate plural form. 982 * @param {number} n Value for which plural form is to be calculated. 983 * 984 * @return {number} Plural form index. 985 */ 986 Tannin.prototype.getPluralForm = function( domain, n ) { 987 var getPluralForm = this.pluralForms[ domain ], 988 config, plural, pf; 989 990 if ( ! getPluralForm ) { 991 config = this.data[ domain ][ '' ]; 992 993 pf = ( 994 config[ 'Plural-Forms' ] || 995 config[ 'plural-forms' ] || 996 // Ignore reason: As known, there's no way to document the empty 997 // string property on a key to guarantee this as metadata. 998 // @ts-ignore 999 config.plural_forms 1000 ); 1001 1002 if ( typeof pf !== 'function' ) { 1003 plural = getPluralExpression( 1004 config[ 'Plural-Forms' ] || 1005 config[ 'plural-forms' ] || 1006 // Ignore reason: As known, there's no way to document the empty 1007 // string property on a key to guarantee this as metadata. 1008 // @ts-ignore 1009 config.plural_forms 1010 ); 1011 1012 pf = pluralForms( plural ); 1013 } 1014 1015 getPluralForm = this.pluralForms[ domain ] = pf; 1016 } 1017 1018 return getPluralForm( n ); 1019 }; 1020 1021 /** 1022 * Translate a string. 1023 * 1024 * @param {string} domain Translation domain. 1025 * @param {string|void} context Context distinguishing terms of the same name. 1026 * @param {string} singular Primary key for translation lookup. 1027 * @param {string=} plural Fallback value used for non-zero plural 1028 * form index. 1029 * @param {number=} n Value to use in calculating plural form. 1030 * 1031 * @return {string} Translated string. 1032 */ 1033 Tannin.prototype.dcnpgettext = function( domain, context, singular, plural, n ) { 1034 var index, key, entry; 1035 1036 if ( n === undefined ) { 1037 // Default to singular. 1038 index = 0; 1039 } else { 1040 // Find index by evaluating plural form for value. 1041 index = this.getPluralForm( domain, n ); 1042 } 1043 1044 key = singular; 1045 1046 // If provided, context is prepended to key with delimiter. 1047 if ( context ) { 1048 key = context + this.options.contextDelimiter + singular; 1049 } 1050 1051 entry = this.data[ domain ][ key ]; 1052 1053 // Verify not only that entry exists, but that the intended index is within 1054 // range and non-empty. 1055 if ( entry && entry[ index ] ) { 1056 return entry[ index ]; 1057 } 1058 1059 if ( this.options.onMissingKey ) { 1060 this.options.onMissingKey( singular, domain ); 1061 } 1062 1063 // If entry not found, fall back to singular vs. plural with zero index 1064 // representing the singular value. 1065 return index === 0 ? singular : plural; 1066 }; 1067 1068 // CONCATENATED MODULE: ./node_modules/@wordpress/i18n/build-module/create-i18n.js 1069 /** 1070 * External dependencies 1071 */ 1072 1073 /** 1074 * @typedef {Record<string,any>} LocaleData 1075 */ 1076 1077 /** 1078 * Default locale data to use for Tannin domain when not otherwise provided. 1079 * Assumes an English plural forms expression. 1080 * 1081 * @type {LocaleData} 1082 */ 1083 1084 const DEFAULT_LOCALE_DATA = { 1085 '': { 1086 /** @param {number} n */ 1087 plural_forms(n) { 1088 return n === 1 ? 0 : 1; 1089 } 1090 1091 } 1092 }; 1093 /* 1094 * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`, 1095 * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`. 1096 */ 1097 1098 const I18N_HOOK_REGEXP = /^i18n\.(n?gettext|has_translation)(_|$)/; 1099 /** 1100 * @typedef {(domain?: string) => LocaleData} GetLocaleData 1101 * 1102 * Returns locale data by domain in a 1103 * Jed-formatted JSON object shape. 1104 * 1105 * @see http://messageformat.github.io/Jed/ 1106 */ 1107 1108 /** 1109 * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData 1110 * 1111 * Merges locale data into the Tannin instance by domain. Accepts data in a 1112 * Jed-formatted JSON object shape. 1113 * 1114 * @see http://messageformat.github.io/Jed/ 1115 */ 1116 1117 /** 1118 * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData 1119 * 1120 * Resets all current Tannin instance locale data and sets the specified 1121 * locale data for the domain. Accepts data in a Jed-formatted JSON object shape. 1122 * 1123 * @see http://messageformat.github.io/Jed/ 1124 */ 1125 1126 /** @typedef {() => void} SubscribeCallback */ 1127 1128 /** @typedef {() => void} UnsubscribeCallback */ 1129 1130 /** 1131 * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe 1132 * 1133 * Subscribes to changes of locale data 1134 */ 1135 1136 /** 1137 * @typedef {(domain?: string) => string} GetFilterDomain 1138 * Retrieve the domain to use when calling domain-specific filters. 1139 */ 1140 1141 /** 1142 * @typedef {(text: string, domain?: string) => string} __ 1143 * 1144 * Retrieve the translation of text. 1145 * 1146 * @see https://developer.wordpress.org/reference/functions/__/ 1147 */ 1148 1149 /** 1150 * @typedef {(text: string, context: string, domain?: string) => string} _x 1151 * 1152 * Retrieve translated string with gettext context. 1153 * 1154 * @see https://developer.wordpress.org/reference/functions/_x/ 1155 */ 1156 1157 /** 1158 * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n 1159 * 1160 * Translates and retrieves the singular or plural form based on the supplied 1161 * number. 1162 * 1163 * @see https://developer.wordpress.org/reference/functions/_n/ 1164 */ 1165 1166 /** 1167 * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx 1168 * 1169 * Translates and retrieves the singular or plural form based on the supplied 1170 * number, with gettext context. 1171 * 1172 * @see https://developer.wordpress.org/reference/functions/_nx/ 1173 */ 1174 1175 /** 1176 * @typedef {() => boolean} IsRtl 1177 * 1178 * Check if current locale is RTL. 1179 * 1180 * **RTL (Right To Left)** is a locale property indicating that text is written from right to left. 1181 * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common 1182 * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages, 1183 * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`). 1184 */ 1185 1186 /** 1187 * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation 1188 * 1189 * Check if there is a translation for a given string in singular form. 1190 */ 1191 1192 /** @typedef {import('@wordpress/hooks').Hooks} Hooks */ 1193 1194 /** 1195 * An i18n instance 1196 * 1197 * @typedef I18n 1198 * @property {GetLocaleData} getLocaleData Returns locale data by domain in a Jed-formatted JSON object shape. 1199 * @property {SetLocaleData} setLocaleData Merges locale data into the Tannin instance by domain. Accepts data in a 1200 * Jed-formatted JSON object shape. 1201 * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified 1202 * locale data for the domain. Accepts data in a Jed-formatted JSON object shape. 1203 * @property {Subscribe} subscribe Subscribes to changes of Tannin locale data. 1204 * @property {__} __ Retrieve the translation of text. 1205 * @property {_x} _x Retrieve translated string with gettext context. 1206 * @property {_n} _n Translates and retrieves the singular or plural form based on the supplied 1207 * number. 1208 * @property {_nx} _nx Translates and retrieves the singular or plural form based on the supplied 1209 * number, with gettext context. 1210 * @property {IsRtl} isRTL Check if current locale is RTL. 1211 * @property {HasTranslation} hasTranslation Check if there is a translation for a given string. 1212 */ 1213 1214 /** 1215 * Create an i18n instance 1216 * 1217 * @param {LocaleData} [initialData] Locale data configuration. 1218 * @param {string} [initialDomain] Domain for which configuration applies. 1219 * @param {Hooks} [hooks] Hooks implementation. 1220 * @return {I18n} I18n instance 1221 */ 1222 1223 const createI18n = (initialData, initialDomain, hooks) => { 1224 /** 1225 * The underlying instance of Tannin to which exported functions interface. 1226 * 1227 * @type {Tannin} 1228 */ 1229 const tannin = new Tannin({}); 1230 const listeners = new Set(); 1231 1232 const notifyListeners = () => { 1233 listeners.forEach(listener => listener()); 1234 }; 1235 /** 1236 * Subscribe to changes of locale data. 1237 * 1238 * @param {SubscribeCallback} callback Subscription callback. 1239 * @return {UnsubscribeCallback} Unsubscribe callback. 1240 */ 1241 1242 1243 const subscribe = callback => { 1244 listeners.add(callback); 1245 return () => listeners.delete(callback); 1246 }; 1247 /** @type {GetLocaleData} */ 1248 1249 1250 const getLocaleData = (domain = 'default') => tannin.data[domain]; 1251 /** 1252 * @param {LocaleData} [data] 1253 * @param {string} [domain] 1254 */ 1255 1256 1257 const doSetLocaleData = (data, domain = 'default') => { 1258 tannin.data[domain] = { ...DEFAULT_LOCALE_DATA, 1259 ...tannin.data[domain], 1260 ...data 1261 }; // Populate default domain configuration (supported locale date which omits 1262 // a plural forms expression). 1263 1264 tannin.data[domain][''] = { ...DEFAULT_LOCALE_DATA[''], 1265 ...tannin.data[domain][''] 1266 }; 1267 }; 1268 /** @type {SetLocaleData} */ 1269 1270 1271 const setLocaleData = (data, domain) => { 1272 doSetLocaleData(data, domain); 1273 notifyListeners(); 1274 }; 1275 /** @type {ResetLocaleData} */ 1276 1277 1278 const resetLocaleData = (data, domain) => { 1279 // Reset all current Tannin locale data. 1280 tannin.data = {}; // Reset cached plural forms functions cache. 1281 1282 tannin.pluralForms = {}; 1283 setLocaleData(data, domain); 1284 }; 1285 /** 1286 * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not 1287 * otherwise previously assigned. 1288 * 1289 * @param {string|undefined} domain Domain to retrieve the translated text. 1290 * @param {string|undefined} context Context information for the translators. 1291 * @param {string} single Text to translate if non-plural. Used as 1292 * fallback return value on a caught error. 1293 * @param {string} [plural] The text to be used if the number is 1294 * plural. 1295 * @param {number} [number] The number to compare against to use 1296 * either the singular or plural form. 1297 * 1298 * @return {string} The translated string. 1299 */ 1300 1301 1302 const dcnpgettext = (domain = 'default', context, single, plural, number) => { 1303 if (!tannin.data[domain]) { 1304 // use `doSetLocaleData` to set silently, without notifying listeners 1305 doSetLocaleData(undefined, domain); 1306 } 1307 1308 return tannin.dcnpgettext(domain, context, single, plural, number); 1309 }; 1310 /** @type {GetFilterDomain} */ 1311 1312 1313 const getFilterDomain = (domain = 'default') => domain; 1314 /** @type {__} */ 1315 1316 1317 const __ = (text, domain) => { 1318 let translation = dcnpgettext(domain, undefined, text); 1319 1320 if (!hooks) { 1321 return translation; 1322 } 1323 /** 1324 * Filters text with its translation. 1325 * 1326 * @param {string} translation Translated text. 1327 * @param {string} text Text to translate. 1328 * @param {string} domain Text domain. Unique identifier for retrieving translated strings. 1329 */ 1330 1331 1332 translation = 1333 /** @type {string} */ 1334 1335 /** @type {*} */ 1336 hooks.applyFilters('i18n.gettext', translation, text, domain); 1337 return ( 1338 /** @type {string} */ 1339 1340 /** @type {*} */ 1341 hooks.applyFilters('i18n.gettext_' + getFilterDomain(domain), translation, text, domain) 1342 ); 1343 }; 1344 /** @type {_x} */ 1345 1346 1347 const _x = (text, context, domain) => { 1348 let translation = dcnpgettext(domain, context, text); 1349 1350 if (!hooks) { 1351 return translation; 1352 } 1353 /** 1354 * Filters text with its translation based on context information. 1355 * 1356 * @param {string} translation Translated text. 1357 * @param {string} text Text to translate. 1358 * @param {string} context Context information for the translators. 1359 * @param {string} domain Text domain. Unique identifier for retrieving translated strings. 1360 */ 1361 1362 1363 translation = 1364 /** @type {string} */ 1365 1366 /** @type {*} */ 1367 hooks.applyFilters('i18n.gettext_with_context', translation, text, context, domain); 1368 return ( 1369 /** @type {string} */ 1370 1371 /** @type {*} */ 1372 hooks.applyFilters('i18n.gettext_with_context_' + getFilterDomain(domain), translation, text, context, domain) 1373 ); 1374 }; 1375 /** @type {_n} */ 1376 1377 1378 const _n = (single, plural, number, domain) => { 1379 let translation = dcnpgettext(domain, undefined, single, plural, number); 1380 1381 if (!hooks) { 1382 return translation; 1383 } 1384 /** 1385 * Filters the singular or plural form of a string. 1386 * 1387 * @param {string} translation Translated text. 1388 * @param {string} single The text to be used if the number is singular. 1389 * @param {string} plural The text to be used if the number is plural. 1390 * @param {string} number The number to compare against to use either the singular or plural form. 1391 * @param {string} domain Text domain. Unique identifier for retrieving translated strings. 1392 */ 1393 1394 1395 translation = 1396 /** @type {string} */ 1397 1398 /** @type {*} */ 1399 hooks.applyFilters('i18n.ngettext', translation, single, plural, number, domain); 1400 return ( 1401 /** @type {string} */ 1402 1403 /** @type {*} */ 1404 hooks.applyFilters('i18n.ngettext_' + getFilterDomain(domain), translation, single, plural, number, domain) 1405 ); 1406 }; 1407 /** @type {_nx} */ 1408 1409 1410 const _nx = (single, plural, number, context, domain) => { 1411 let translation = dcnpgettext(domain, context, single, plural, number); 1412 1413 if (!hooks) { 1414 return translation; 1415 } 1416 /** 1417 * Filters the singular or plural form of a string with gettext context. 1418 * 1419 * @param {string} translation Translated text. 1420 * @param {string} single The text to be used if the number is singular. 1421 * @param {string} plural The text to be used if the number is plural. 1422 * @param {string} number The number to compare against to use either the singular or plural form. 1423 * @param {string} context Context information for the translators. 1424 * @param {string} domain Text domain. Unique identifier for retrieving translated strings. 1425 */ 1426 1427 1428 translation = 1429 /** @type {string} */ 1430 1431 /** @type {*} */ 1432 hooks.applyFilters('i18n.ngettext_with_context', translation, single, plural, number, context, domain); 1433 return ( 1434 /** @type {string} */ 1435 1436 /** @type {*} */ 1437 hooks.applyFilters('i18n.ngettext_with_context_' + getFilterDomain(domain), translation, single, plural, number, context, domain) 1438 ); 1439 }; 1440 /** @type {IsRtl} */ 1441 1442 1443 const isRTL = () => { 1444 return 'rtl' === _x('ltr', 'text direction'); 1445 }; 1446 /** @type {HasTranslation} */ 1447 1448 1449 const hasTranslation = (single, context, domain) => { 1450 var _tannin$data, _tannin$data2; 1451 1452 const key = context ? context + '\u0004' + single : single; 1453 let result = !!((_tannin$data = tannin.data) !== null && _tannin$data !== void 0 && (_tannin$data2 = _tannin$data[domain !== null && domain !== void 0 ? domain : 'default']) !== null && _tannin$data2 !== void 0 && _tannin$data2[key]); 1454 1455 if (hooks) { 1456 /** 1457 * Filters the presence of a translation in the locale data. 1458 * 1459 * @param {boolean} hasTranslation Whether the translation is present or not.. 1460 * @param {string} single The singular form of the translated text (used as key in locale data) 1461 * @param {string} context Context information for the translators. 1462 * @param {string} domain Text domain. Unique identifier for retrieving translated strings. 1463 */ 1464 result = 1465 /** @type { boolean } */ 1466 1467 /** @type {*} */ 1468 hooks.applyFilters('i18n.has_translation', result, single, context, domain); 1469 result = 1470 /** @type { boolean } */ 1471 1472 /** @type {*} */ 1473 hooks.applyFilters('i18n.has_translation_' + getFilterDomain(domain), result, single, context, domain); 1474 } 1475 1476 return result; 1477 }; 1478 1479 if (initialData) { 1480 setLocaleData(initialData, initialDomain); 1481 } 1482 1483 if (hooks) { 1484 /** 1485 * @param {string} hookName 1486 */ 1487 const onHookAddedOrRemoved = hookName => { 1488 if (I18N_HOOK_REGEXP.test(hookName)) { 1489 notifyListeners(); 1490 } 1491 }; 1492 1493 hooks.addAction('hookAdded', 'core/i18n', onHookAddedOrRemoved); 1494 hooks.addAction('hookRemoved', 'core/i18n', onHookAddedOrRemoved); 1495 } 1496 1497 return { 1498 getLocaleData, 1499 setLocaleData, 1500 resetLocaleData, 1501 subscribe, 1502 __, 1503 _x, 1504 _n, 1505 _nx, 1506 isRTL, 1507 hasTranslation 1508 }; 1509 }; 1510 1511 // EXTERNAL MODULE: external ["wp","hooks"] 1512 var external_wp_hooks_ = __webpack_require__("g56x"); 1513 1514 // CONCATENATED MODULE: ./node_modules/@wordpress/i18n/build-module/default-i18n.js 1515 /** 1516 * Internal dependencies 1517 */ 1518 1519 /** 1520 * WordPress dependencies 1521 */ 1522 1523 1524 const i18n = createI18n(undefined, undefined, external_wp_hooks_["defaultHooks"]); 1525 /** 1526 * Default, singleton instance of `I18n`. 1527 */ 1528 1529 /* harmony default export */ var default_i18n = (i18n); 1530 /* 1531 * Comments in this file are duplicated from ./i18n due to 1532 * https://github.com/WordPress/gutenberg/pull/20318#issuecomment-590837722 1533 */ 1534 1535 /** 1536 * @typedef {import('./create-i18n').LocaleData} LocaleData 1537 * @typedef {import('./create-i18n').SubscribeCallback} SubscribeCallback 1538 * @typedef {import('./create-i18n').UnsubscribeCallback} UnsubscribeCallback 1539 */ 1540 1541 /** 1542 * Returns locale data by domain in a Jed-formatted JSON object shape. 1543 * 1544 * @see http://messageformat.github.io/Jed/ 1545 * 1546 * @param {string} [domain] Domain for which to get the data. 1547 * @return {LocaleData} Locale data. 1548 */ 1549 1550 const default_i18n_getLocaleData = i18n.getLocaleData.bind(i18n); 1551 /** 1552 * Merges locale data into the Tannin instance by domain. Accepts data in a 1553 * Jed-formatted JSON object shape. 1554 * 1555 * @see http://messageformat.github.io/Jed/ 1556 * 1557 * @param {LocaleData} [data] Locale data configuration. 1558 * @param {string} [domain] Domain for which configuration applies. 1559 */ 1560 1561 const default_i18n_setLocaleData = i18n.setLocaleData.bind(i18n); 1562 /** 1563 * Resets all current Tannin instance locale data and sets the specified 1564 * locale data for the domain. Accepts data in a Jed-formatted JSON object shape. 1565 * 1566 * @see http://messageformat.github.io/Jed/ 1567 * 1568 * @param {LocaleData} [data] Locale data configuration. 1569 * @param {string} [domain] Domain for which configuration applies. 1570 */ 1571 1572 const default_i18n_resetLocaleData = i18n.resetLocaleData.bind(i18n); 1573 /** 1574 * Subscribes to changes of locale data 1575 * 1576 * @param {SubscribeCallback} callback Subscription callback 1577 * @return {UnsubscribeCallback} Unsubscribe callback 1578 */ 1579 1580 const default_i18n_subscribe = i18n.subscribe.bind(i18n); 1581 /** 1582 * Retrieve the translation of text. 1583 * 1584 * @see https://developer.wordpress.org/reference/functions/__/ 1585 * 1586 * @param {string} text Text to translate. 1587 * @param {string} [domain] Domain to retrieve the translated text. 1588 * 1589 * @return {string} Translated text. 1590 */ 1591 1592 const default_i18n_ = i18n.__.bind(i18n); 1593 /** 1594 * Retrieve translated string with gettext context. 1595 * 1596 * @see https://developer.wordpress.org/reference/functions/_x/ 1597 * 1598 * @param {string} text Text to translate. 1599 * @param {string} context Context information for the translators. 1600 * @param {string} [domain] Domain to retrieve the translated text. 1601 * 1602 * @return {string} Translated context string without pipe. 1603 */ 1604 1605 const default_i18n_x = i18n._x.bind(i18n); 1606 /** 1607 * Translates and retrieves the singular or plural form based on the supplied 1608 * number. 1609 * 1610 * @see https://developer.wordpress.org/reference/functions/_n/ 1611 * 1612 * @param {string} single The text to be used if the number is singular. 1613 * @param {string} plural The text to be used if the number is plural. 1614 * @param {number} number The number to compare against to use either the 1615 * singular or plural form. 1616 * @param {string} [domain] Domain to retrieve the translated text. 1617 * 1618 * @return {string} The translated singular or plural form. 1619 */ 1620 1621 const default_i18n_n = i18n._n.bind(i18n); 1622 /** 1623 * Translates and retrieves the singular or plural form based on the supplied 1624 * number, with gettext context. 1625 * 1626 * @see https://developer.wordpress.org/reference/functions/_nx/ 1627 * 1628 * @param {string} single The text to be used if the number is singular. 1629 * @param {string} plural The text to be used if the number is plural. 1630 * @param {number} number The number to compare against to use either the 1631 * singular or plural form. 1632 * @param {string} context Context information for the translators. 1633 * @param {string} [domain] Domain to retrieve the translated text. 1634 * 1635 * @return {string} The translated singular or plural form. 1636 */ 1637 1638 const default_i18n_nx = i18n._nx.bind(i18n); 1639 /** 1640 * Check if current locale is RTL. 1641 * 1642 * **RTL (Right To Left)** is a locale property indicating that text is written from right to left. 1643 * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common 1644 * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages, 1645 * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`). 1646 * 1647 * @return {boolean} Whether locale is RTL. 1648 */ 1649 1650 const default_i18n_isRTL = i18n.isRTL.bind(i18n); 1651 /** 1652 * Check if there is a translation for a given string (in singular form). 1653 * 1654 * @param {string} single Singular form of the string to look up. 1655 * @param {string} [context] Context information for the translators. 1656 * @param {string} [domain] Domain to retrieve the translated text. 1657 * @return {boolean} Whether the translation exists or not. 1658 */ 1659 1660 const default_i18n_hasTranslation = i18n.hasTranslation.bind(i18n); 1661 1662 // CONCATENATED MODULE: ./node_modules/@wordpress/i18n/build-module/index.js 1663 1664 1665 1666 1667 1668 /***/ }), 1669 1670 /***/ "g56x": 1671 /***/ (function(module, exports) { 1672 1673 (function() { module.exports = window["wp"]["hooks"]; }()); 1674 1675 /***/ }) 1676 1677 /******/ });