2018-12-13 23:41:57 -05:00
this [ "wp" ] = this [ "wp" ] || { } ; this [ "wp" ] [ "shortcode" ] =
/******/ ( function ( modules ) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = { } ;
/******/
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
/******/
/******/ // Check if module is in cache
/******/ if ( installedModules [ moduleId ] ) {
/******/ return installedModules [ moduleId ] . exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
/******/ i : moduleId ,
/******/ l : false ,
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ modules [ moduleId ] . call ( module . exports , module , module . exports , _ _webpack _require _ _ ) ;
/******/
/******/ // Flag the module as loaded
/******/ module . l = true ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ _ _webpack _require _ _ . m = modules ;
/******/
/******/ // expose the module cache
/******/ _ _webpack _require _ _ . c = installedModules ;
/******/
/******/ // define getter function for harmony exports
/******/ _ _webpack _require _ _ . d = function ( exports , name , getter ) {
/******/ if ( ! _ _webpack _require _ _ . o ( exports , name ) ) {
/******/ Object . defineProperty ( exports , name , { enumerable : true , get : getter } ) ;
/******/ }
/******/ } ;
/******/
/******/ // define __esModule on exports
/******/ _ _webpack _require _ _ . r = function ( exports ) {
/******/ if ( typeof Symbol !== 'undefined' && Symbol . toStringTag ) {
/******/ Object . defineProperty ( exports , Symbol . toStringTag , { value : 'Module' } ) ;
/******/ }
/******/ Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
/******/ } ;
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ _ _webpack _require _ _ . t = function ( value , mode ) {
/******/ if ( mode & 1 ) value = _ _webpack _require _ _ ( value ) ;
/******/ if ( mode & 8 ) return value ;
/******/ if ( ( mode & 4 ) && typeof value === 'object' && value && value . _ _esModule ) return value ;
/******/ var ns = Object . create ( null ) ;
/******/ _ _webpack _require _ _ . r ( ns ) ;
/******/ Object . defineProperty ( ns , 'default' , { enumerable : true , value : value } ) ;
/******/ if ( mode & 2 && typeof value != 'string' ) for ( var key in value ) _ _webpack _require _ _ . d ( ns , key , function ( key ) { return value [ key ] ; } . bind ( null , key ) ) ;
/******/ return ns ;
/******/ } ;
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ _ _webpack _require _ _ . n = function ( module ) {
/******/ var getter = module && module . _ _esModule ?
/******/ function getDefault ( ) { return module [ 'default' ] ; } :
/******/ function getModuleExports ( ) { return module ; } ;
/******/ _ _webpack _require _ _ . d ( getter , 'a' , getter ) ;
/******/ return getter ;
/******/ } ;
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ _ _webpack _require _ _ . o = function ( object , property ) { return Object . prototype . hasOwnProperty . call ( object , property ) ; } ;
/******/
/******/ // __webpack_public_path__
/******/ _ _webpack _require _ _ . p = "" ;
/******/
/******/
/******/ // Load entry module and return exports
2021-05-19 11:09:27 -04:00
/******/ return _ _webpack _require _ _ ( _ _webpack _require _ _ . s = 550 ) ;
2018-12-13 23:41:57 -05:00
/******/ } )
/************************************************************************/
/******/ ( {
2018-12-17 22:14:52 -05:00
/***/ 2 :
/***/ ( function ( module , exports ) {
2021-01-27 21:04:13 -05:00
( function ( ) { module . exports = window [ "lodash" ] ; } ( ) ) ;
2018-12-17 22:14:52 -05:00
/***/ } ) ,
2021-05-19 11:09:27 -04:00
/***/ 42 :
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
/ * *
* Memize options object .
*
* @ typedef MemizeOptions
*
* @ property { number } [ maxSize ] Maximum size of the cache .
* /
/ * *
* Internal cache entry .
*
* @ typedef MemizeCacheNode
*
* @ property { ? MemizeCacheNode | undefined } [ prev ] Previous node .
* @ property { ? MemizeCacheNode | undefined } [ next ] Next node .
* @ property { Array < * > } args Function arguments for cache
* entry .
* @ property { * } val Function result .
* /
/ * *
* Properties of the enhanced function for controlling cache .
*
* @ typedef MemizeMemoizedFunction
*
* @ property { ( ) => void } clear Clear the cache .
* /
/ * *
* Accepts a function to be memoized , and returns a new memoized function , with
* optional options .
*
* @ template { Function } F
*
* @ param { F } fn Function to memoize .
* @ param { MemizeOptions } [ options ] Options object .
*
* @ return { F & MemizeMemoizedFunction } Memoized function .
* /
function memize ( fn , options ) {
var size = 0 ;
/** @type {?MemizeCacheNode|undefined} */
var head ;
/** @type {?MemizeCacheNode|undefined} */
var tail ;
options = options || { } ;
function memoized ( /* ...args */ ) {
var node = head ,
len = arguments . length ,
args , i ;
searchCache : while ( node ) {
// Perform a shallow equality test to confirm that whether the node
// under test is a candidate for the arguments passed. Two arrays
// are shallowly equal if their length matches and each entry is
// strictly equal between the two sets. Avoid abstracting to a
// function which could incur an arguments leaking deoptimization.
// Check whether node arguments match arguments length
if ( node . args . length !== arguments . length ) {
node = node . next ;
continue ;
}
// Check whether node arguments match arguments values
for ( i = 0 ; i < len ; i ++ ) {
if ( node . args [ i ] !== arguments [ i ] ) {
node = node . next ;
continue searchCache ;
}
}
// At this point we can assume we've found a match
// Surface matched node to head if not already
if ( node !== head ) {
// As tail, shift to previous. Must only shift if not also
// head, since if both head and tail, there is no previous.
if ( node === tail ) {
tail = node . prev ;
}
// Adjust siblings to point to each other. If node was tail,
// this also handles new tail's empty `next` assignment.
/** @type {MemizeCacheNode} */ ( node . prev ) . next = node . next ;
if ( node . next ) {
node . next . prev = node . prev ;
}
node . next = head ;
node . prev = null ;
/** @type {MemizeCacheNode} */ ( head ) . prev = node ;
head = node ;
}
// Return immediately
return node . val ;
}
// No cached value found. Continue to insertion phase:
// Create a copy of arguments (avoid leaking deoptimization)
args = new Array ( len ) ;
for ( i = 0 ; i < len ; i ++ ) {
args [ i ] = arguments [ i ] ;
}
node = {
args : args ,
// Generate the result from original function
val : fn . apply ( null , args ) ,
} ;
// Don't need to check whether node is already head, since it would
// have been returned above already if it was
// Shift existing head down list
if ( head ) {
head . prev = node ;
node . next = head ;
} else {
// If no head, follows that there's no tail (at initial or reset)
tail = node ;
}
// Trim tail if we're reached max size and are pending cache insertion
if ( size === /** @type {MemizeOptions} */ ( options ) . maxSize ) {
tail = /** @type {MemizeCacheNode} */ ( tail ) . prev ;
/** @type {MemizeCacheNode} */ ( tail ) . next = null ;
} else {
size ++ ;
}
head = node ;
return node . val ;
}
memoized . clear = function ( ) {
head = null ;
tail = null ;
size = 0 ;
} ;
if ( false ) { }
// Ignore reason: There's not a clear solution to create an intersection of
// the function with additional properties, where the goal is to retain the
// function signature of the incoming argument and add control properties
// on the return value.
// @ts-ignore
return memoized ;
}
module . exports = memize ;
/***/ } ) ,
/***/ 550 :
2018-12-13 23:41:57 -05:00
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "next" , function ( ) { return next ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "replace" , function ( ) { return replace ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "string" , function ( ) { return string ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "regexp" , function ( ) { return regexp ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "attrs" , function ( ) { return attrs ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "fromMatch" , function ( ) { return fromMatch ; } ) ;
2018-12-17 22:14:52 -05:00
/* harmony import */ var lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( 2 ) ;
2018-12-13 23:41:57 -05:00
/* harmony import */ var lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ ) ;
2021-05-19 11:09:27 -04:00
/* harmony import */ var memize _ _WEBPACK _IMPORTED _MODULE _1 _ _ = _ _webpack _require _ _ ( 42 ) ;
2018-12-13 23:41:57 -05:00
/* harmony import */ var memize _ _WEBPACK _IMPORTED _MODULE _1 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( memize _ _WEBPACK _IMPORTED _MODULE _1 _ _ ) ;
/ * *
2019-03-07 04:09:59 -05:00
* External dependencies
2018-12-13 23:41:57 -05:00
* /
/ * *
* Shortcode attributes object .
*
* @ typedef { Object } WPShortcodeAttrs
*
* @ property { Object } named Object with named attributes .
* @ property { Array } numeric Array with numeric attributes .
* /
/ * *
* Shortcode object .
*
* @ typedef { Object } WPShortcode
*
* @ property { string } tag Shortcode tag .
* @ property { WPShortcodeAttrs } attrs Shortcode attributes .
* @ property { string } content Shortcode content .
* @ property { string } type Shortcode type : ` self-closing ` ,
* ` closed ` , or ` single ` .
* /
/ * *
* @ typedef { Object } WPShortcodeMatch
*
* @ property { number } index Index the shortcode is found at .
* @ property { string } content Matched content .
* @ property { WPShortcode } shortcode Shortcode instance of the match .
* /
/ * *
* Find the next matching shortcode .
*
* @ param { string } tag Shortcode tag .
* @ param { string } text Text to search .
* @ param { number } index Index to start search from .
*
* @ return { ? WPShortcodeMatch } Matched information .
* /
2021-05-19 11:09:27 -04:00
function next ( tag , text , index = 0 ) {
const re = regexp ( tag ) ;
2018-12-13 23:41:57 -05:00
re . lastIndex = index ;
2021-05-19 11:09:27 -04:00
const match = re . exec ( text ) ;
2018-12-13 23:41:57 -05:00
if ( ! match ) {
return ;
} // If we matched an escaped shortcode, try again.
if ( '[' === match [ 1 ] && ']' === match [ 7 ] ) {
return next ( tag , text , re . lastIndex ) ;
}
2021-05-19 11:09:27 -04:00
const result = {
2018-12-13 23:41:57 -05:00
index : match . index ,
content : match [ 0 ] ,
shortcode : fromMatch ( match )
} ; // If we matched a leading `[`, strip it from the match and increment the
// index accordingly.
if ( match [ 1 ] ) {
result . content = result . content . slice ( 1 ) ;
result . index ++ ;
} // If we matched a trailing `]`, strip it from the match.
if ( match [ 7 ] ) {
result . content = result . content . slice ( 0 , - 1 ) ;
}
return result ;
}
/ * *
* Replace matching shortcodes in a block of text .
*
* @ param { string } tag Shortcode tag .
* @ param { string } text Text to search .
* @ param { Function } callback Function to process the match and return
* replacement string .
*
* @ return { string } Text with shortcodes replaced .
* /
function replace ( tag , text , callback ) {
return text . replace ( regexp ( tag ) , function ( match , left , $3 , attrs , slash , content , closing , right ) {
// If both extra brackets exist, the shortcode has been properly
// escaped.
if ( left === '[' && right === ']' ) {
return match ;
} // Create the match object and pass it through the callback.
2021-05-19 11:09:27 -04:00
const result = callback ( fromMatch ( arguments ) ) ; // Make sure to return any of the extra brackets if they weren't used to
2018-12-13 23:41:57 -05:00
// escape the shortcode.
2021-01-27 21:04:13 -05:00
return result || result === '' ? left + result + right : match ;
2018-12-13 23:41:57 -05:00
} ) ;
}
/ * *
* Generate a string from shortcode parameters .
*
* Creates a shortcode instance and returns a string .
*
* Accepts the same ` options ` as the ` shortcode() ` constructor , containing a
* ` tag ` string , a string or object of ` attrs ` , a boolean indicating whether to
* format the shortcode using a ` single ` tag , and a ` content ` string .
*
* @ param { Object } options
*
* @ return { string } String representation of the shortcode .
* /
function string ( options ) {
return new shortcode ( options ) . string ( ) ;
}
/ * *
* Generate a RegExp to identify a shortcode .
*
* The base regex is functionally equivalent to the one found in
* ` get_shortcode_regex() ` in ` wp-includes/shortcodes.php ` .
*
* Capture groups :
*
* 1. An extra ` [ ` to allow for escaping shortcodes with double ` [[]] `
* 2. The shortcode name
* 3. The shortcode argument list
* 4. The self closing ` / `
* 5. The content of a shortcode when it wraps some content .
* 6. The closing tag .
* 7. An extra ` ] ` to allow for escaping shortcodes with double ` [[]] `
*
* @ param { string } tag Shortcode tag .
*
* @ return { RegExp } Shortcode RegExp .
* /
function regexp ( tag ) {
return new RegExp ( '\\[(\\[?)(' + tag + ')(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*(?:\\[(?!\\/\\2\\])[^\\[]*)*)(\\[\\/\\2\\]))?)(\\]?)' , 'g' ) ;
}
/ * *
* Parse shortcode attributes .
*
* Shortcodes accept many types of attributes . These can chiefly be divided into
* named and numeric attributes :
*
* Named attributes are assigned on a key / value basis , while numeric attributes
* are treated as an array .
*
* Named attributes can be formatted as either ` name="value" ` , ` name='value' ` ,
* or ` name=value ` . Numeric attributes can be formatted as ` "value" ` or just
* ` value ` .
*
* @ param { string } text Serialised shortcode attributes .
*
* @ return { WPShortcodeAttrs } Parsed shortcode attributes .
* /
2021-05-19 11:09:27 -04:00
const attrs = memize _ _WEBPACK _IMPORTED _MODULE _1 _ _ _default ( ) ( text => {
const named = { } ;
const numeric = [ ] ; // This regular expression is reused from `shortcode_parse_atts()` in
2018-12-13 23:41:57 -05:00
// `wp-includes/shortcodes.php`.
//
// Capture groups:
//
// 1. An attribute name, that corresponds to...
// 2. a value in double quotes.
// 3. An attribute name, that corresponds to...
// 4. a value in single quotes.
// 5. An attribute name, that corresponds to...
// 6. an unquoted value.
// 7. A numeric attribute in double quotes.
// 8. A numeric attribute in single quotes.
// 9. An unquoted numeric attribute.
2021-05-19 11:09:27 -04:00
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.
2018-12-13 23:41:57 -05:00
text = text . replace ( /[\u00a0\u200b]/g , ' ' ) ;
2021-05-19 11:09:27 -04:00
let match ; // Match and normalize attributes.
2018-12-13 23:41:57 -05:00
while ( match = pattern . exec ( text ) ) {
if ( match [ 1 ] ) {
named [ match [ 1 ] . toLowerCase ( ) ] = match [ 2 ] ;
} else if ( match [ 3 ] ) {
named [ match [ 3 ] . toLowerCase ( ) ] = match [ 4 ] ;
} else if ( match [ 5 ] ) {
named [ match [ 5 ] . toLowerCase ( ) ] = match [ 6 ] ;
} else if ( match [ 7 ] ) {
numeric . push ( match [ 7 ] ) ;
} else if ( match [ 8 ] ) {
numeric . push ( match [ 8 ] ) ;
} else if ( match [ 9 ] ) {
numeric . push ( match [ 9 ] ) ;
}
}
return {
2021-05-19 11:09:27 -04:00
named ,
numeric
2018-12-13 23:41:57 -05:00
} ;
} ) ;
/ * *
* Generate a Shortcode Object from a RegExp match .
*
* Accepts a ` match ` object from calling ` regexp.exec() ` on a ` RegExp ` generated
* by ` regexp() ` . ` match ` can also be set to the ` arguments ` from a callback
* passed to ` regexp.replace() ` .
*
* @ param { Array } match Match array .
*
* @ return { WPShortcode } Shortcode instance .
* /
function fromMatch ( match ) {
2021-05-19 11:09:27 -04:00
let type ;
2018-12-13 23:41:57 -05:00
if ( match [ 4 ] ) {
type = 'self-closing' ;
} else if ( match [ 6 ] ) {
type = 'closed' ;
} else {
type = 'single' ;
}
return new shortcode ( {
tag : match [ 2 ] ,
attrs : match [ 3 ] ,
2021-05-19 11:09:27 -04:00
type ,
2018-12-13 23:41:57 -05:00
content : match [ 5 ]
} ) ;
}
/ * *
* Creates a shortcode instance .
*
* To access a raw representation of a shortcode , pass an ` options ` object ,
* containing a ` tag ` string , a string or object of ` attrs ` , a string indicating
* the ` type ` of the shortcode ( 'single' , 'self-closing' , or 'closed' ) , and a
* ` content ` string .
*
* @ param { Object } options Options as described .
*
* @ return { WPShortcode } Shortcode instance .
* /
2021-05-19 11:09:27 -04:00
const shortcode = Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "extend" ] ) ( function ( options ) {
2018-12-13 23:41:57 -05:00
Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "extend" ] ) ( this , Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "pick" ] ) ( options || { } , 'tag' , 'attrs' , 'type' , 'content' ) ) ;
2021-05-19 11:09:27 -04:00
const attributes = this . attrs ; // Ensure we have a correctly formatted `attrs` object.
2018-12-13 23:41:57 -05:00
this . attrs = {
named : { } ,
numeric : [ ]
} ;
if ( ! attributes ) {
return ;
} // Parse a string of attributes.
if ( Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isString" ] ) ( attributes ) ) {
this . attrs = attrs ( attributes ) ; // Identify a correctly formatted `attrs` object.
} else if ( Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isEqual" ] ) ( Object . keys ( attributes ) , [ 'named' , 'numeric' ] ) ) {
this . attrs = attributes ; // Handle a flat object of attributes.
} else {
2021-05-19 11:09:27 -04:00
Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "forEach" ] ) ( attributes , ( value , key ) => {
this . set ( key , value ) ;
2018-12-13 23:41:57 -05:00
} ) ;
}
} , {
2021-05-19 11:09:27 -04:00
next ,
replace ,
string ,
regexp ,
attrs ,
fromMatch
2018-12-13 23:41:57 -05:00
} ) ;
Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "extend" ] ) ( shortcode . prototype , {
/ * *
* Get a shortcode attribute .
*
* Automatically detects whether ` attr ` is named or numeric and routes it
* accordingly .
*
* @ param { ( number | string ) } attr Attribute key .
*
* @ return { string } Attribute value .
* /
2021-05-19 11:09:27 -04:00
get ( attr ) {
2018-12-13 23:41:57 -05:00
return this . attrs [ Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isNumber" ] ) ( attr ) ? 'numeric' : 'named' ] [ attr ] ;
} ,
/ * *
* Set a shortcode attribute .
*
* Automatically detects whether ` attr ` is named or numeric and routes it
* accordingly .
*
* @ param { ( number | string ) } attr Attribute key .
* @ param { string } value Attribute value .
*
* @ return { WPShortcode } Shortcode instance .
* /
2021-05-19 11:09:27 -04:00
set ( attr , value ) {
2018-12-13 23:41:57 -05:00
this . attrs [ Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "isNumber" ] ) ( attr ) ? 'numeric' : 'named' ] [ attr ] = value ;
return this ;
} ,
/ * *
* Transform the shortcode into a string .
*
* @ return { string } String representation of the shortcode .
* /
2021-05-19 11:09:27 -04:00
string ( ) {
let text = '[' + this . tag ;
Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "forEach" ] ) ( this . attrs . numeric , value => {
2018-12-13 23:41:57 -05:00
if ( /\s/ . test ( value ) ) {
text += ' "' + value + '"' ;
} else {
text += ' ' + value ;
}
} ) ;
2021-05-19 11:09:27 -04:00
Object ( lodash _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "forEach" ] ) ( this . attrs . named , ( value , name ) => {
2018-12-13 23:41:57 -05:00
text += ' ' + name + '="' + value + '"' ;
} ) ; // If the tag is marked as `single` or `self-closing`, close the tag and
// ignore any additional content.
if ( 'single' === this . type ) {
return text + ']' ;
} else if ( 'self-closing' === this . type ) {
return text + ' /]' ;
} // Complete the opening tag.
text += ']' ;
if ( this . content ) {
text += this . content ;
} // Add the closing tag.
return text + '[/' + this . tag + ']' ;
}
2021-05-19 11:09:27 -04:00
2018-12-13 23:41:57 -05:00
} ) ;
/* harmony default export */ _ _webpack _exports _ _ [ "default" ] = ( shortcode ) ;
/***/ } )
2019-03-21 08:48:00 -04:00
/******/ } ) [ "default" ] ;