WordPress/js/dist/shortcode.js.map
atimmer 8614d14887 Build tools: Build @wordpress packages with webpack.
We decided to split the media webpack config into it's own file. The
main webpack config then combines this file with the packages config.

Include vendor scripts by copying them. We copy the minified files if
they are available. If they aren't available we minify the original
files ourselves.

Props omarreiss, herregroen, gziolo, youknowriad, netweb, adamsilverstein.
Merges [43719] to trunk.
See #45065.

Built from https://develop.svn.wordpress.org/trunk@44112


git-svn-id: http://core.svn.wordpress.org/trunk@43942 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-13 15:26:42 +00:00

1 line
23 KiB
Plaintext

{"version":3,"sources":["webpack://wp.[name]/webpack/bootstrap","webpack://wp.[name]//Users/gziolo/PhpstormProjects/gutenberg/packages/shortcode/src/index.js","webpack://wp.[name]/./node_modules/memize/index.js","webpack://wp.[name]/external \"lodash\""],"names":["next","tag","text","index","re","regexp","lastIndex","match","exec","result","content","shortcode","fromMatch","slice","replace","callback","left","$3","attrs","slash","closing","right","arguments","string","options","RegExp","memize","named","numeric","pattern","toLowerCase","push","type","extend","pick","attributes","isString","isEqual","Object","keys","forEach","value","key","set","prototype","get","attr","isNumber","test","name"],"mappings":"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","file":"shortcode.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./node_modules/@wordpress/shortcode/build-module/index.js\");\n","/**\n * Internal dependencies\n */\nimport { extend, pick, isString, isEqual, forEach, isNumber } from 'lodash';\nimport memize from 'memize';\n\n/**\n * Shortcode attributes object.\n *\n * @typedef {Object} WPShortcodeAttrs\n *\n * @property {Object} named Object with named attributes.\n * @property {Array} numeric Array with numeric attributes.\n */\n\n/**\n * Shortcode object.\n *\n * @typedef {Object} WPShortcode\n *\n * @property {string} tag Shortcode tag.\n * @property {WPShortcodeAttrs} attrs Shortcode attributes.\n * @property {string} content Shortcode content.\n * @property {string} type Shortcode type: `self-closing`,\n * `closed`, or `single`.\n */\n\n/**\n * @typedef {Object} WPShortcodeMatch\n *\n * @property {number} index Index the shortcode is found at.\n * @property {string} content Matched content.\n * @property {WPShortcode} shortcode Shortcode instance of the match.\n */\n\n/**\n * Find the next matching shortcode.\n *\n * @param {string} tag Shortcode tag.\n * @param {string} text Text to search.\n * @param {number} index Index to start search from.\n *\n * @return {?WPShortcodeMatch} Matched information.\n */\nexport function next( tag, text, index = 0 ) {\n\tconst re = regexp( tag );\n\n\tre.lastIndex = index;\n\n\tconst match = re.exec( text );\n\n\tif ( ! match ) {\n\t\treturn;\n\t}\n\n\t// If we matched an escaped shortcode, try again.\n\tif ( '[' === match[ 1 ] && ']' === match[ 7 ] ) {\n\t\treturn next( tag, text, re.lastIndex );\n\t}\n\n\tconst result = {\n\t\tindex: match.index,\n\t\tcontent: match[ 0 ],\n\t\tshortcode: fromMatch( match ),\n\t};\n\n\t// If we matched a leading `[`, strip it from the match and increment the\n\t// index accordingly.\n\tif ( match[ 1 ] ) {\n\t\tresult.content = result.content.slice( 1 );\n\t\tresult.index++;\n\t}\n\n\t// If we matched a trailing `]`, strip it from the match.\n\tif ( match[ 7 ] ) {\n\t\tresult.content = result.content.slice( 0, -1 );\n\t}\n\n\treturn result;\n}\n\n/**\n * Replace matching shortcodes in a block of text.\n *\n * @param {string} tag Shortcode tag.\n * @param {string} text Text to search.\n * @param {Function} callback Function to process the match and return\n * replacement string.\n *\n * @return {string} Text with shortcodes replaced.\n */\nexport function replace( tag, text, callback ) {\n\treturn text.replace( regexp( tag ), ( match, left, $3, attrs, slash, content, closing, right ) => {\n\t\t// If both extra brackets exist, the shortcode has been properly\n\t\t// escaped.\n\t\tif ( left === '[' && right === ']' ) {\n\t\t\treturn match;\n\t\t}\n\n\t\t// Create the match object and pass it through the callback.\n\t\tconst result = callback( fromMatch( arguments ) );\n\n\t\t// Make sure to return any of the extra brackets if they weren't used to\n\t\t// escape the shortcode.\n\t\treturn result ? left + result + right : match;\n\t} );\n}\n\n/**\n * Generate a string from shortcode parameters.\n *\n * Creates a shortcode instance and returns a string.\n *\n * Accepts the same `options` as the `shortcode()` constructor, containing a\n * `tag` string, a string or object of `attrs`, a boolean indicating whether to\n * format the shortcode using a `single` tag, and a `content` string.\n *\n * @param {Object} options\n *\n * @return {string} String representation of the shortcode.\n */\nexport function string( options ) {\n\treturn new shortcode( options ).string();\n}\n\n/**\n * Generate a RegExp to identify a shortcode.\n *\n * The base regex is functionally equivalent to the one found in\n * `get_shortcode_regex()` in `wp-includes/shortcodes.php`.\n *\n * Capture groups:\n *\n * 1. An extra `[` to allow for escaping shortcodes with double `[[]]`\n * 2. The shortcode name\n * 3. The shortcode argument list\n * 4. The self closing `/`\n * 5. The content of a shortcode when it wraps some content.\n * 6. The closing tag.\n * 7. An extra `]` to allow for escaping shortcodes with double `[[]]`\n *\n * @param {string} tag Shortcode tag.\n *\n * @return {RegExp} Shortcode RegExp.\n */\nexport function regexp( tag ) {\n\treturn new RegExp( '\\\\[(\\\\[?)(' + tag + ')(?![\\\\w-])([^\\\\]\\\\/]*(?:\\\\/(?!\\\\])[^\\\\]\\\\/]*)*?)(?:(\\\\/)\\\\]|\\\\](?:([^\\\\[]*(?:\\\\[(?!\\\\/\\\\2\\\\])[^\\\\[]*)*)(\\\\[\\\\/\\\\2\\\\]))?)(\\\\]?)', 'g' );\n}\n\n/**\n * Parse shortcode attributes.\n *\n * Shortcodes accept many types of attributes. These can chiefly be divided into\n * named and numeric attributes:\n *\n * Named attributes are assigned on a key/value basis, while numeric attributes\n * are treated as an array.\n *\n * Named attributes can be formatted as either `name=\"value\"`, `name='value'`,\n * or `name=value`. Numeric attributes can be formatted as `\"value\"` or just\n * `value`.\n *\n * @param {string} text Serialised shortcode attributes.\n *\n * @return {WPShortcodeAttrs} Parsed shortcode attributes.\n */\nexport const attrs = memize( ( text ) => {\n\tconst named = {};\n\tconst numeric = [];\n\n\t// This regular expression is reused from `shortcode_parse_atts()` in\n\t// `wp-includes/shortcodes.php`.\n\t//\n\t// Capture groups:\n\t//\n\t// 1. An attribute name, that corresponds to...\n\t// 2. a value in double quotes.\n\t// 3. An attribute name, that corresponds to...\n\t// 4. a value in single quotes.\n\t// 5. An attribute name, that corresponds to...\n\t// 6. an unquoted value.\n\t// 7. A numeric attribute in double quotes.\n\t// 8. A numeric attribute in single quotes.\n\t// 9. An unquoted numeric attribute.\n\tconst pattern = /([\\w-]+)\\s*=\\s*\"([^\"]*)\"(?:\\s|$)|([\\w-]+)\\s*=\\s*'([^']*)'(?:\\s|$)|([\\w-]+)\\s*=\\s*([^\\s'\"]+)(?:\\s|$)|\"([^\"]*)\"(?:\\s|$)|'([^']*)'(?:\\s|$)|(\\S+)(?:\\s|$)/g;\n\n\t// Map zero-width spaces to actual spaces.\n\ttext = text.replace( /[\\u00a0\\u200b]/g, ' ' );\n\n\tlet match;\n\n\t// Match and normalize attributes.\n\twhile ( ( match = pattern.exec( text ) ) ) {\n\t\tif ( match[ 1 ] ) {\n\t\t\tnamed[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tnamed[ match[ 3 ].toLowerCase() ] = match[ 4 ];\n\t\t} else if ( match[ 5 ] ) {\n\t\t\tnamed[ match[ 5 ].toLowerCase() ] = match[ 6 ];\n\t\t} else if ( match[ 7 ] ) {\n\t\t\tnumeric.push( match[ 7 ] );\n\t\t} else if ( match[ 8 ] ) {\n\t\t\tnumeric.push( match[ 8 ] );\n\t\t} else if ( match[ 9 ] ) {\n\t\t\tnumeric.push( match[ 9 ] );\n\t\t}\n\t}\n\n\treturn { named, numeric };\n} );\n\n/**\n * Generate a Shortcode Object from a RegExp match.\n *\n * Accepts a `match` object from calling `regexp.exec()` on a `RegExp` generated\n * by `regexp()`. `match` can also be set to the `arguments` from a callback\n * passed to `regexp.replace()`.\n *\n * @param {Array} match Match array.\n *\n * @return {WPShortcode} Shortcode instance.\n */\nexport function fromMatch( match ) {\n\tlet type;\n\n\tif ( match[ 4 ] ) {\n\t\ttype = 'self-closing';\n\t} else if ( match[ 6 ] ) {\n\t\ttype = 'closed';\n\t} else {\n\t\ttype = 'single';\n\t}\n\n\treturn new shortcode( {\n\t\ttag: match[ 2 ],\n\t\tattrs: match[ 3 ],\n\t\ttype,\n\t\tcontent: match[ 5 ],\n\t} );\n}\n\n/**\n * Creates a shortcode instance.\n *\n * To access a raw representation of a shortcode, pass an `options` object,\n * containing a `tag` string, a string or object of `attrs`, a string indicating\n * the `type` of the shortcode ('single', 'self-closing', or 'closed'), and a\n * `content` string.\n *\n * @param {Object} options Options as described.\n *\n * @return {WPShortcode} Shortcode instance.\n */\nconst shortcode = extend( function( options ) {\n\textend( this, pick( options || {}, 'tag', 'attrs', 'type', 'content' ) );\n\n\tconst attributes = this.attrs;\n\n\t// Ensure we have a correctly formatted `attrs` object.\n\tthis.attrs = {\n\t\tnamed: {},\n\t\tnumeric: [],\n\t};\n\n\tif ( ! attributes ) {\n\t\treturn;\n\t}\n\n\t// Parse a string of attributes.\n\tif ( isString( attributes ) ) {\n\t\tthis.attrs = attrs( attributes );\n\t// Identify a correctly formatted `attrs` object.\n\t} else if ( isEqual( Object.keys( attributes ), [ 'named', 'numeric' ] ) ) {\n\t\tthis.attrs = attributes;\n\t// Handle a flat object of attributes.\n\t} else {\n\t\tforEach( attributes, ( value, key ) => {\n\t\t\tthis.set( key, value );\n\t\t} );\n\t}\n}, {\n\tnext,\n\treplace,\n\tstring,\n\tregexp,\n\tattrs,\n\tfromMatch,\n} );\n\nextend( shortcode.prototype, {\n\n\t/**\n\t * Get a shortcode attribute.\n\t *\n\t * Automatically detects whether `attr` is named or numeric and routes it\n\t * accordingly.\n\t *\n\t * @param {(number|string)} attr Attribute key.\n\t *\n\t * @return {string} Attribute value.\n\t */\n\tget( attr ) {\n\t\treturn this.attrs[ isNumber( attr ) ? 'numeric' : 'named' ][ attr ];\n\t},\n\n\t/**\n\t * Set a shortcode attribute.\n\t *\n\t * Automatically detects whether `attr` is named or numeric and routes it\n\t * accordingly.\n\t *\n\t * @param {(number|string)} attr Attribute key.\n\t * @param {string} value Attribute value.\n\t *\n\t * @return {WPShortcode} Shortcode instance.\n\t */\n\tset( attr, value ) {\n\t\tthis.attrs[ isNumber( attr ) ? 'numeric' : 'named' ][ attr ] = value;\n\t\treturn this;\n\t},\n\n\t/**\n\t * Transform the shortcode into a string.\n\t *\n\t * @return {string} String representation of the shortcode.\n\t */\n\tstring() {\n\t\tlet text = '[' + this.tag;\n\n\t\tforEach( this.attrs.numeric, ( value ) => {\n\t\t\tif ( /\\s/.test( value ) ) {\n\t\t\t\ttext += ' \"' + value + '\"';\n\t\t\t} else {\n\t\t\t\ttext += ' ' + value;\n\t\t\t}\n\t\t} );\n\n\t\tforEach( this.attrs.named, ( value, name ) => {\n\t\t\ttext += ' ' + name + '=\"' + value + '\"';\n\t\t} );\n\n\t\t// If the tag is marked as `single` or `self-closing`, close the tag and\n\t\t// ignore any additional content.\n\t\tif ( 'single' === this.type ) {\n\t\t\treturn text + ']';\n\t\t} else if ( 'self-closing' === this.type ) {\n\t\t\treturn text + ' /]';\n\t\t}\n\n\t\t// Complete the opening tag.\n\t\ttext += ']';\n\n\t\tif ( this.content ) {\n\t\t\ttext += this.content;\n\t\t}\n\n\t\t// Add the closing tag.\n\t\treturn text + '[/' + this.tag + ']';\n\t},\n\n} );\n\nexport default shortcode;\n","module.exports = function memize( fn, options ) {\n\tvar size = 0,\n\t\tmaxSize, head, tail;\n\n\tif ( options && options.maxSize ) {\n\t\tmaxSize = options.maxSize;\n\t}\n\n\tfunction memoized( /* ...args */ ) {\n\t\tvar node = head,\n\t\t\tlen = arguments.length,\n\t\t\targs, i;\n\n\t\tsearchCache: while ( node ) {\n\t\t\t// Perform a shallow equality test to confirm that whether the node\n\t\t\t// under test is a candidate for the arguments passed. Two arrays\n\t\t\t// are shallowly equal if their length matches and each entry is\n\t\t\t// strictly equal between the two sets. Avoid abstracting to a\n\t\t\t// function which could incur an arguments leaking deoptimization.\n\n\t\t\t// Check whether node arguments match arguments length\n\t\t\tif ( node.args.length !== arguments.length ) {\n\t\t\t\tnode = node.next;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check whether node arguments match arguments values\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( node.args[ i ] !== arguments[ i ] ) {\n\t\t\t\t\tnode = node.next;\n\t\t\t\t\tcontinue searchCache;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// At this point we can assume we've found a match\n\n\t\t\t// Surface matched node to head if not already\n\t\t\tif ( node !== head ) {\n\t\t\t\t// As tail, shift to previous. Must only shift if not also\n\t\t\t\t// head, since if both head and tail, there is no previous.\n\t\t\t\tif ( node === tail ) {\n\t\t\t\t\ttail = node.prev;\n\t\t\t\t}\n\n\t\t\t\t// Adjust siblings to point to each other. If node was tail,\n\t\t\t\t// this also handles new tail's empty `next` assignment.\n\t\t\t\tnode.prev.next = node.next;\n\t\t\t\tif ( node.next ) {\n\t\t\t\t\tnode.next.prev = node.prev;\n\t\t\t\t}\n\n\t\t\t\tnode.next = head;\n\t\t\t\tnode.prev = null;\n\t\t\t\thead.prev = node;\n\t\t\t\thead = node;\n\t\t\t}\n\n\t\t\t// Return immediately\n\t\t\treturn node.val;\n\t\t}\n\n\t\t// No cached value found. Continue to insertion phase:\n\n\t\t// Create a copy of arguments (avoid leaking deoptimization)\n\t\targs = new Array( len );\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tnode = {\n\t\t\targs: args,\n\n\t\t\t// Generate the result from original function\n\t\t\tval: fn.apply( null, args )\n\t\t};\n\n\t\t// Don't need to check whether node is already head, since it would\n\t\t// have been returned above already if it was\n\n\t\t// Shift existing head down list\n\t\tif ( head ) {\n\t\t\thead.prev = node;\n\t\t\tnode.next = head;\n\t\t} else {\n\t\t\t// If no head, follows that there's no tail (at initial or reset)\n\t\t\ttail = node;\n\t\t}\n\n\t\t// Trim tail if we're reached max size and are pending cache insertion\n\t\tif ( size === maxSize ) {\n\t\t\ttail = tail.prev;\n\t\t\ttail.next = null;\n\t\t} else {\n\t\t\tsize++;\n\t\t}\n\n\t\thead = node;\n\n\t\treturn node.val;\n\t}\n\n\tmemoized.clear = function() {\n\t\thead = null;\n\t\ttail = null;\n\t\tsize = 0;\n\t};\n\n\tif ( process.env.NODE_ENV === 'test' ) {\n\t\t// Cache is not exposed in the public API, but used in tests to ensure\n\t\t// expected list progression\n\t\tmemoized.getCache = function() {\n\t\t\treturn [ head, tail, size ];\n\t\t};\n\t}\n\n\treturn memoized;\n};\n","(function() { module.exports = this[\"lodash\"]; }());"],"sourceRoot":""}