PluginProbe
Gutenberg / 8.5.1
Gutenberg v8.5.1
24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 All 403 releases
← All changes | build/shortcode/index.js +1 -600 12.6.0 → 8.5.1 View file →
@@ -1,600 +1 @@
1 -/******/ (function() { // webpackBootstrap
2 -/******/ var __webpack_modules__ = ({
3 -
4 -/***/ 9588:
5 -/***/ (function(module) {
6 -
7 -/**
8 - * Memize options object.
9 - *
10 - * @typedef MemizeOptions
11 - *
12 - * @property {number} [maxSize] Maximum size of the cache.
13 - */
14 -
15 -/**
16 - * Internal cache entry.
17 - *
18 - * @typedef MemizeCacheNode
19 - *
20 - * @property {?MemizeCacheNode|undefined} [prev] Previous node.
21 - * @property {?MemizeCacheNode|undefined} [next] Next node.
22 - * @property {Array<*>} args Function arguments for cache
23 - * entry.
24 - * @property {*} val Function result.
25 - */
26 -
27 -/**
28 - * Properties of the enhanced function for controlling cache.
29 - *
30 - * @typedef MemizeMemoizedFunction
31 - *
32 - * @property {()=>void} clear Clear the cache.
33 - */
34 -
35 -/**
36 - * Accepts a function to be memoized, and returns a new memoized function, with
37 - * optional options.
38 - *
39 - * @template {Function} F
40 - *
41 - * @param {F} fn Function to memoize.
42 - * @param {MemizeOptions} [options] Options object.
43 - *
44 - * @return {F & MemizeMemoizedFunction} Memoized function.
45 - */
46 -function memize( fn, options ) {
47 - var size = 0;
48 -
49 - /** @type {?MemizeCacheNode|undefined} */
50 - var head;
51 -
52 - /** @type {?MemizeCacheNode|undefined} */
53 - var tail;
54 -
55 - options = options || {};
56 -
57 - function memoized( /* ...args */ ) {
58 - var node = head,
59 - len = arguments.length,
60 - args, i;
61 -
62 - searchCache: while ( node ) {
63 - // Perform a shallow equality test to confirm that whether the node
64 - // under test is a candidate for the arguments passed. Two arrays
65 - // are shallowly equal if their length matches and each entry is
66 - // strictly equal between the two sets. Avoid abstracting to a
67 - // function which could incur an arguments leaking deoptimization.
68 -
69 - // Check whether node arguments match arguments length
70 - if ( node.args.length !== arguments.length ) {
71 - node = node.next;
72 - continue;
73 - }
74 -
75 - // Check whether node arguments match arguments values
76 - for ( i = 0; i < len; i++ ) {
77 - if ( node.args[ i ] !== arguments[ i ] ) {
78 - node = node.next;
79 - continue searchCache;
80 - }
81 - }
82 -
83 - // At this point we can assume we've found a match
84 -
85 - // Surface matched node to head if not already
86 - if ( node !== head ) {
87 - // As tail, shift to previous. Must only shift if not also
88 - // head, since if both head and tail, there is no previous.
89 - if ( node === tail ) {
90 - tail = node.prev;
91 - }
92 -
93 - // Adjust siblings to point to each other. If node was tail,
94 - // this also handles new tail's empty `next` assignment.
95 - /** @type {MemizeCacheNode} */ ( node.prev ).next = node.next;
96 - if ( node.next ) {
97 - node.next.prev = node.prev;
98 - }
99 -
100 - node.next = head;
101 - node.prev = null;
102 - /** @type {MemizeCacheNode} */ ( head ).prev = node;
103 - head = node;
104 - }
105 -
106 - // Return immediately
107 - return node.val;
108 - }
109 -
110 - // No cached value found. Continue to insertion phase:
111 -
112 - // Create a copy of arguments (avoid leaking deoptimization)
113 - args = new Array( len );
114 - for ( i = 0; i < len; i++ ) {
115 - args[ i ] = arguments[ i ];
116 - }
117 -
118 - node = {
119 - args: args,
120 -
121 - // Generate the result from original function
122 - val: fn.apply( null, args ),
123 - };
124 -
125 - // Don't need to check whether node is already head, since it would
126 - // have been returned above already if it was
127 -
128 - // Shift existing head down list
129 - if ( head ) {
130 - head.prev = node;
131 - node.next = head;
132 - } else {
133 - // If no head, follows that there's no tail (at initial or reset)
134 - tail = node;
135 - }
136 -
137 - // Trim tail if we're reached max size and are pending cache insertion
138 - if ( size === /** @type {MemizeOptions} */ ( options ).maxSize ) {
139 - tail = /** @type {MemizeCacheNode} */ ( tail ).prev;
140 - /** @type {MemizeCacheNode} */ ( tail ).next = null;
141 - } else {
142 - size++;
143 - }
144 -
145 - head = node;
146 -
147 - return node.val;
148 - }
149 -
150 - memoized.clear = function() {
151 - head = null;
152 - tail = null;
153 - size = 0;
154 - };
155 -
156 - if ( false ) {}
157 -
158 - // Ignore reason: There's not a clear solution to create an intersection of
159 - // the function with additional properties, where the goal is to retain the
160 - // function signature of the incoming argument and add control properties
161 - // on the return value.
162 -
163 - // @ts-ignore
164 - return memoized;
165 -}
166 -
167 -module.exports = memize;
168 -
169 -
170 -/***/ })
171 -
172 -/******/ });
173 -/************************************************************************/
174 -/******/ // The module cache
175 -/******/ var __webpack_module_cache__ = {};
176 -/******/
177 -/******/ // The require function
178 -/******/ function __webpack_require__(moduleId) {
179 -/******/ // Check if module is in cache
180 -/******/ var cachedModule = __webpack_module_cache__[moduleId];
181 -/******/ if (cachedModule !== undefined) {
182 -/******/ return cachedModule.exports;
183 -/******/ }
184 -/******/ // Create a new module (and put it into the cache)
185 -/******/ var module = __webpack_module_cache__[moduleId] = {
186 -/******/ // no module.id needed
187 -/******/ // no module.loaded needed
188 -/******/ exports: {}
189 -/******/ };
190 -/******/
191 -/******/ // Execute the module function
192 -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
193 -/******/
194 -/******/ // Return the exports of the module
195 -/******/ return module.exports;
196 -/******/ }
197 -/******/
198 -/************************************************************************/
199 -/******/ /* webpack/runtime/compat get default export */
200 -/******/ !function() {
201 -/******/ // getDefaultExport function for compatibility with non-harmony modules
202 -/******/ __webpack_require__.n = function(module) {
203 -/******/ var getter = module && module.__esModule ?
204 -/******/ function() { return module['default']; } :
205 -/******/ function() { return module; };
206 -/******/ __webpack_require__.d(getter, { a: getter });
207 -/******/ return getter;
208 -/******/ };
209 -/******/ }();
210 -/******/
211 -/******/ /* webpack/runtime/define property getters */
212 -/******/ !function() {
213 -/******/ // define getter functions for harmony exports
214 -/******/ __webpack_require__.d = function(exports, definition) {
215 -/******/ for(var key in definition) {
216 -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
217 -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
218 -/******/ }
219 -/******/ }
220 -/******/ };
221 -/******/ }();
222 -/******/
223 -/******/ /* webpack/runtime/hasOwnProperty shorthand */
224 -/******/ !function() {
225 -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
226 -/******/ }();
227 -/******/
228 -/************************************************************************/
229 -var __webpack_exports__ = {};
230 -// This entry need to be wrapped in an IIFE because it need to be in strict mode.
231 -!function() {
232 -"use strict";
233 -
234 -// EXPORTS
235 -__webpack_require__.d(__webpack_exports__, {
236 - "default": function() { return /* binding */ build_module; }
237 -});
238 -
239 -// UNUSED EXPORTS: attrs, fromMatch, next, regexp, replace, string
240 -
241 -;// CONCATENATED MODULE: external "lodash"
242 -var external_lodash_namespaceObject = window["lodash"];
243 -// EXTERNAL MODULE: ./node_modules/memize/index.js
244 -var memize = __webpack_require__(9588);
245 -var memize_default = /*#__PURE__*/__webpack_require__.n(memize);
246 -;// CONCATENATED MODULE: ./packages/shortcode/build-module/index.js
247 -/**
248 - * External dependencies
249 - */
250 -
251 -
252 -/**
253 - * Shortcode attributes object.
254 - *
255 - * @typedef {Object} WPShortcodeAttrs
256 - *
257 - * @property {Object} named Object with named attributes.
258 - * @property {Array} numeric Array with numeric attributes.
259 - */
260 -
261 -/**
262 - * Shortcode object.
263 - *
264 - * @typedef {Object} WPShortcode
265 - *
266 - * @property {string} tag Shortcode tag.
267 - * @property {WPShortcodeAttrs} attrs Shortcode attributes.
268 - * @property {string} content Shortcode content.
269 - * @property {string} type Shortcode type: `self-closing`,
270 - * `closed`, or `single`.
271 - */
272 -
273 -/**
274 - * @typedef {Object} WPShortcodeMatch
275 - *
276 - * @property {number} index Index the shortcode is found at.
277 - * @property {string} content Matched content.
278 - * @property {WPShortcode} shortcode Shortcode instance of the match.
279 - */
280 -
281 -/**
282 - * Find the next matching shortcode.
283 - *
284 - * @param {string} tag Shortcode tag.
285 - * @param {string} text Text to search.
286 - * @param {number} index Index to start search from.
287 - *
288 - * @return {?WPShortcodeMatch} Matched information.
289 - */
290 -
291 -function next(tag, text) {
292 - let index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
293 - const re = regexp(tag);
294 - re.lastIndex = index;
295 - const match = re.exec(text);
296 -
297 - if (!match) {
298 - return;
299 - } // If we matched an escaped shortcode, try again.
300 -
301 -
302 - if ('[' === match[1] && ']' === match[7]) {
303 - return next(tag, text, re.lastIndex);
304 - }
305 -
306 - const result = {
307 - index: match.index,
308 - content: match[0],
309 - shortcode: fromMatch(match)
310 - }; // If we matched a leading `[`, strip it from the match and increment the
311 - // index accordingly.
312 -
313 - if (match[1]) {
314 - result.content = result.content.slice(1);
315 - result.index++;
316 - } // If we matched a trailing `]`, strip it from the match.
317 -
318 -
319 - if (match[7]) {
320 - result.content = result.content.slice(0, -1);
321 - }
322 -
323 - return result;
324 -}
325 -/**
326 - * Replace matching shortcodes in a block of text.
327 - *
328 - * @param {string} tag Shortcode tag.
329 - * @param {string} text Text to search.
330 - * @param {Function} callback Function to process the match and return
331 - * replacement string.
332 - *
333 - * @return {string} Text with shortcodes replaced.
334 - */
335 -
336 -function replace(tag, text, callback) {
337 - return text.replace(regexp(tag), function (match, left, $3, attrs, slash, content, closing, right) {
338 - // If both extra brackets exist, the shortcode has been properly
339 - // escaped.
340 - if (left === '[' && right === ']') {
341 - return match;
342 - } // Create the match object and pass it through the callback.
343 -
344 -
345 - const result = callback(fromMatch(arguments)); // Make sure to return any of the extra brackets if they weren't used to
346 - // escape the shortcode.
347 -
348 - return result || result === '' ? left + result + right : match;
349 - });
350 -}
351 -/**
352 - * Generate a string from shortcode parameters.
353 - *
354 - * Creates a shortcode instance and returns a string.
355 - *
356 - * Accepts the same `options` as the `shortcode()` constructor, containing a
357 - * `tag` string, a string or object of `attrs`, a boolean indicating whether to
358 - * format the shortcode using a `single` tag, and a `content` string.
359 - *
360 - * @param {Object} options
361 - *
362 - * @return {string} String representation of the shortcode.
363 - */
364 -
365 -function string(options) {
366 - return new shortcode(options).string();
367 -}
368 -/**
369 - * Generate a RegExp to identify a shortcode.
370 - *
371 - * The base regex is functionally equivalent to the one found in
372 - * `get_shortcode_regex()` in `wp-includes/shortcodes.php`.
373 - *
374 - * Capture groups:
375 - *
376 - * 1. An extra `[` to allow for escaping shortcodes with double `[[]]`
377 - * 2. The shortcode name
378 - * 3. The shortcode argument list
379 - * 4. The self closing `/`
380 - * 5. The content of a shortcode when it wraps some content.
381 - * 6. The closing tag.
382 - * 7. An extra `]` to allow for escaping shortcodes with double `[[]]`
383 - *
384 - * @param {string} tag Shortcode tag.
385 - *
386 - * @return {RegExp} Shortcode RegExp.
387 - */
388 -
389 -function regexp(tag) {
390 - return new RegExp('\\[(\\[?)(' + tag + ')(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*(?:\\[(?!\\/\\2\\])[^\\[]*)*)(\\[\\/\\2\\]))?)(\\]?)', 'g');
391 -}
392 -/**
393 - * Parse shortcode attributes.
394 - *
395 - * Shortcodes accept many types of attributes. These can chiefly be divided into
396 - * named and numeric attributes:
397 - *
398 - * Named attributes are assigned on a key/value basis, while numeric attributes
399 - * are treated as an array.
400 - *
401 - * Named attributes can be formatted as either `name="value"`, `name='value'`,
402 - * or `name=value`. Numeric attributes can be formatted as `"value"` or just
403 - * `value`.
404 - *
405 - * @param {string} text Serialised shortcode attributes.
406 - *
407 - * @return {WPShortcodeAttrs} Parsed shortcode attributes.
408 - */
409 -
410 -const attrs = memize_default()(text => {
411 - const named = {};
412 - const numeric = []; // This regular expression is reused from `shortcode_parse_atts()` in
413 - // `wp-includes/shortcodes.php`.
414 - //
415 - // Capture groups:
416 - //
417 - // 1. An attribute name, that corresponds to...
418 - // 2. a value in double quotes.
419 - // 3. An attribute name, that corresponds to...
420 - // 4. a value in single quotes.
421 - // 5. An attribute name, that corresponds to...
422 - // 6. an unquoted value.
423 - // 7. A numeric attribute in double quotes.
424 - // 8. A numeric attribute in single quotes.
425 - // 9. An unquoted numeric attribute.
426 -
427 - const pattern = /([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*'([^']*)'(?:\s|$)|([\w-]+)\s*=\s*([^\s'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|'([^']*)'(?:\s|$)|(\S+)(?:\s|$)/g; // Map zero-width spaces to actual spaces.
428 -
429 - text = text.replace(/[\u00a0\u200b]/g, ' ');
430 - let match; // Match and normalize attributes.
431 -
432 - while (match = pattern.exec(text)) {
433 - if (match[1]) {
434 - named[match[1].toLowerCase()] = match[2];
435 - } else if (match[3]) {
436 - named[match[3].toLowerCase()] = match[4];
437 - } else if (match[5]) {
438 - named[match[5].toLowerCase()] = match[6];
439 - } else if (match[7]) {
440 - numeric.push(match[7]);
441 - } else if (match[8]) {
442 - numeric.push(match[8]);
443 - } else if (match[9]) {
444 - numeric.push(match[9]);
445 - }
446 - }
447 -
448 - return {
449 - named,
450 - numeric
451 - };
452 -});
453 -/**
454 - * Generate a Shortcode Object from a RegExp match.
455 - *
456 - * Accepts a `match` object from calling `regexp.exec()` on a `RegExp` generated
457 - * by `regexp()`. `match` can also be set to the `arguments` from a callback
458 - * passed to `regexp.replace()`.
459 - *
460 - * @param {Array} match Match array.
461 - *
462 - * @return {WPShortcode} Shortcode instance.
463 - */
464 -
465 -function fromMatch(match) {
466 - let type;
467 -
468 - if (match[4]) {
469 - type = 'self-closing';
470 - } else if (match[6]) {
471 - type = 'closed';
472 - } else {
473 - type = 'single';
474 - }
475 -
476 - return new shortcode({
477 - tag: match[2],
478 - attrs: match[3],
479 - type,
480 - content: match[5]
481 - });
482 -}
483 -/**
484 - * Creates a shortcode instance.
485 - *
486 - * To access a raw representation of a shortcode, pass an `options` object,
487 - * containing a `tag` string, a string or object of `attrs`, a string indicating
488 - * the `type` of the shortcode ('single', 'self-closing', or 'closed'), and a
489 - * `content` string.
490 - *
491 - * @param {Object} options Options as described.
492 - *
493 - * @return {WPShortcode} Shortcode instance.
494 - */
495 -
496 -const shortcode = (0,external_lodash_namespaceObject.extend)(function (options) {
497 - (0,external_lodash_namespaceObject.extend)(this, (0,external_lodash_namespaceObject.pick)(options || {}, 'tag', 'attrs', 'type', 'content'));
498 - const attributes = this.attrs; // Ensure we have a correctly formatted `attrs` object.
499 -
500 - this.attrs = {
501 - named: {},
502 - numeric: []
503 - };
504 -
505 - if (!attributes) {
506 - return;
507 - } // Parse a string of attributes.
508 -
509 -
510 - if ((0,external_lodash_namespaceObject.isString)(attributes)) {
511 - this.attrs = attrs(attributes); // Identify a correctly formatted `attrs` object.
512 - } else if ((0,external_lodash_namespaceObject.isEqual)(Object.keys(attributes), ['named', 'numeric'])) {
513 - this.attrs = attributes; // Handle a flat object of attributes.
514 - } else {
515 - (0,external_lodash_namespaceObject.forEach)(attributes, (value, key) => {
516 - this.set(key, value);
517 - });
518 - }
519 -}, {
520 - next,
521 - replace,
522 - string,
523 - regexp,
524 - attrs,
525 - fromMatch
526 -});
527 -(0,external_lodash_namespaceObject.extend)(shortcode.prototype, {
528 - /**
529 - * Get a shortcode attribute.
530 - *
531 - * Automatically detects whether `attr` is named or numeric and routes it
532 - * accordingly.
533 - *
534 - * @param {(number|string)} attr Attribute key.
535 - *
536 - * @return {string} Attribute value.
537 - */
538 - get(attr) {
539 - return this.attrs[(0,external_lodash_namespaceObject.isNumber)(attr) ? 'numeric' : 'named'][attr];
540 - },
541 -
542 - /**
543 - * Set a shortcode attribute.
544 - *
545 - * Automatically detects whether `attr` is named or numeric and routes it
546 - * accordingly.
547 - *
548 - * @param {(number|string)} attr Attribute key.
549 - * @param {string} value Attribute value.
550 - *
551 - * @return {WPShortcode} Shortcode instance.
552 - */
553 - set(attr, value) {
554 - this.attrs[(0,external_lodash_namespaceObject.isNumber)(attr) ? 'numeric' : 'named'][attr] = value;
555 - return this;
556 - },
557 -
558 - /**
559 - * Transform the shortcode into a string.
560 - *
561 - * @return {string} String representation of the shortcode.
562 - */
563 - string() {
564 - let text = '[' + this.tag;
565 - (0,external_lodash_namespaceObject.forEach)(this.attrs.numeric, value => {
566 - if (/\s/.test(value)) {
567 - text += ' "' + value + '"';
568 - } else {
569 - text += ' ' + value;
570 - }
571 - });
572 - (0,external_lodash_namespaceObject.forEach)(this.attrs.named, (value, name) => {
573 - text += ' ' + name + '="' + value + '"';
574 - }); // If the tag is marked as `single` or `self-closing`, close the tag and
575 - // ignore any additional content.
576 -
577 - if ('single' === this.type) {
578 - return text + ']';
579 - } else if ('self-closing' === this.type) {
580 - return text + ' /]';
581 - } // Complete the opening tag.
582 -
583 -
584 - text += ']';
585 -
586 - if (this.content) {
587 - text += this.content;
588 - } // Add the closing tag.
589 -
590 -
591 - return text + '[/' + this.tag + ']';
592 - }
593 -
594 -});
595 -/* harmony default export */ var build_module = (shortcode);
596 -//# sourceMappingURL=index.js.map
597 -}();
598 -(window.wp = window.wp || {}).shortcode = __webpack_exports__["default"];
599 -/******/ })()
600 -;
1 +this.wp=this.wp||{},this.wp.shortcode=function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=372)}({2:function(t,e){!function(){t.exports=this.lodash}()},372:function(t,e,n){"use strict";n.r(e),n.d(e,"next",(function(){return u})),n.d(e,"replace",(function(){return o})),n.d(e,"string",(function(){return c})),n.d(e,"regexp",(function(){return s})),n.d(e,"attrs",(function(){return a})),n.d(e,"fromMatch",(function(){return f}));var r=n(2),i=n(52);function u(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=s(t);r.lastIndex=n;var i=r.exec(e);if(i){if("["===i[1]&&"]"===i[7])return u(t,e,r.lastIndex);var o={index:i.index,content:i[0],shortcode:f(i)};return i[1]&&(o.content=o.content.slice(1),o.index++),i[7]&&(o.content=o.content.slice(0,-1)),o}}function o(t,e,n){return e.replace(s(t),(function(t,e,r,i,u,o,c,s){if("["===e&&"]"===s)return t;var a=n(f(arguments));return a?e+a+s:t}))}function c(t){return new l(t).string()}function s(t){return new RegExp("\\[(\\[?)("+t+")(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*(?:\\[(?!\\/\\2\\])[^\\[]*)*)(\\[\\/\\2\\]))?)(\\]?)","g")}var a=n.n(i)()((function(t){var e,n={},r=[],i=/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*'([^']*)'(?:\s|$)|([\w-]+)\s*=\s*([^\s'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|'([^']*)'(?:\s|$)|(\S+)(?:\s|$)/g;for(t=t.replace(/[\u00a0\u200b]/g," ");e=i.exec(t);)e[1]?n[e[1].toLowerCase()]=e[2]:e[3]?n[e[3].toLowerCase()]=e[4]:e[5]?n[e[5].toLowerCase()]=e[6]:e[7]?r.push(e[7]):e[8]?r.push(e[8]):e[9]&&r.push(e[9]);return{named:n,numeric:r}}));function f(t){var e;return e=t[4]?"self-closing":t[6]?"closed":"single",new l({tag:t[2],attrs:t[3],type:e,content:t[5]})}var l=Object(r.extend)((function(t){var e=this;Object(r.extend)(this,Object(r.pick)(t||{},"tag","attrs","type","content"));var n=this.attrs;this.attrs={named:{},numeric:[]},n&&(Object(r.isString)(n)?this.attrs=a(n):Object(r.isEqual)(Object.keys(n),["named","numeric"])?this.attrs=n:Object(r.forEach)(n,(function(t,n){e.set(n,t)})))}),{next:u,replace:o,string:c,regexp:s,attrs:a,fromMatch:f});Object(r.extend)(l.prototype,{get:function(t){return this.attrs[Object(r.isNumber)(t)?"numeric":"named"][t]},set:function(t,e){return this.attrs[Object(r.isNumber)(t)?"numeric":"named"][t]=e,this},string:function(){var t="["+this.tag;return Object(r.forEach)(this.attrs.numeric,(function(e){/\s/.test(e)?t+=' "'+e+'"':t+=" "+e})),Object(r.forEach)(this.attrs.named,(function(e,n){t+=" "+n+'="'+e+'"'})),"single"===this.type?t+"]":"self-closing"===this.type?t+" /]":(t+="]",this.content&&(t+=this.content),t+"[/"+this.tag+"]")}}),e.default=l},52:function(t,e,n){t.exports=function(t,e){var n,r,i=0;function u(){var u,o,c=n,s=arguments.length;t:for(;c;){if(c.args.length===arguments.length){for(o=0;o<s;o++)if(c.args[o]!==arguments[o]){c=c.next;continue t}return c!==n&&(c===r&&(r=c.prev),c.prev.next=c.next,c.next&&(c.next.prev=c.prev),c.next=n,c.prev=null,n.prev=c,n=c),c.val}c=c.next}for(u=new Array(s),o=0;o<s;o++)u[o]=arguments[o];return c={args:u,val:t.apply(null,u)},n?(n.prev=c,c.next=n):r=c,i===e.maxSize?(r=r.prev).next=null:i++,n=c,c.val}return e=e||{},u.clear=function(){n=null,r=null,i=0},u}}}).default;