[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 this["wp"] = this["wp"] || {}; this["wp"]["blocks"] = 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 = "./node_modules/@wordpress/blocks/build-module/index.js"); 86 /******/ }) 87 /************************************************************************/ 88 /******/ ({ 89 90 /***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js": 91 /*!*******************************************************************!*\ 92 !*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***! 93 \*******************************************************************/ 94 /*! exports provided: default */ 95 /***/ (function(module, __webpack_exports__, __webpack_require__) { 96 97 "use strict"; 98 __webpack_require__.r(__webpack_exports__); 99 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _arrayWithHoles; }); 100 function _arrayWithHoles(arr) { 101 if (Array.isArray(arr)) return arr; 102 } 103 104 /***/ }), 105 106 /***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js": 107 /*!**********************************************************************!*\ 108 !*** ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***! 109 \**********************************************************************/ 110 /*! exports provided: default */ 111 /***/ (function(module, __webpack_exports__, __webpack_require__) { 112 113 "use strict"; 114 __webpack_require__.r(__webpack_exports__); 115 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _arrayWithoutHoles; }); 116 function _arrayWithoutHoles(arr) { 117 if (Array.isArray(arr)) { 118 for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { 119 arr2[i] = arr[i]; 120 } 121 122 return arr2; 123 } 124 } 125 126 /***/ }), 127 128 /***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js": 129 /*!*******************************************************************!*\ 130 !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***! 131 \*******************************************************************/ 132 /*! exports provided: default */ 133 /***/ (function(module, __webpack_exports__, __webpack_require__) { 134 135 "use strict"; 136 __webpack_require__.r(__webpack_exports__); 137 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _defineProperty; }); 138 function _defineProperty(obj, key, value) { 139 if (key in obj) { 140 Object.defineProperty(obj, key, { 141 value: value, 142 enumerable: true, 143 configurable: true, 144 writable: true 145 }); 146 } else { 147 obj[key] = value; 148 } 149 150 return obj; 151 } 152 153 /***/ }), 154 155 /***/ "./node_modules/@babel/runtime/helpers/esm/extends.js": 156 /*!************************************************************!*\ 157 !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***! 158 \************************************************************/ 159 /*! exports provided: default */ 160 /***/ (function(module, __webpack_exports__, __webpack_require__) { 161 162 "use strict"; 163 __webpack_require__.r(__webpack_exports__); 164 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _extends; }); 165 function _extends() { 166 _extends = Object.assign || function (target) { 167 for (var i = 1; i < arguments.length; i++) { 168 var source = arguments[i]; 169 170 for (var key in source) { 171 if (Object.prototype.hasOwnProperty.call(source, key)) { 172 target[key] = source[key]; 173 } 174 } 175 } 176 177 return target; 178 }; 179 180 return _extends.apply(this, arguments); 181 } 182 183 /***/ }), 184 185 /***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js": 186 /*!********************************************************************!*\ 187 !*** ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***! 188 \********************************************************************/ 189 /*! exports provided: default */ 190 /***/ (function(module, __webpack_exports__, __webpack_require__) { 191 192 "use strict"; 193 __webpack_require__.r(__webpack_exports__); 194 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _iterableToArray; }); 195 function _iterableToArray(iter) { 196 if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); 197 } 198 199 /***/ }), 200 201 /***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js": 202 /*!*************************************************************************!*\ 203 !*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***! 204 \*************************************************************************/ 205 /*! exports provided: default */ 206 /***/ (function(module, __webpack_exports__, __webpack_require__) { 207 208 "use strict"; 209 __webpack_require__.r(__webpack_exports__); 210 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _iterableToArrayLimit; }); 211 function _iterableToArrayLimit(arr, i) { 212 var _arr = []; 213 var _n = true; 214 var _d = false; 215 var _e = undefined; 216 217 try { 218 for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { 219 _arr.push(_s.value); 220 221 if (i && _arr.length === i) break; 222 } 223 } catch (err) { 224 _d = true; 225 _e = err; 226 } finally { 227 try { 228 if (!_n && _i["return"] != null) _i["return"](); 229 } finally { 230 if (_d) throw _e; 231 } 232 } 233 234 return _arr; 235 } 236 237 /***/ }), 238 239 /***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js": 240 /*!********************************************************************!*\ 241 !*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***! 242 \********************************************************************/ 243 /*! exports provided: default */ 244 /***/ (function(module, __webpack_exports__, __webpack_require__) { 245 246 "use strict"; 247 __webpack_require__.r(__webpack_exports__); 248 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _nonIterableRest; }); 249 function _nonIterableRest() { 250 throw new TypeError("Invalid attempt to destructure non-iterable instance"); 251 } 252 253 /***/ }), 254 255 /***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js": 256 /*!**********************************************************************!*\ 257 !*** ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***! 258 \**********************************************************************/ 259 /*! exports provided: default */ 260 /***/ (function(module, __webpack_exports__, __webpack_require__) { 261 262 "use strict"; 263 __webpack_require__.r(__webpack_exports__); 264 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _nonIterableSpread; }); 265 function _nonIterableSpread() { 266 throw new TypeError("Invalid attempt to spread non-iterable instance"); 267 } 268 269 /***/ }), 270 271 /***/ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js": 272 /*!*****************************************************************!*\ 273 !*** ./node_modules/@babel/runtime/helpers/esm/objectSpread.js ***! 274 \*****************************************************************/ 275 /*! exports provided: default */ 276 /***/ (function(module, __webpack_exports__, __webpack_require__) { 277 278 "use strict"; 279 __webpack_require__.r(__webpack_exports__); 280 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _objectSpread; }); 281 /* harmony import */ var _defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); 282 283 function _objectSpread(target) { 284 for (var i = 1; i < arguments.length; i++) { 285 var source = arguments[i] != null ? arguments[i] : {}; 286 var ownKeys = Object.keys(source); 287 288 if (typeof Object.getOwnPropertySymbols === 'function') { 289 ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { 290 return Object.getOwnPropertyDescriptor(source, sym).enumerable; 291 })); 292 } 293 294 ownKeys.forEach(function (key) { 295 Object(_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(target, key, source[key]); 296 }); 297 } 298 299 return target; 300 } 301 302 /***/ }), 303 304 /***/ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js": 305 /*!******************************************************************!*\ 306 !*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***! 307 \******************************************************************/ 308 /*! exports provided: default */ 309 /***/ (function(module, __webpack_exports__, __webpack_require__) { 310 311 "use strict"; 312 __webpack_require__.r(__webpack_exports__); 313 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _slicedToArray; }); 314 /* harmony import */ var _arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles */ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js"); 315 /* harmony import */ var _iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit */ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js"); 316 /* harmony import */ var _nonIterableRest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nonIterableRest */ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js"); 317 318 319 320 function _slicedToArray(arr, i) { 321 return Object(_arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || Object(_iterableToArrayLimit__WEBPACK_IMPORTED_MODULE_1__["default"])(arr, i) || Object(_nonIterableRest__WEBPACK_IMPORTED_MODULE_2__["default"])(); 322 } 323 324 /***/ }), 325 326 /***/ "./node_modules/@babel/runtime/helpers/esm/toArray.js": 327 /*!************************************************************!*\ 328 !*** ./node_modules/@babel/runtime/helpers/esm/toArray.js ***! 329 \************************************************************/ 330 /*! exports provided: default */ 331 /***/ (function(module, __webpack_exports__, __webpack_require__) { 332 333 "use strict"; 334 __webpack_require__.r(__webpack_exports__); 335 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _toArray; }); 336 /* harmony import */ var _arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles */ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js"); 337 /* harmony import */ var _iterableToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray */ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js"); 338 /* harmony import */ var _nonIterableRest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nonIterableRest */ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js"); 339 340 341 342 function _toArray(arr) { 343 return Object(_arrayWithHoles__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || Object(_iterableToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(arr) || Object(_nonIterableRest__WEBPACK_IMPORTED_MODULE_2__["default"])(); 344 } 345 346 /***/ }), 347 348 /***/ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js": 349 /*!**********************************************************************!*\ 350 !*** ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***! 351 \**********************************************************************/ 352 /*! exports provided: default */ 353 /***/ (function(module, __webpack_exports__, __webpack_require__) { 354 355 "use strict"; 356 __webpack_require__.r(__webpack_exports__); 357 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _toConsumableArray; }); 358 /* harmony import */ var _arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithoutHoles */ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js"); 359 /* harmony import */ var _iterableToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray */ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js"); 360 /* harmony import */ var _nonIterableSpread__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nonIterableSpread */ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js"); 361 362 363 364 function _toConsumableArray(arr) { 365 return Object(_arrayWithoutHoles__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || Object(_iterableToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(arr) || Object(_nonIterableSpread__WEBPACK_IMPORTED_MODULE_2__["default"])(); 366 } 367 368 /***/ }), 369 370 /***/ "./node_modules/@wordpress/blocks/build-module/api/categories.js": 371 /*!***********************************************************************!*\ 372 !*** ./node_modules/@wordpress/blocks/build-module/api/categories.js ***! 373 \***********************************************************************/ 374 /*! exports provided: getCategories, setCategories */ 375 /***/ (function(module, __webpack_exports__, __webpack_require__) { 376 377 "use strict"; 378 __webpack_require__.r(__webpack_exports__); 379 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return getCategories; }); 380 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCategories", function() { return setCategories; }); 381 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 382 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); 383 /** 384 * WordPress dependencies 385 */ 386 387 /** 388 * Returns all the block categories. 389 * 390 * @return {Object[]} Block categories. 391 */ 392 393 function getCategories() { 394 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__["select"])('core/blocks').getCategories(); 395 } 396 /** 397 * Sets the block categories. 398 * 399 * @param {Object[]} categories Block categories. 400 */ 401 402 function setCategories(categories) { 403 Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__["dispatch"])('core/blocks').setCategories(categories); 404 } 405 406 407 /***/ }), 408 409 /***/ "./node_modules/@wordpress/blocks/build-module/api/children.js": 410 /*!*********************************************************************!*\ 411 !*** ./node_modules/@wordpress/blocks/build-module/api/children.js ***! 412 \*********************************************************************/ 413 /*! exports provided: getSerializeCapableElement, concat, fromDOM, toHTML, matcher, default */ 414 /***/ (function(module, __webpack_exports__, __webpack_require__) { 415 416 "use strict"; 417 __webpack_require__.r(__webpack_exports__); 418 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSerializeCapableElement", function() { return getSerializeCapableElement; }); 419 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; }); 420 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromDOM", function() { return fromDOM; }); 421 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toHTML", function() { return toHTML; }); 422 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return matcher; }); 423 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash"); 424 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); 425 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 426 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 427 /* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node */ "./node_modules/@wordpress/blocks/build-module/api/node.js"); 428 /** 429 * External dependencies 430 */ 431 432 /** 433 * WordPress dependencies 434 */ 435 436 437 /** 438 * Internal dependencies 439 */ 440 441 442 /** 443 * A representation of a block's rich text value. 444 * 445 * @typedef {WPBlockNode[]} WPBlockChildren 446 */ 447 448 /** 449 * Given block children, returns a serialize-capable WordPress element. 450 * 451 * @param {WPBlockChildren} children Block children object to convert. 452 * 453 * @return {WPElement} A serialize-capable element. 454 */ 455 456 function getSerializeCapableElement(children) { 457 // The fact that block children are compatible with the element serializer is 458 // merely an implementation detail that currently serves to be true, but 459 // should not be mistaken as being a guarantee on the external API. The 460 // public API only offers guarantees to work with strings (toHTML) and DOM 461 // elements (fromDOM), and should provide utilities to manipulate the value 462 // rather than expect consumers to inspect or construct its shape (concat). 463 return children; 464 } 465 /** 466 * Given block children, returns an array of block nodes. 467 * 468 * @param {WPBlockChildren} children Block children object to convert. 469 * 470 * @return {Array<WPBlockNode>} An array of individual block nodes. 471 */ 472 473 function getChildrenArray(children) { 474 // The fact that block children are compatible with the element serializer 475 // is merely an implementation detail that currently serves to be true, but 476 // should not be mistaken as being a guarantee on the external API. 477 return children; 478 } 479 /** 480 * Given two or more block nodes, returns a new block node representing a 481 * concatenation of its values. 482 * 483 * @param {...WPBlockChildren} blockNodes Block nodes to concatenate. 484 * 485 * @return {WPBlockChildren} Concatenated block node. 486 */ 487 488 489 function concat() { 490 var result = []; 491 492 for (var i = 0; i < arguments.length; i++) { 493 var blockNode = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["castArray"])(i < 0 || arguments.length <= i ? undefined : arguments[i]); 494 495 for (var j = 0; j < blockNode.length; j++) { 496 var child = blockNode[j]; 497 var canConcatToPreviousString = typeof child === 'string' && typeof result[result.length - 1] === 'string'; 498 499 if (canConcatToPreviousString) { 500 result[result.length - 1] += child; 501 } else { 502 result.push(child); 503 } 504 } 505 } 506 507 return result; 508 } 509 /** 510 * Given an iterable set of DOM nodes, returns equivalent block children. 511 * Ignores any non-element/text nodes included in set. 512 * 513 * @param {Iterable.<Node>} domNodes Iterable set of DOM nodes to convert. 514 * 515 * @return {WPBlockChildren} Block children equivalent to DOM nodes. 516 */ 517 518 function fromDOM(domNodes) { 519 var result = []; 520 521 for (var i = 0; i < domNodes.length; i++) { 522 try { 523 result.push(_node__WEBPACK_IMPORTED_MODULE_2__["fromDOM"](domNodes[i])); 524 } catch (error) {// Simply ignore if DOM node could not be converted. 525 } 526 } 527 528 return result; 529 } 530 /** 531 * Given a block node, returns its HTML string representation. 532 * 533 * @param {WPBlockChildren} children Block node(s) to convert to string. 534 * 535 * @return {string} String HTML representation of block node. 536 */ 537 538 function toHTML(children) { 539 var element = getSerializeCapableElement(children); 540 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["renderToString"])(element); 541 } 542 /** 543 * Given a selector, returns an hpq matcher generating a WPBlockChildren value 544 * matching the selector result. 545 * 546 * @param {string} selector DOM selector. 547 * 548 * @return {Function} hpq matcher. 549 */ 550 551 function matcher(selector) { 552 return function (domNode) { 553 var match = domNode; 554 555 if (selector) { 556 match = domNode.querySelector(selector); 557 } 558 559 if (match) { 560 return fromDOM(match.childNodes); 561 } 562 563 return []; 564 }; 565 } 566 /* harmony default export */ __webpack_exports__["default"] = ({ 567 concat: concat, 568 getChildrenArray: getChildrenArray, 569 fromDOM: fromDOM, 570 toHTML: toHTML, 571 matcher: matcher 572 }); 573 574 575 /***/ }), 576 577 /***/ "./node_modules/@wordpress/blocks/build-module/api/factory.js": 578 /*!********************************************************************!*\ 579 !*** ./node_modules/@wordpress/blocks/build-module/api/factory.js ***! 580 \********************************************************************/ 581 /*! exports provided: createBlock, cloneBlock, getPossibleBlockTransformations, findTransform, getBlockTransforms, switchToBlockType */ 582 /***/ (function(module, __webpack_exports__, __webpack_require__) { 583 584 "use strict"; 585 __webpack_require__.r(__webpack_exports__); 586 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createBlock", function() { return createBlock; }); 587 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneBlock", function() { return cloneBlock; }); 588 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPossibleBlockTransformations", function() { return getPossibleBlockTransformations; }); 589 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findTransform", function() { return findTransform; }); 590 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockTransforms", function() { return getBlockTransforms; }); 591 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchToBlockType", function() { return switchToBlockType; }); 592 /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); 593 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 594 /* harmony import */ var uuid_v4__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uuid/v4 */ "./node_modules/uuid/v4.js"); 595 /* harmony import */ var uuid_v4__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(uuid_v4__WEBPACK_IMPORTED_MODULE_2__); 596 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash */ "lodash"); 597 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_3__); 598 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks"); 599 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__); 600 /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js"); 601 602 603 604 /** 605 * External dependencies 606 */ 607 608 609 /** 610 * WordPress dependencies 611 */ 612 613 614 /** 615 * Internal dependencies 616 */ 617 618 619 /** 620 * Returns a block object given its type and attributes. 621 * 622 * @param {string} name Block name. 623 * @param {Object} blockAttributes Block attributes. 624 * @param {?Array} innerBlocks Nested blocks. 625 * 626 * @return {Object} Block object. 627 */ 628 629 function createBlock(name) { 630 var blockAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 631 var innerBlocks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; 632 // Get the type definition associated with a registered block. 633 var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(name); // Ensure attributes contains only values defined by block type, and merge 634 // default values for missing attributes. 635 636 var attributes = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["reduce"])(blockType.attributes, function (result, schema, key) { 637 var value = blockAttributes[key]; 638 639 if (undefined !== value) { 640 result[key] = value; 641 } else if (schema.hasOwnProperty('default')) { 642 result[key] = schema.default; 643 } 644 645 if (['node', 'children'].indexOf(schema.source) !== -1) { 646 // Ensure value passed is always an array, which we're expecting in 647 // the RichText component to handle the deprecated value. 648 if (typeof result[key] === 'string') { 649 result[key] = [result[key]]; 650 } else if (!Array.isArray(result[key])) { 651 result[key] = []; 652 } 653 } 654 655 return result; 656 }, {}); 657 var clientId = uuid_v4__WEBPACK_IMPORTED_MODULE_2___default()(); // Blocks are stored with a unique ID, the assigned type name, the block 658 // attributes, and their inner blocks. 659 660 return { 661 clientId: clientId, 662 name: name, 663 isValid: true, 664 attributes: attributes, 665 innerBlocks: innerBlocks 666 }; 667 } 668 /** 669 * Given a block object, returns a copy of the block object, optionally merging 670 * new attributes and/or replacing its inner blocks. 671 * 672 * @param {Object} block Block object. 673 * @param {Object} mergeAttributes Block attributes. 674 * @param {?Array} newInnerBlocks Nested blocks. 675 * 676 * @return {Object} A cloned block. 677 */ 678 679 function cloneBlock(block) { 680 var mergeAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 681 var newInnerBlocks = arguments.length > 2 ? arguments[2] : undefined; 682 var clientId = uuid_v4__WEBPACK_IMPORTED_MODULE_2___default()(); 683 return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, block, { 684 clientId: clientId, 685 attributes: Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, block.attributes, mergeAttributes), 686 innerBlocks: newInnerBlocks || block.innerBlocks.map(function (innerBlock) { 687 return cloneBlock(innerBlock); 688 }) 689 }); 690 } 691 /** 692 * Returns a boolean indicating whether a transform is possible based on 693 * various bits of context. 694 * 695 * @param {Object} transform The transform object to validate. 696 * @param {string} direction Is this a 'from' or 'to' transform. 697 * @param {Array} blocks The blocks to transform from. 698 * @param {boolean} isMultiBlock Have multiple blocks been selected? 699 * 700 * @return {boolean} Is the transform possible? 701 */ 702 703 var isPossibleTransformForSource = function isPossibleTransformForSource(transform, direction, blocks) { 704 if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(blocks)) { 705 return false; 706 } 707 708 var isMultiBlock = blocks.length > 1; 709 var sourceBlock = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["first"])(blocks); // If multiple blocks are selected, only multi block transforms are allowed. 710 711 var isValidForMultiBlocks = !isMultiBlock || transform.isMultiBlock; 712 713 if (!isValidForMultiBlocks) { 714 return false; 715 } // Only consider 'block' type transforms as valid. 716 717 718 var isBlockType = transform.type === 'block'; 719 720 if (!isBlockType) { 721 return false; 722 } // Check if the transform's block name matches the source block only if this is a transform 'from'. 723 724 725 var hasMatchingName = direction !== 'from' || transform.blocks.indexOf(sourceBlock.name) !== -1; 726 727 if (!hasMatchingName) { 728 return false; 729 } // If the transform has a `isMatch` function specified, check that it returns true. 730 731 732 if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isFunction"])(transform.isMatch)) { 733 var attributes = transform.isMultiBlock ? blocks.map(function (block) { 734 return block.attributes; 735 }) : sourceBlock.attributes; 736 737 if (!transform.isMatch(attributes)) { 738 return false; 739 } 740 } 741 742 return true; 743 }; 744 /** 745 * Returns block types that the 'blocks' can be transformed into, based on 746 * 'from' transforms on other blocks. 747 * 748 * @param {Array} blocks The blocks to transform from. 749 * @param {boolean} isMultiBlock Have multiple blocks been selected? 750 * 751 * @return {Array} Block types that the blocks can be transformed into. 752 */ 753 754 755 var getBlockTypesForPossibleFromTransforms = function getBlockTypesForPossibleFromTransforms(blocks) { 756 if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(blocks)) { 757 return []; 758 } 759 760 var allBlockTypes = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockTypes"])(); // filter all blocks to find those with a 'from' transform. 761 762 var blockTypesWithPossibleFromTransforms = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["filter"])(allBlockTypes, function (blockType) { 763 var fromTransforms = getBlockTransforms('from', blockType.name); 764 return !!findTransform(fromTransforms, function (transform) { 765 return isPossibleTransformForSource(transform, 'from', blocks); 766 }); 767 }); 768 return blockTypesWithPossibleFromTransforms; 769 }; 770 /** 771 * Returns block types that the 'blocks' can be transformed into, based on 772 * the source block's own 'to' transforms. 773 * 774 * @param {Array} blocks The blocks to transform from. 775 * @param {boolean} isMultiBlock Have multiple blocks been selected? 776 * 777 * @return {Array} Block types that the source can be transformed into. 778 */ 779 780 781 var getBlockTypesForPossibleToTransforms = function getBlockTypesForPossibleToTransforms(blocks) { 782 if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(blocks)) { 783 return []; 784 } 785 786 var sourceBlock = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["first"])(blocks); 787 var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(sourceBlock.name); 788 var transformsTo = getBlockTransforms('to', blockType.name); // filter all 'to' transforms to find those that are possible. 789 790 var possibleTransforms = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["filter"])(transformsTo, function (transform) { 791 return isPossibleTransformForSource(transform, 'to', blocks); 792 }); // Build a list of block names using the possible 'to' transforms. 793 794 var blockNames = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["flatMap"])(possibleTransforms, function (transformation) { 795 return transformation.blocks; 796 }); // Map block names to block types. 797 798 return blockNames.map(function (name) { 799 return Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(name); 800 }); 801 }; 802 /** 803 * Returns an array of block types that the set of blocks received as argument 804 * can be transformed into. 805 * 806 * @param {Array} blocks Blocks array. 807 * 808 * @return {Array} Block types that the blocks argument can be transformed to. 809 */ 810 811 812 function getPossibleBlockTransformations(blocks) { 813 if (Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(blocks)) { 814 return []; 815 } 816 817 var sourceBlock = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["first"])(blocks); 818 var isMultiBlock = blocks.length > 1; 819 820 if (isMultiBlock && !Object(lodash__WEBPACK_IMPORTED_MODULE_3__["every"])(blocks, { 821 name: sourceBlock.name 822 })) { 823 return []; 824 } 825 826 var blockTypesForFromTransforms = getBlockTypesForPossibleFromTransforms(blocks); 827 var blockTypesForToTransforms = getBlockTypesForPossibleToTransforms(blocks); 828 return Object(lodash__WEBPACK_IMPORTED_MODULE_3__["uniq"])(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(blockTypesForFromTransforms).concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(blockTypesForToTransforms))); 829 } 830 /** 831 * Given an array of transforms, returns the highest-priority transform where 832 * the predicate function returns a truthy value. A higher-priority transform 833 * is one with a lower priority value (i.e. first in priority order). Returns 834 * null if the transforms set is empty or the predicate function returns a 835 * falsey value for all entries. 836 * 837 * @param {Object[]} transforms Transforms to search. 838 * @param {Function} predicate Function returning true on matching transform. 839 * 840 * @return {?Object} Highest-priority transform candidate. 841 */ 842 843 function findTransform(transforms, predicate) { 844 // The hooks library already has built-in mechanisms for managing priority 845 // queue, so leverage via locally-defined instance. 846 var hooks = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__["createHooks"])(); 847 848 var _loop = function _loop(i) { 849 var candidate = transforms[i]; 850 851 if (predicate(candidate)) { 852 hooks.addFilter('transform', 'transform/' + i.toString(), function (result) { 853 return result ? result : candidate; 854 }, candidate.priority); 855 } 856 }; 857 858 for (var i = 0; i < transforms.length; i++) { 859 _loop(i); 860 } // Filter name is arbitrarily chosen but consistent with above aggregation. 861 862 863 return hooks.applyFilters('transform', null); 864 } 865 /** 866 * Returns normal block transforms for a given transform direction, optionally 867 * for a specific block by name, or an empty array if there are no transforms. 868 * If no block name is provided, returns transforms for all blocks. A normal 869 * transform object includes `blockName` as a property. 870 * 871 * @param {string} direction Transform direction ("to", "from"). 872 * @param {?string} blockName Optional block name. 873 * 874 * @return {Array} Block transforms for direction. 875 */ 876 877 function getBlockTransforms(direction, blockName) { 878 // When retrieving transforms for all block types, recurse into self. 879 if (blockName === undefined) { 880 return Object(lodash__WEBPACK_IMPORTED_MODULE_3__["flatMap"])(Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockTypes"])(), function (_ref) { 881 var name = _ref.name; 882 return getBlockTransforms(direction, name); 883 }); 884 } // Validate that block type exists and has array of direction. 885 886 887 var _ref2 = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(blockName) || {}, 888 transforms = _ref2.transforms; 889 890 if (!transforms || !Array.isArray(transforms[direction])) { 891 return []; 892 } // Map transforms to normal form. 893 894 895 return transforms[direction].map(function (transform) { 896 return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, transform, { 897 blockName: blockName 898 }); 899 }); 900 } 901 /** 902 * Switch one or more blocks into one or more blocks of the new block type. 903 * 904 * @param {Array|Object} blocks Blocks array or block object. 905 * @param {string} name Block name. 906 * 907 * @return {Array} Array of blocks. 908 */ 909 910 function switchToBlockType(blocks, name) { 911 var blocksArray = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(blocks); 912 var isMultiBlock = blocksArray.length > 1; 913 var firstBlock = blocksArray[0]; 914 var sourceName = firstBlock.name; 915 916 if (isMultiBlock && !Object(lodash__WEBPACK_IMPORTED_MODULE_3__["every"])(blocksArray, function (block) { 917 return block.name === sourceName; 918 })) { 919 return null; 920 } // Find the right transformation by giving priority to the "to" 921 // transformation. 922 923 924 var transformationsFrom = getBlockTransforms('from', name); 925 var transformationsTo = getBlockTransforms('to', sourceName); 926 var transformation = findTransform(transformationsTo, function (t) { 927 return t.type === 'block' && t.blocks.indexOf(name) !== -1 && (!isMultiBlock || t.isMultiBlock); 928 }) || findTransform(transformationsFrom, function (t) { 929 return t.type === 'block' && t.blocks.indexOf(sourceName) !== -1 && (!isMultiBlock || t.isMultiBlock); 930 }); // Stop if there is no valid transformation. 931 932 if (!transformation) { 933 return null; 934 } 935 936 var transformationResults; 937 938 if (transformation.isMultiBlock) { 939 transformationResults = transformation.transform(blocksArray.map(function (currentBlock) { 940 return currentBlock.attributes; 941 })); 942 } else { 943 transformationResults = transformation.transform(firstBlock.attributes); 944 } // Ensure that the transformation function returned an object or an array 945 // of objects. 946 947 948 if (!Object(lodash__WEBPACK_IMPORTED_MODULE_3__["isObjectLike"])(transformationResults)) { 949 return null; 950 } // If the transformation function returned a single object, we want to work 951 // with an array instead. 952 953 954 transformationResults = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(transformationResults); // Ensure that every block object returned by the transformation has a 955 // valid block type. 956 957 if (transformationResults.some(function (result) { 958 return !Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(result.name); 959 })) { 960 return null; 961 } 962 963 var firstSwitchedBlock = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["findIndex"])(transformationResults, function (result) { 964 return result.name === name; 965 }); // Ensure that at least one block object returned by the transformation has 966 // the expected "destination" block type. 967 968 if (firstSwitchedBlock < 0) { 969 return null; 970 } 971 972 return transformationResults.map(function (result, index) { 973 var transformedBlock = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, result, { 974 // The first transformed block whose type matches the "destination" 975 // type gets to keep the existing client ID of the first block. 976 clientId: index === firstSwitchedBlock ? firstBlock.clientId : result.clientId 977 }); 978 /** 979 * Filters an individual transform result from block transformation. 980 * All of the original blocks are passed, since transformations are 981 * many-to-many, not one-to-one. 982 * 983 * @param {Object} transformedBlock The transformed block. 984 * @param {Object[]} blocks Original blocks transformed. 985 */ 986 987 988 return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__["applyFilters"])('blocks.switchToBlockType.transformedBlock', transformedBlock, blocks); 989 }); 990 } 991 992 993 /***/ }), 994 995 /***/ "./node_modules/@wordpress/blocks/build-module/api/index.js": 996 /*!******************************************************************!*\ 997 !*** ./node_modules/@wordpress/blocks/build-module/api/index.js ***! 998 \******************************************************************/ 999 /*! exports provided: createBlock, cloneBlock, getPossibleBlockTransformations, switchToBlockType, getBlockTransforms, findTransform, parse, getBlockAttributes, parseWithAttributeSchema, rawHandler, getPhrasingContentSchema, serialize, getBlockContent, getBlockDefaultClassName, getBlockMenuDefaultClassName, getSaveElement, getSaveContent, isValidBlock, getCategories, setCategories, registerBlockType, unregisterBlockType, setUnknownTypeHandlerName, getUnknownTypeHandlerName, setFreeformContentHandlerName, getFreeformContentHandlerName, setUnregisteredTypeHandlerName, getUnregisteredTypeHandlerName, setDefaultBlockName, getDefaultBlockName, getBlockType, getBlockTypes, getBlockSupport, hasBlockSupport, isReusableBlock, getChildBlockNames, hasChildBlocks, hasChildBlocksWithInserterSupport, unstable__bootstrapServerSideBlockDefinitions, registerBlockStyle, isUnmodifiedDefaultBlock, normalizeIconObject, isValidIcon, doBlocksMatchTemplate, synchronizeBlocksWithTemplate, children, node */ 1000 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1001 1002 "use strict"; 1003 __webpack_require__.r(__webpack_exports__); 1004 /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js"); 1005 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createBlock", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["createBlock"]; }); 1006 1007 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cloneBlock", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["cloneBlock"]; }); 1008 1009 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPossibleBlockTransformations", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["getPossibleBlockTransformations"]; }); 1010 1011 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchToBlockType", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["switchToBlockType"]; }); 1012 1013 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockTransforms", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["getBlockTransforms"]; }); 1014 1015 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findTransform", function() { return _factory__WEBPACK_IMPORTED_MODULE_0__["findTransform"]; }); 1016 1017 /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parser */ "./node_modules/@wordpress/blocks/build-module/api/parser.js"); 1018 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return _parser__WEBPACK_IMPORTED_MODULE_1__["default"]; }); 1019 1020 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockAttributes", function() { return _parser__WEBPACK_IMPORTED_MODULE_1__["getBlockAttributes"]; }); 1021 1022 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseWithAttributeSchema", function() { return _parser__WEBPACK_IMPORTED_MODULE_1__["parseWithAttributeSchema"]; }); 1023 1024 /* harmony import */ var _raw_handling__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./raw-handling */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/index.js"); 1025 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rawHandler", function() { return _raw_handling__WEBPACK_IMPORTED_MODULE_2__["default"]; }); 1026 1027 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPhrasingContentSchema", function() { return _raw_handling__WEBPACK_IMPORTED_MODULE_2__["getPhrasingContentSchema"]; }); 1028 1029 /* harmony import */ var _serializer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./serializer */ "./node_modules/@wordpress/blocks/build-module/api/serializer.js"); 1030 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "serialize", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["default"]; }); 1031 1032 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockContent", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getBlockContent"]; }); 1033 1034 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockDefaultClassName", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getBlockDefaultClassName"]; }); 1035 1036 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockMenuDefaultClassName", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getBlockMenuDefaultClassName"]; }); 1037 1038 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSaveElement", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getSaveElement"]; }); 1039 1040 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSaveContent", function() { return _serializer__WEBPACK_IMPORTED_MODULE_3__["getSaveContent"]; }); 1041 1042 /* harmony import */ var _validation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./validation */ "./node_modules/@wordpress/blocks/build-module/api/validation.js"); 1043 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidBlock", function() { return _validation__WEBPACK_IMPORTED_MODULE_4__["isValidBlock"]; }); 1044 1045 /* harmony import */ var _categories__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./categories */ "./node_modules/@wordpress/blocks/build-module/api/categories.js"); 1046 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return _categories__WEBPACK_IMPORTED_MODULE_5__["getCategories"]; }); 1047 1048 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setCategories", function() { return _categories__WEBPACK_IMPORTED_MODULE_5__["setCategories"]; }); 1049 1050 /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js"); 1051 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerBlockType", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["registerBlockType"]; }); 1052 1053 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unregisterBlockType", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["unregisterBlockType"]; }); 1054 1055 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setUnknownTypeHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["setUnknownTypeHandlerName"]; }); 1056 1057 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnknownTypeHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getUnknownTypeHandlerName"]; }); 1058 1059 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setFreeformContentHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["setFreeformContentHandlerName"]; }); 1060 1061 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getFreeformContentHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getFreeformContentHandlerName"]; }); 1062 1063 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setUnregisteredTypeHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["setUnregisteredTypeHandlerName"]; }); 1064 1065 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnregisteredTypeHandlerName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getUnregisteredTypeHandlerName"]; }); 1066 1067 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setDefaultBlockName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["setDefaultBlockName"]; }); 1068 1069 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultBlockName", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getDefaultBlockName"]; }); 1070 1071 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockType", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getBlockType"]; }); 1072 1073 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockTypes", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getBlockTypes"]; }); 1074 1075 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockSupport", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getBlockSupport"]; }); 1076 1077 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasBlockSupport", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["hasBlockSupport"]; }); 1078 1079 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isReusableBlock", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["isReusableBlock"]; }); 1080 1081 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getChildBlockNames", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["getChildBlockNames"]; }); 1082 1083 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocks", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["hasChildBlocks"]; }); 1084 1085 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocksWithInserterSupport", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["hasChildBlocksWithInserterSupport"]; }); 1086 1087 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unstable__bootstrapServerSideBlockDefinitions", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["unstable__bootstrapServerSideBlockDefinitions"]; }); 1088 1089 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerBlockStyle", function() { return _registration__WEBPACK_IMPORTED_MODULE_6__["registerBlockStyle"]; }); 1090 1091 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils */ "./node_modules/@wordpress/blocks/build-module/api/utils.js"); 1092 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isUnmodifiedDefaultBlock", function() { return _utils__WEBPACK_IMPORTED_MODULE_7__["isUnmodifiedDefaultBlock"]; }); 1093 1094 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "normalizeIconObject", function() { return _utils__WEBPACK_IMPORTED_MODULE_7__["normalizeIconObject"]; }); 1095 1096 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidIcon", function() { return _utils__WEBPACK_IMPORTED_MODULE_7__["isValidIcon"]; }); 1097 1098 /* harmony import */ var _templates__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./templates */ "./node_modules/@wordpress/blocks/build-module/api/templates.js"); 1099 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "doBlocksMatchTemplate", function() { return _templates__WEBPACK_IMPORTED_MODULE_8__["doBlocksMatchTemplate"]; }); 1100 1101 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "synchronizeBlocksWithTemplate", function() { return _templates__WEBPACK_IMPORTED_MODULE_8__["synchronizeBlocksWithTemplate"]; }); 1102 1103 /* harmony import */ var _children__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./children */ "./node_modules/@wordpress/blocks/build-module/api/children.js"); 1104 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "children", function() { return _children__WEBPACK_IMPORTED_MODULE_9__["default"]; }); 1105 1106 /* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./node */ "./node_modules/@wordpress/blocks/build-module/api/node.js"); 1107 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "node", function() { return _node__WEBPACK_IMPORTED_MODULE_10__["default"]; }); 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 /***/ }), 1123 1124 /***/ "./node_modules/@wordpress/blocks/build-module/api/matchers.js": 1125 /*!*********************************************************************!*\ 1126 !*** ./node_modules/@wordpress/blocks/build-module/api/matchers.js ***! 1127 \*********************************************************************/ 1128 /*! exports provided: attr, prop, text, query, node, children, html */ 1129 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1130 1131 "use strict"; 1132 __webpack_require__.r(__webpack_exports__); 1133 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "html", function() { return html; }); 1134 /* harmony import */ var hpq__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! hpq */ "./node_modules/hpq/es/index.js"); 1135 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "attr", function() { return hpq__WEBPACK_IMPORTED_MODULE_0__["attr"]; }); 1136 1137 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "prop", function() { return hpq__WEBPACK_IMPORTED_MODULE_0__["prop"]; }); 1138 1139 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "text", function() { return hpq__WEBPACK_IMPORTED_MODULE_0__["text"]; }); 1140 1141 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "query", function() { return hpq__WEBPACK_IMPORTED_MODULE_0__["query"]; }); 1142 1143 /* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node */ "./node_modules/@wordpress/blocks/build-module/api/node.js"); 1144 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "node", function() { return _node__WEBPACK_IMPORTED_MODULE_1__["matcher"]; }); 1145 1146 /* harmony import */ var _children__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./children */ "./node_modules/@wordpress/blocks/build-module/api/children.js"); 1147 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "children", function() { return _children__WEBPACK_IMPORTED_MODULE_2__["matcher"]; }); 1148 1149 /** 1150 * External dependencies 1151 */ 1152 1153 /** 1154 * Internal dependencies 1155 */ 1156 1157 1158 1159 function html(selector, multilineTag) { 1160 return function (domNode) { 1161 var match = domNode; 1162 1163 if (selector) { 1164 match = domNode.querySelector(selector); 1165 } 1166 1167 if (!match) { 1168 return ''; 1169 } 1170 1171 if (multilineTag) { 1172 var value = ''; 1173 var length = match.children.length; 1174 1175 for (var index = 0; index < length; index++) { 1176 var child = match.children[index]; 1177 1178 if (child.nodeName.toLowerCase() !== multilineTag) { 1179 continue; 1180 } 1181 1182 value += child.outerHTML; 1183 } 1184 1185 return value; 1186 } 1187 1188 return match.innerHTML; 1189 }; 1190 } 1191 1192 1193 /***/ }), 1194 1195 /***/ "./node_modules/@wordpress/blocks/build-module/api/node.js": 1196 /*!*****************************************************************!*\ 1197 !*** ./node_modules/@wordpress/blocks/build-module/api/node.js ***! 1198 \*****************************************************************/ 1199 /*! exports provided: getNamedNodeMapAsObject, fromDOM, toHTML, matcher, default */ 1200 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1201 1202 "use strict"; 1203 __webpack_require__.r(__webpack_exports__); 1204 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNamedNodeMapAsObject", function() { return getNamedNodeMapAsObject; }); 1205 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromDOM", function() { return fromDOM; }); 1206 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toHTML", function() { return toHTML; }); 1207 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return matcher; }); 1208 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 1209 /* harmony import */ var _children__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./children */ "./node_modules/@wordpress/blocks/build-module/api/children.js"); 1210 1211 1212 /** 1213 * Internal dependencies 1214 */ 1215 1216 /** 1217 * Browser dependencies 1218 */ 1219 1220 var _window$Node = window.Node, 1221 TEXT_NODE = _window$Node.TEXT_NODE, 1222 ELEMENT_NODE = _window$Node.ELEMENT_NODE; 1223 /** 1224 * A representation of a single node within a block's rich text value. If 1225 * representing a text node, the value is simply a string of the node value. 1226 * As representing an element node, it is an object of: 1227 * 1228 * 1. `type` (string): Tag name. 1229 * 2. `props` (object): Attributes and children array of WPBlockNode. 1230 * 1231 * @typedef {string|Object} WPBlockNode 1232 */ 1233 1234 /** 1235 * Given a single node and a node type (e.g. `'br'`), returns true if the node 1236 * corresponds to that type, false otherwise. 1237 * 1238 * @param {WPBlockNode} node Block node to test 1239 * @param {string} type Node to type to test against. 1240 * 1241 * @return {boolean} Whether node is of intended type. 1242 */ 1243 1244 function isNodeOfType(node, type) { 1245 return node && node.type === type; 1246 } 1247 /** 1248 * Given an object implementing the NamedNodeMap interface, returns a plain 1249 * object equivalent value of name, value key-value pairs. 1250 * 1251 * @see https://dom.spec.whatwg.org/#interface-namednodemap 1252 * 1253 * @param {NamedNodeMap} nodeMap NamedNodeMap to convert to object. 1254 * 1255 * @return {Object} Object equivalent value of NamedNodeMap. 1256 */ 1257 1258 1259 function getNamedNodeMapAsObject(nodeMap) { 1260 var result = {}; 1261 1262 for (var i = 0; i < nodeMap.length; i++) { 1263 var _nodeMap$i = nodeMap[i], 1264 name = _nodeMap$i.name, 1265 value = _nodeMap$i.value; 1266 result[name] = value; 1267 } 1268 1269 return result; 1270 } 1271 /** 1272 * Given a DOM Element or Text node, returns an equivalent block node. Throws 1273 * if passed any node type other than element or text. 1274 * 1275 * @throws {TypeError} If non-element/text node is passed. 1276 * 1277 * @param {Node} domNode DOM node to convert. 1278 * 1279 * @return {WPBlockNode} Block node equivalent to DOM node. 1280 */ 1281 1282 function fromDOM(domNode) { 1283 if (domNode.nodeType === TEXT_NODE) { 1284 return domNode.nodeValue; 1285 } 1286 1287 if (domNode.nodeType !== ELEMENT_NODE) { 1288 throw new TypeError('A block node can only be created from a node of type text or ' + 'element.'); 1289 } 1290 1291 return { 1292 type: domNode.nodeName.toLowerCase(), 1293 props: Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, getNamedNodeMapAsObject(domNode.attributes), { 1294 children: _children__WEBPACK_IMPORTED_MODULE_1__["fromDOM"](domNode.childNodes) 1295 }) 1296 }; 1297 } 1298 /** 1299 * Given a block node, returns its HTML string representation. 1300 * 1301 * @param {WPBlockNode} node Block node to convert to string. 1302 * 1303 * @return {string} String HTML representation of block node. 1304 */ 1305 1306 function toHTML(node) { 1307 return _children__WEBPACK_IMPORTED_MODULE_1__["toHTML"]([node]); 1308 } 1309 /** 1310 * Given a selector, returns an hpq matcher generating a WPBlockNode value 1311 * matching the selector result. 1312 * 1313 * @param {string} selector DOM selector. 1314 * 1315 * @return {Function} hpq matcher. 1316 */ 1317 1318 function matcher(selector) { 1319 return function (domNode) { 1320 var match = domNode; 1321 1322 if (selector) { 1323 match = domNode.querySelector(selector); 1324 } 1325 1326 try { 1327 return fromDOM(match); 1328 } catch (error) { 1329 return null; 1330 } 1331 }; 1332 } 1333 /* harmony default export */ __webpack_exports__["default"] = ({ 1334 isNodeOfType: isNodeOfType, 1335 fromDOM: fromDOM, 1336 toHTML: toHTML, 1337 matcher: matcher 1338 }); 1339 1340 1341 /***/ }), 1342 1343 /***/ "./node_modules/@wordpress/blocks/build-module/api/parser.js": 1344 /*!*******************************************************************!*\ 1345 !*** ./node_modules/@wordpress/blocks/build-module/api/parser.js ***! 1346 \*******************************************************************/ 1347 /*! exports provided: toBooleanAttributeMatcher, isOfType, isOfTypes, isAmbiguousStringSource, asType, matcherFromSource, parseWithAttributeSchema, getBlockAttribute, getBlockAttributes, getMigratedBlock, createBlockWithFallback, parseWithGrammar, default */ 1348 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1349 1350 "use strict"; 1351 __webpack_require__.r(__webpack_exports__); 1352 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toBooleanAttributeMatcher", function() { return toBooleanAttributeMatcher; }); 1353 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isOfType", function() { return isOfType; }); 1354 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isOfTypes", function() { return isOfTypes; }); 1355 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAmbiguousStringSource", function() { return isAmbiguousStringSource; }); 1356 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asType", function() { return asType; }); 1357 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "matcherFromSource", function() { return matcherFromSource; }); 1358 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseWithAttributeSchema", function() { return parseWithAttributeSchema; }); 1359 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockAttribute", function() { return getBlockAttribute; }); 1360 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockAttributes", function() { return getBlockAttributes; }); 1361 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMigratedBlock", function() { return getMigratedBlock; }); 1362 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createBlockWithFallback", function() { return createBlockWithFallback; }); 1363 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseWithGrammar", function() { return parseWithGrammar; }); 1364 /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); 1365 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 1366 /* harmony import */ var hpq__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! hpq */ "./node_modules/hpq/es/index.js"); 1367 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash */ "lodash"); 1368 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_3__); 1369 /* harmony import */ var _wordpress_autop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/autop */ "@wordpress/autop"); 1370 /* harmony import */ var _wordpress_autop__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_autop__WEBPACK_IMPORTED_MODULE_4__); 1371 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks"); 1372 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_5__); 1373 /* harmony import */ var _wordpress_block_serialization_default_parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/block-serialization-default-parser */ "@wordpress/block-serialization-default-parser"); 1374 /* harmony import */ var _wordpress_block_serialization_default_parser__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_serialization_default_parser__WEBPACK_IMPORTED_MODULE_6__); 1375 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated"); 1376 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_7__); 1377 /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js"); 1378 /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js"); 1379 /* harmony import */ var _validation__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./validation */ "./node_modules/@wordpress/blocks/build-module/api/validation.js"); 1380 /* harmony import */ var _serializer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./serializer */ "./node_modules/@wordpress/blocks/build-module/api/serializer.js"); 1381 /* harmony import */ var _matchers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./matchers */ "./node_modules/@wordpress/blocks/build-module/api/matchers.js"); 1382 1383 1384 1385 /** 1386 * External dependencies 1387 */ 1388 1389 1390 /** 1391 * WordPress dependencies 1392 */ 1393 1394 1395 1396 1397 1398 /** 1399 * Internal dependencies 1400 */ 1401 1402 1403 1404 1405 1406 1407 /** 1408 * Sources which are guaranteed to return a string value. 1409 * 1410 * @type {Set} 1411 */ 1412 1413 var STRING_SOURCES = new Set(['attribute', 'html', 'text', 'tag']); 1414 /** 1415 * Higher-order hpq matcher which enhances an attribute matcher to return true 1416 * or false depending on whether the original matcher returns undefined. This 1417 * is useful for boolean attributes (e.g. disabled) whose attribute values may 1418 * be technically falsey (empty string), though their mere presence should be 1419 * enough to infer as true. 1420 * 1421 * @param {Function} matcher Original hpq matcher. 1422 * 1423 * @return {Function} Enhanced hpq matcher. 1424 */ 1425 1426 var toBooleanAttributeMatcher = function toBooleanAttributeMatcher(matcher) { 1427 return Object(lodash__WEBPACK_IMPORTED_MODULE_3__["flow"])([matcher, // Expected values from `attr( 'disabled' )`: 1428 // 1429 // <input> 1430 // - Value: `undefined` 1431 // - Transformed: `false` 1432 // 1433 // <input disabled> 1434 // - Value: `''` 1435 // - Transformed: `true` 1436 // 1437 // <input disabled="disabled"> 1438 // - Value: `'disabled'` 1439 // - Transformed: `true` 1440 function (value) { 1441 return value !== undefined; 1442 }]); 1443 }; 1444 /** 1445 * Returns true if value is of the given JSON schema type, or false otherwise. 1446 * 1447 * @see http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25 1448 * 1449 * @param {*} value Value to test. 1450 * @param {string} type Type to test. 1451 * 1452 * @return {boolean} Whether value is of type. 1453 */ 1454 1455 function isOfType(value, type) { 1456 switch (type) { 1457 case 'string': 1458 return typeof value === 'string'; 1459 1460 case 'boolean': 1461 return typeof value === 'boolean'; 1462 1463 case 'object': 1464 return !!value && value.constructor === Object; 1465 1466 case 'null': 1467 return value === null; 1468 1469 case 'array': 1470 return Array.isArray(value); 1471 1472 case 'integer': 1473 case 'number': 1474 return typeof value === 'number'; 1475 } 1476 1477 return true; 1478 } 1479 /** 1480 * Returns true if value is of an array of given JSON schema types, or false 1481 * otherwise. 1482 * 1483 * @see http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25 1484 * 1485 * @param {*} value Value to test. 1486 * @param {string[]} types Types to test. 1487 * 1488 * @return {boolean} Whether value is of types. 1489 */ 1490 1491 function isOfTypes(value, types) { 1492 return types.some(function (type) { 1493 return isOfType(value, type); 1494 }); 1495 } 1496 /** 1497 * Returns true if the given attribute schema describes a value which may be 1498 * an ambiguous string. 1499 * 1500 * Some sources are ambiguously serialized as strings, for which value casting 1501 * is enabled. This is only possible when a singular type is assigned to the 1502 * attribute schema, since the string ambiguity makes it impossible to know the 1503 * correct type of multiple to which to cast. 1504 * 1505 * @param {Object} attributeSchema Attribute's schema. 1506 * 1507 * @return {boolean} Whether attribute schema defines an ambiguous string 1508 * source. 1509 */ 1510 1511 function isAmbiguousStringSource(attributeSchema) { 1512 var source = attributeSchema.source, 1513 type = attributeSchema.type; 1514 var isStringSource = STRING_SOURCES.has(source); 1515 var isSingleType = typeof type === 'string'; 1516 return isStringSource && isSingleType; 1517 } 1518 /** 1519 * Returns value coerced to the specified JSON schema type string. 1520 * 1521 * @see http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25 1522 * 1523 * @param {*} value Original value. 1524 * @param {string} type Type to coerce. 1525 * 1526 * @return {*} Coerced value. 1527 */ 1528 1529 function asType(value, type) { 1530 switch (type) { 1531 case 'string': 1532 return String(value); 1533 1534 case 'boolean': 1535 return Boolean(value); 1536 1537 case 'object': 1538 return Object(value); 1539 1540 case 'null': 1541 return null; 1542 1543 case 'array': 1544 if (Array.isArray(value)) { 1545 return value; 1546 } 1547 1548 return Array.from(value); 1549 1550 case 'integer': 1551 case 'number': 1552 return Number(value); 1553 } 1554 1555 return value; 1556 } 1557 /** 1558 * Returns an hpq matcher given a source object. 1559 * 1560 * @param {Object} sourceConfig Attribute Source object. 1561 * 1562 * @return {Function} A hpq Matcher. 1563 */ 1564 1565 function matcherFromSource(sourceConfig) { 1566 switch (sourceConfig.source) { 1567 case 'attribute': 1568 var matcher = Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["attr"])(sourceConfig.selector, sourceConfig.attribute); 1569 1570 if (sourceConfig.type === 'boolean') { 1571 matcher = toBooleanAttributeMatcher(matcher); 1572 } 1573 1574 return matcher; 1575 1576 case 'html': 1577 return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["html"])(sourceConfig.selector, sourceConfig.multiline); 1578 1579 case 'text': 1580 return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["text"])(sourceConfig.selector); 1581 1582 case 'children': 1583 return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["children"])(sourceConfig.selector); 1584 1585 case 'node': 1586 return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["node"])(sourceConfig.selector); 1587 1588 case 'query': 1589 var subMatchers = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["mapValues"])(sourceConfig.query, matcherFromSource); 1590 return Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["query"])(sourceConfig.selector, subMatchers); 1591 1592 case 'tag': 1593 return Object(lodash__WEBPACK_IMPORTED_MODULE_3__["flow"])([Object(_matchers__WEBPACK_IMPORTED_MODULE_12__["prop"])(sourceConfig.selector, 'nodeName'), function (value) { 1594 return value.toLowerCase(); 1595 }]); 1596 1597 default: 1598 // eslint-disable-next-line no-console 1599 console.error("Unknown source type \"".concat(sourceConfig.source, "\"")); 1600 } 1601 } 1602 /** 1603 * Given a block's raw content and an attribute's schema returns the attribute's 1604 * value depending on its source. 1605 * 1606 * @param {string} innerHTML Block's raw content. 1607 * @param {Object} attributeSchema Attribute's schema. 1608 * 1609 * @return {*} Attribute value. 1610 */ 1611 1612 function parseWithAttributeSchema(innerHTML, attributeSchema) { 1613 return Object(hpq__WEBPACK_IMPORTED_MODULE_2__["parse"])(innerHTML, matcherFromSource(attributeSchema)); 1614 } 1615 /** 1616 * Given an attribute key, an attribute's schema, a block's raw content and the 1617 * commentAttributes returns the attribute value depending on its source 1618 * definition of the given attribute key. 1619 * 1620 * @param {string} attributeKey Attribute key. 1621 * @param {Object} attributeSchema Attribute's schema. 1622 * @param {string} innerHTML Block's raw content. 1623 * @param {Object} commentAttributes Block's comment attributes. 1624 * 1625 * @return {*} Attribute value. 1626 */ 1627 1628 function getBlockAttribute(attributeKey, attributeSchema, innerHTML, commentAttributes) { 1629 var type = attributeSchema.type; 1630 var value; 1631 1632 switch (attributeSchema.source) { 1633 // undefined source means that it's an attribute serialized to the block's "comment" 1634 case undefined: 1635 value = commentAttributes ? commentAttributes[attributeKey] : undefined; 1636 break; 1637 1638 case 'attribute': 1639 case 'property': 1640 case 'html': 1641 case 'text': 1642 case 'children': 1643 case 'node': 1644 case 'query': 1645 case 'tag': 1646 value = parseWithAttributeSchema(innerHTML, attributeSchema); 1647 break; 1648 } 1649 1650 if (value !== undefined) { 1651 if (isAmbiguousStringSource(attributeSchema)) { 1652 if (!isOfTypes(value, Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(type))) { 1653 _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_7___default()('Attribute type coercion', { 1654 plugin: 'Gutenberg', 1655 version: '4.2', 1656 hint: 'Omit the source to preserve type via serialized ' + 'comment demarcation.' 1657 }); 1658 value = asType(value, type); 1659 } 1660 } else if (type !== undefined && !isOfTypes(value, Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(type))) { 1661 // Reject the value if it is not valid of type. Reverting to the 1662 // undefined value ensures the default is restored, if applicable. 1663 value = undefined; 1664 } 1665 } 1666 1667 if (value === undefined) { 1668 return attributeSchema.default; 1669 } 1670 1671 return value; 1672 } 1673 /** 1674 * Returns the block attributes of a registered block node given its type. 1675 * 1676 * @param {?Object} blockType Block type. 1677 * @param {string} innerHTML Raw block content. 1678 * @param {?Object} attributes Known block attributes (from delimiters). 1679 * 1680 * @return {Object} All block attributes. 1681 */ 1682 1683 function getBlockAttributes(blockType, innerHTML, attributes) { 1684 var blockAttributes = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["mapValues"])(blockType.attributes, function (attributeSchema, attributeKey) { 1685 return getBlockAttribute(attributeKey, attributeSchema, innerHTML, attributes); 1686 }); 1687 return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_5__["applyFilters"])('blocks.getBlockAttributes', blockAttributes, blockType, innerHTML, attributes); 1688 } 1689 /** 1690 * Given a block object, returns a new copy of the block with any applicable 1691 * deprecated migrations applied, or the original block if it was both valid 1692 * and no eligible migrations exist. 1693 * 1694 * @param {WPBlock} block Original block object. 1695 * 1696 * @return {WPBlock} Migrated block object. 1697 */ 1698 1699 function getMigratedBlock(block) { 1700 var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getBlockType"])(block.name); 1701 var deprecatedDefinitions = blockType.deprecated; 1702 1703 if (!deprecatedDefinitions || !deprecatedDefinitions.length) { 1704 return block; 1705 } 1706 1707 var _block = block, 1708 originalContent = _block.originalContent, 1709 attributes = _block.attributes, 1710 innerBlocks = _block.innerBlocks; 1711 1712 for (var i = 0; i < deprecatedDefinitions.length; i++) { 1713 // A block can opt into a migration even if the block is valid by 1714 // defining isEligible on its deprecation. If the block is both valid 1715 // and does not opt to migrate, skip. 1716 var _deprecatedDefinition = deprecatedDefinitions[i].isEligible, 1717 isEligible = _deprecatedDefinition === void 0 ? lodash__WEBPACK_IMPORTED_MODULE_3__["stubFalse"] : _deprecatedDefinition; 1718 1719 if (block.isValid && !isEligible(attributes, innerBlocks)) { 1720 continue; 1721 } // Block type properties which could impact either serialization or 1722 // parsing are not considered in the deprecated block type by default, 1723 // and must be explicitly provided. 1724 1725 1726 var deprecatedBlockType = Object.assign(Object(lodash__WEBPACK_IMPORTED_MODULE_3__["omit"])(blockType, ['attributes', 'save', 'supports']), deprecatedDefinitions[i]); 1727 var migratedAttributes = getBlockAttributes(deprecatedBlockType, originalContent, attributes); // Ignore the deprecation if it produces a block which is not valid. 1728 1729 var isValid = Object(_validation__WEBPACK_IMPORTED_MODULE_10__["isValidBlock"])(originalContent, deprecatedBlockType, migratedAttributes); 1730 1731 if (!isValid) { 1732 continue; 1733 } 1734 1735 block = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, block, { 1736 isValid: true 1737 }); 1738 var migratedInnerBlocks = innerBlocks; // A block may provide custom behavior to assign new attributes and/or 1739 // inner blocks. 1740 1741 var migrate = deprecatedBlockType.migrate; 1742 1743 if (migrate) { 1744 var _castArray = Object(lodash__WEBPACK_IMPORTED_MODULE_3__["castArray"])(migrate(migratedAttributes, innerBlocks)); 1745 1746 var _castArray2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_castArray, 2); 1747 1748 var _castArray2$ = _castArray2[0]; 1749 migratedAttributes = _castArray2$ === void 0 ? attributes : _castArray2$; 1750 var _castArray2$2 = _castArray2[1]; 1751 migratedInnerBlocks = _castArray2$2 === void 0 ? innerBlocks : _castArray2$2; 1752 } 1753 1754 block.attributes = migratedAttributes; 1755 block.innerBlocks = migratedInnerBlocks; 1756 } 1757 1758 return block; 1759 } 1760 /** 1761 * Creates a block with fallback to the unknown type handler. 1762 * 1763 * @param {Object} blockNode Parsed block node. 1764 * 1765 * @return {?Object} An initialized block object (if possible). 1766 */ 1767 1768 function createBlockWithFallback(blockNode) { 1769 var originalName = blockNode.blockName; 1770 var attributes = blockNode.attrs, 1771 _blockNode$innerBlock = blockNode.innerBlocks, 1772 innerBlocks = _blockNode$innerBlock === void 0 ? [] : _blockNode$innerBlock, 1773 innerHTML = blockNode.innerHTML; 1774 var freeformContentFallbackBlock = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getFreeformContentHandlerName"])(); 1775 var unregisteredFallbackBlock = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getUnregisteredTypeHandlerName"])() || freeformContentFallbackBlock; 1776 attributes = attributes || {}; // Trim content to avoid creation of intermediary freeform segments. 1777 1778 var originalUndelimitedContent = innerHTML = innerHTML.trim(); // Use type from block content if available. Otherwise, default to the 1779 // freeform content fallback. 1780 1781 var name = originalName || freeformContentFallbackBlock; // Convert 'core/text' blocks in existing content to 'core/paragraph'. 1782 1783 if ('core/text' === name || 'core/cover-text' === name) { 1784 name = 'core/paragraph'; 1785 } // Fallback content may be upgraded from classic editor expecting implicit 1786 // automatic paragraphs, so preserve them. Assumes wpautop is idempotent, 1787 // meaning there are no negative consequences to repeated autop calls. 1788 1789 1790 if (name === freeformContentFallbackBlock) { 1791 innerHTML = Object(_wordpress_autop__WEBPACK_IMPORTED_MODULE_4__["autop"])(innerHTML).trim(); 1792 } // Try finding the type for known block name, else fall back again. 1793 1794 1795 var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getBlockType"])(name); 1796 1797 if (!blockType) { 1798 // If detected as a block which is not registered, preserve comment 1799 // delimiters in content of unregistered type handler. 1800 if (name) { 1801 innerHTML = Object(_serializer__WEBPACK_IMPORTED_MODULE_11__["getCommentDelimitedContent"])(name, attributes, innerHTML); 1802 } 1803 1804 name = unregisteredFallbackBlock; 1805 attributes = { 1806 originalName: originalName, 1807 originalUndelimitedContent: originalUndelimitedContent 1808 }; 1809 blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_8__["getBlockType"])(name); 1810 } // Coerce inner blocks from parsed form to canonical form. 1811 1812 1813 innerBlocks = innerBlocks.map(createBlockWithFallback); 1814 var isFallbackBlock = name === freeformContentFallbackBlock || name === unregisteredFallbackBlock; // Include in set only if type was determined. 1815 1816 if (!blockType || !innerHTML && isFallbackBlock) { 1817 return; 1818 } 1819 1820 var block = Object(_factory__WEBPACK_IMPORTED_MODULE_9__["createBlock"])(name, getBlockAttributes(blockType, innerHTML, attributes), innerBlocks); // Block validation assumes an idempotent operation from source block to serialized block 1821 // provided there are no changes in attributes. The validation procedure thus compares the 1822 // provided source value with the serialized output before there are any modifications to 1823 // the block. When both match, the block is marked as valid. 1824 1825 if (!isFallbackBlock) { 1826 block.isValid = Object(_validation__WEBPACK_IMPORTED_MODULE_10__["isValidBlock"])(innerHTML, blockType, block.attributes); 1827 } // Preserve original content for future use in case the block is parsed as 1828 // invalid, or future serialization attempt results in an error. 1829 1830 1831 block.originalContent = innerHTML; 1832 block = getMigratedBlock(block); 1833 return block; 1834 } 1835 /** 1836 * Creates a parse implementation for the post content which returns a list of blocks. 1837 * 1838 * @param {Function} parseImplementation Parse implementation. 1839 * 1840 * @return {Function} An implementation which parses the post content. 1841 */ 1842 1843 var createParse = function createParse(parseImplementation) { 1844 return function (content) { 1845 return parseImplementation(content).reduce(function (memo, blockNode) { 1846 var block = createBlockWithFallback(blockNode); 1847 1848 if (block) { 1849 memo.push(block); 1850 } 1851 1852 return memo; 1853 }, []); 1854 }; 1855 }; 1856 /** 1857 * Parses the post content with a PegJS grammar and returns a list of blocks. 1858 * 1859 * @param {string} content The post content. 1860 * 1861 * @return {Array} Block list. 1862 */ 1863 1864 1865 var parseWithGrammar = createParse(_wordpress_block_serialization_default_parser__WEBPACK_IMPORTED_MODULE_6__["parse"]); 1866 /* harmony default export */ __webpack_exports__["default"] = (parseWithGrammar); 1867 1868 1869 /***/ }), 1870 1871 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/blockquote-normaliser.js": 1872 /*!***********************************************************************************************!*\ 1873 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/blockquote-normaliser.js ***! 1874 \***********************************************************************************************/ 1875 /*! exports provided: default */ 1876 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1877 1878 "use strict"; 1879 __webpack_require__.r(__webpack_exports__); 1880 /* harmony import */ var _normalise_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./normalise-blocks */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/normalise-blocks.js"); 1881 /** 1882 * Internal dependencies 1883 */ 1884 1885 /* harmony default export */ __webpack_exports__["default"] = (function (node) { 1886 if (node.nodeName !== 'BLOCKQUOTE') { 1887 return; 1888 } 1889 1890 node.innerHTML = Object(_normalise_blocks__WEBPACK_IMPORTED_MODULE_0__["default"])(node.innerHTML); 1891 }); 1892 1893 1894 /***/ }), 1895 1896 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/figure-content-reducer.js": 1897 /*!************************************************************************************************!*\ 1898 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/figure-content-reducer.js ***! 1899 \************************************************************************************************/ 1900 /*! exports provided: default */ 1901 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1902 1903 "use strict"; 1904 __webpack_require__.r(__webpack_exports__); 1905 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash"); 1906 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); 1907 /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js"); 1908 /** 1909 * External dependencies 1910 */ 1911 1912 /** 1913 * Internal dependencies 1914 */ 1915 1916 1917 /** 1918 * Whether or not the given node is figure content. 1919 * 1920 * @param {Node} node The node to check. 1921 * @param {Object} schema The schema to use. 1922 * 1923 * @return {boolean} True if figure content, false if not. 1924 */ 1925 1926 function isFigureContent(node, schema) { 1927 var tag = node.nodeName.toLowerCase(); // We are looking for tags that can be a child of the figure tag, excluding 1928 // `figcaption` and any phrasing content. 1929 1930 if (tag === 'figcaption' || Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_1__["isPhrasingContent"])(node)) { 1931 return false; 1932 } 1933 1934 return Object(lodash__WEBPACK_IMPORTED_MODULE_0__["has"])(schema, ['figure', 'children', tag]); 1935 } 1936 /** 1937 * Whether or not the given node can have an anchor. 1938 * 1939 * @param {Node} node The node to check. 1940 * @param {Object} schema The schema to use. 1941 * 1942 * @return {boolean} True if it can, false if not. 1943 */ 1944 1945 1946 function canHaveAnchor(node, schema) { 1947 var tag = node.nodeName.toLowerCase(); 1948 return Object(lodash__WEBPACK_IMPORTED_MODULE_0__["has"])(schema, ['figure', 'children', 'a', 'children', tag]); 1949 } 1950 /** 1951 * This filter takes figure content out of paragraphs, wraps it in a figure 1952 * element, and moves any anchors with it if needed. 1953 * 1954 * @param {Node} node The node to filter. 1955 * @param {Document} doc The document of the node. 1956 * @param {Object} schema The schema to use. 1957 * 1958 * @return {void} 1959 */ 1960 1961 1962 /* harmony default export */ __webpack_exports__["default"] = (function (node, doc, schema) { 1963 if (!isFigureContent(node, schema)) { 1964 return; 1965 } 1966 1967 var nodeToInsert = node; 1968 var parentNode = node.parentNode; // If the figure content can have an anchor and its parent is an anchor with 1969 // only the figure content, take the anchor out instead of just the content. 1970 1971 if (canHaveAnchor(node, schema) && parentNode.nodeName === 'A' && parentNode.childNodes.length === 1) { 1972 nodeToInsert = node.parentNode; 1973 } 1974 1975 var wrapper = nodeToInsert; 1976 1977 while (wrapper && wrapper.nodeName !== 'P') { 1978 wrapper = wrapper.parentElement; 1979 } 1980 1981 var figure = doc.createElement('figure'); 1982 1983 if (wrapper) { 1984 wrapper.parentNode.insertBefore(figure, wrapper); 1985 } else { 1986 nodeToInsert.parentNode.insertBefore(figure, nodeToInsert); 1987 } 1988 1989 figure.appendChild(nodeToInsert); 1990 }); 1991 1992 1993 /***/ }), 1994 1995 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/head-remover.js": 1996 /*!**************************************************************************************!*\ 1997 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/head-remover.js ***! 1998 \**************************************************************************************/ 1999 /*! exports provided: default */ 2000 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2001 2002 "use strict"; 2003 __webpack_require__.r(__webpack_exports__); 2004 /* harmony default export */ __webpack_exports__["default"] = (function (node) { 2005 if (node.nodeName !== 'SCRIPT' && node.nodeName !== 'NOSCRIPT' && node.nodeName !== 'TEMPLATE' && node.nodeName !== 'STYLE') { 2006 return; 2007 } 2008 2009 node.parentNode.removeChild(node); 2010 }); 2011 2012 2013 /***/ }), 2014 2015 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/iframe-remover.js": 2016 /*!****************************************************************************************!*\ 2017 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/iframe-remover.js ***! 2018 \****************************************************************************************/ 2019 /*! exports provided: default */ 2020 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2021 2022 "use strict"; 2023 __webpack_require__.r(__webpack_exports__); 2024 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom"); 2025 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__); 2026 /** 2027 * WordPress dependencies 2028 */ 2029 2030 /** 2031 * Removes iframes. 2032 * 2033 * @param {Node} node The node to check. 2034 * 2035 * @return {void} 2036 */ 2037 2038 /* harmony default export */ __webpack_exports__["default"] = (function (node) { 2039 if (node.nodeName === 'IFRAME') { 2040 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["remove"])(node); 2041 } 2042 }); 2043 2044 2045 /***/ }), 2046 2047 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/image-corrector.js": 2048 /*!*****************************************************************************************!*\ 2049 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/image-corrector.js ***! 2050 \*****************************************************************************************/ 2051 /*! exports provided: default */ 2052 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2053 2054 "use strict"; 2055 __webpack_require__.r(__webpack_exports__); 2056 /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); 2057 /* harmony import */ var _wordpress_blob__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/blob */ "@wordpress/blob"); 2058 /* harmony import */ var _wordpress_blob__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blob__WEBPACK_IMPORTED_MODULE_1__); 2059 2060 2061 /** 2062 * WordPress dependencies 2063 */ 2064 2065 /** 2066 * Browser dependencies 2067 */ 2068 2069 var _window = window, 2070 atob = _window.atob, 2071 File = _window.File; 2072 /* harmony default export */ __webpack_exports__["default"] = (function (node) { 2073 if (node.nodeName !== 'IMG') { 2074 return; 2075 } 2076 2077 if (node.src.indexOf('file:') === 0) { 2078 node.src = ''; 2079 } // This piece cannot be tested outside a browser env. 2080 2081 2082 if (node.src.indexOf('data:') === 0) { 2083 var _node$src$split = node.src.split(','), 2084 _node$src$split2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_node$src$split, 2), 2085 properties = _node$src$split2[0], 2086 data = _node$src$split2[1]; 2087 2088 var _properties$slice$spl = properties.slice(5).split(';'), 2089 _properties$slice$spl2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_properties$slice$spl, 1), 2090 type = _properties$slice$spl2[0]; 2091 2092 if (!data || !type) { 2093 node.src = ''; 2094 return; 2095 } 2096 2097 var decoded; // Can throw DOMException! 2098 2099 try { 2100 decoded = atob(data); 2101 } catch (e) { 2102 node.src = ''; 2103 return; 2104 } 2105 2106 var uint8Array = new Uint8Array(decoded.length); 2107 2108 for (var i = 0; i < uint8Array.length; i++) { 2109 uint8Array[i] = decoded.charCodeAt(i); 2110 } 2111 2112 var name = type.replace('/', '.'); 2113 var file = new File([uint8Array], name, { 2114 type: type 2115 }); 2116 node.src = Object(_wordpress_blob__WEBPACK_IMPORTED_MODULE_1__["createBlobURL"])(file); 2117 } // Remove trackers and hardly visible images. 2118 2119 2120 if (node.height === 1 || node.width === 1) { 2121 node.parentNode.removeChild(node); 2122 } 2123 }); 2124 2125 2126 /***/ }), 2127 2128 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/index.js": 2129 /*!*******************************************************************************!*\ 2130 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/index.js ***! 2131 \*******************************************************************************/ 2132 /*! exports provided: getPhrasingContentSchema, default */ 2133 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2134 2135 "use strict"; 2136 __webpack_require__.r(__webpack_exports__); 2137 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return rawHandler; }); 2138 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 2139 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash"); 2140 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); 2141 /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js"); 2142 /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js"); 2143 /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../parser */ "./node_modules/@wordpress/blocks/build-module/api/parser.js"); 2144 /* harmony import */ var _normalise_blocks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./normalise-blocks */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/normalise-blocks.js"); 2145 /* harmony import */ var _special_comment_converter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./special-comment-converter */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/special-comment-converter.js"); 2146 /* harmony import */ var _is_inline_content__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./is-inline-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/is-inline-content.js"); 2147 /* harmony import */ var _phrasing_content_reducer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./phrasing-content-reducer */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content-reducer.js"); 2148 /* harmony import */ var _head_remover__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./head-remover */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/head-remover.js"); 2149 /* harmony import */ var _ms_list_converter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ms-list-converter */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/ms-list-converter.js"); 2150 /* harmony import */ var _list_reducer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./list-reducer */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/list-reducer.js"); 2151 /* harmony import */ var _image_corrector__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./image-corrector */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/image-corrector.js"); 2152 /* harmony import */ var _blockquote_normaliser__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./blockquote-normaliser */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/blockquote-normaliser.js"); 2153 /* harmony import */ var _figure_content_reducer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./figure-content-reducer */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/figure-content-reducer.js"); 2154 /* harmony import */ var _shortcode_converter__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./shortcode-converter */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/shortcode-converter.js"); 2155 /* harmony import */ var _markdown_converter__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./markdown-converter */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/markdown-converter.js"); 2156 /* harmony import */ var _iframe_remover__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./iframe-remover */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/iframe-remover.js"); 2157 /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js"); 2158 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPhrasingContentSchema", function() { return _phrasing_content__WEBPACK_IMPORTED_MODULE_18__["getPhrasingContentSchema"]; }); 2159 2160 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./utils */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/utils.js"); 2161 2162 2163 /** 2164 * External dependencies 2165 */ 2166 2167 /** 2168 * Internal dependencies 2169 */ 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 /** 2190 * Browser dependencies 2191 */ 2192 2193 var _window = window, 2194 console = _window.console; 2195 2196 /** 2197 * Filters HTML to only contain phrasing content. 2198 * 2199 * @param {string} HTML The HTML to filter. 2200 * 2201 * @return {string} HTML only containing phrasing content. 2202 */ 2203 2204 function filterInlineHTML(HTML) { 2205 HTML = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["deepFilterHTML"])(HTML, [_phrasing_content_reducer__WEBPACK_IMPORTED_MODULE_8__["default"]]); 2206 HTML = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["removeInvalidHTML"])(HTML, Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_18__["getPhrasingContentSchema"])(), { 2207 inline: true 2208 }); // Allows us to ask for this information when we get a report. 2209 2210 console.log('Processed inline HTML:\n\n', HTML); 2211 return HTML; 2212 } 2213 2214 function getRawTransformations() { 2215 return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["filter"])(Object(_factory__WEBPACK_IMPORTED_MODULE_2__["getBlockTransforms"])('from'), { 2216 type: 'raw' 2217 }).map(function (transform) { 2218 return transform.isMatch ? transform : Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, transform, { 2219 isMatch: function isMatch(node) { 2220 return transform.selector && node.matches(transform.selector); 2221 } 2222 }); 2223 }); 2224 } 2225 /** 2226 * Converts an HTML string to known blocks. Strips everything else. 2227 * 2228 * @param {string} [options.HTML] The HTML to convert. 2229 * @param {string} [options.plainText] Plain text version. 2230 * @param {string} [options.mode] Handle content as blocks or inline content. 2231 * * 'AUTO': Decide based on the content passed. 2232 * * 'INLINE': Always handle as inline content, and return string. 2233 * * 'BLOCKS': Always handle as blocks, and return array of blocks. 2234 * @param {Array} [options.tagName] The tag into which content will be inserted. 2235 * @param {boolean} [options.canUserUseUnfilteredHTML] Whether or not the user can use unfiltered HTML. 2236 * 2237 * @return {Array|string} A list of blocks or a string, depending on `handlerMode`. 2238 */ 2239 2240 2241 function rawHandler(_ref) { 2242 var _ref$HTML = _ref.HTML, 2243 HTML = _ref$HTML === void 0 ? '' : _ref$HTML, 2244 _ref$plainText = _ref.plainText, 2245 plainText = _ref$plainText === void 0 ? '' : _ref$plainText, 2246 _ref$mode = _ref.mode, 2247 mode = _ref$mode === void 0 ? 'AUTO' : _ref$mode, 2248 tagName = _ref.tagName, 2249 _ref$canUserUseUnfilt = _ref.canUserUseUnfilteredHTML, 2250 canUserUseUnfilteredHTML = _ref$canUserUseUnfilt === void 0 ? false : _ref$canUserUseUnfilt; 2251 // First of all, strip any meta tags. 2252 HTML = HTML.replace(/<meta[^>]+>/, ''); // If we detect block delimiters, parse entirely as blocks. 2253 2254 if (mode !== 'INLINE' && HTML.indexOf('<!-- wp:') !== -1) { 2255 return Object(_parser__WEBPACK_IMPORTED_MODULE_4__["parseWithGrammar"])(HTML); 2256 } // Normalize unicode to use composed characters. 2257 // This is unsupported in IE 11 but it's a nice-to-have feature, not mandatory. 2258 // Not normalizing the content will only affect older browsers and won't 2259 // entirely break the app. 2260 // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize 2261 // See: https://core.trac.wordpress.org/ticket/30130 2262 // See: https://github.com/WordPress/gutenberg/pull/6983#pullrequestreview-125151075 2263 2264 2265 if (String.prototype.normalize) { 2266 HTML = HTML.normalize(); 2267 } // Parse Markdown (and encoded HTML) if: 2268 // * There is a plain text version. 2269 // * There is no HTML version, or it has no formatting. 2270 2271 2272 if (plainText && (!HTML || Object(_utils__WEBPACK_IMPORTED_MODULE_19__["isPlain"])(HTML))) { 2273 HTML = Object(_markdown_converter__WEBPACK_IMPORTED_MODULE_16__["default"])(plainText); // Switch to inline mode if: 2274 // * The current mode is AUTO. 2275 // * The original plain text had no line breaks. 2276 // * The original plain text was not an HTML paragraph. 2277 // * The converted text is just a paragraph. 2278 2279 if (mode === 'AUTO' && plainText.indexOf('\n') === -1 && plainText.indexOf('<p>') !== 0 && HTML.indexOf('<p>') === 0) { 2280 mode = 'INLINE'; 2281 } 2282 } 2283 2284 if (mode === 'INLINE') { 2285 return filterInlineHTML(HTML); 2286 } // An array of HTML strings and block objects. The blocks replace matched 2287 // shortcodes. 2288 2289 2290 var pieces = Object(_shortcode_converter__WEBPACK_IMPORTED_MODULE_15__["default"])(HTML); // The call to shortcodeConverter will always return more than one element 2291 // if shortcodes are matched. The reason is when shortcodes are matched 2292 // empty HTML strings are included. 2293 2294 var hasShortcodes = pieces.length > 1; 2295 2296 if (mode === 'AUTO' && !hasShortcodes && Object(_is_inline_content__WEBPACK_IMPORTED_MODULE_7__["default"])(HTML, tagName)) { 2297 return filterInlineHTML(HTML); 2298 } 2299 2300 var rawTransformations = getRawTransformations(); 2301 var phrasingContentSchema = Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_18__["getPhrasingContentSchema"])(); 2302 var blockContentSchema = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["getBlockContentSchema"])(rawTransformations); 2303 return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["compact"])(Object(lodash__WEBPACK_IMPORTED_MODULE_1__["flatMap"])(pieces, function (piece) { 2304 // Already a block from shortcode. 2305 if (typeof piece !== 'string') { 2306 return piece; 2307 } 2308 2309 var filters = [_ms_list_converter__WEBPACK_IMPORTED_MODULE_10__["default"], _head_remover__WEBPACK_IMPORTED_MODULE_9__["default"], _list_reducer__WEBPACK_IMPORTED_MODULE_11__["default"], _image_corrector__WEBPACK_IMPORTED_MODULE_12__["default"], _phrasing_content_reducer__WEBPACK_IMPORTED_MODULE_8__["default"], _special_comment_converter__WEBPACK_IMPORTED_MODULE_6__["default"], _figure_content_reducer__WEBPACK_IMPORTED_MODULE_14__["default"], _blockquote_normaliser__WEBPACK_IMPORTED_MODULE_13__["default"]]; 2310 2311 if (!canUserUseUnfilteredHTML) { 2312 // Should run before `figureContentReducer`. 2313 filters.unshift(_iframe_remover__WEBPACK_IMPORTED_MODULE_17__["default"]); 2314 } 2315 2316 var schema = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, blockContentSchema, phrasingContentSchema); 2317 2318 piece = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["deepFilterHTML"])(piece, filters, blockContentSchema); 2319 piece = Object(_utils__WEBPACK_IMPORTED_MODULE_19__["removeInvalidHTML"])(piece, schema); 2320 piece = Object(_normalise_blocks__WEBPACK_IMPORTED_MODULE_5__["default"])(piece); // Allows us to ask for this information when we get a report. 2321 2322 console.log('Processed HTML piece:\n\n', piece); 2323 var doc = document.implementation.createHTMLDocument(''); 2324 doc.body.innerHTML = piece; 2325 return Array.from(doc.body.children).map(function (node) { 2326 var rawTransformation = Object(_factory__WEBPACK_IMPORTED_MODULE_2__["findTransform"])(rawTransformations, function (_ref2) { 2327 var isMatch = _ref2.isMatch; 2328 return isMatch(node); 2329 }); 2330 2331 if (!rawTransformation) { 2332 console.warn('A block registered a raw transformation schema for `' + node.nodeName + '` but did not match it. ' + 'Make sure there is a `selector` or `isMatch` property that can match the schema.\n' + 'Sanitized HTML: `' + node.outerHTML + '`'); 2333 return; 2334 } 2335 2336 var transform = rawTransformation.transform, 2337 blockName = rawTransformation.blockName; 2338 2339 if (transform) { 2340 return transform(node); 2341 } 2342 2343 return Object(_factory__WEBPACK_IMPORTED_MODULE_2__["createBlock"])(blockName, Object(_parser__WEBPACK_IMPORTED_MODULE_4__["getBlockAttributes"])(Object(_registration__WEBPACK_IMPORTED_MODULE_3__["getBlockType"])(blockName), node.outerHTML)); 2344 }); 2345 })); 2346 } 2347 2348 2349 /***/ }), 2350 2351 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/is-inline-content.js": 2352 /*!*******************************************************************************************!*\ 2353 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/is-inline-content.js ***! 2354 \*******************************************************************************************/ 2355 /*! exports provided: default */ 2356 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2357 2358 "use strict"; 2359 __webpack_require__.r(__webpack_exports__); 2360 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash"); 2361 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); 2362 /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js"); 2363 /** 2364 * External dependencies 2365 */ 2366 2367 /** 2368 * Internal dependencies 2369 */ 2370 2371 2372 /** 2373 * Checks if the given node should be considered inline content, optionally 2374 * depending on a context tag. 2375 * 2376 * @param {Node} node Node name. 2377 * @param {string} contextTag Tag name. 2378 * 2379 * @return {boolean} True if the node is inline content, false if nohe. 2380 */ 2381 2382 function isInline(node, contextTag) { 2383 if (Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_1__["isPhrasingContent"])(node)) { 2384 return true; 2385 } 2386 2387 if (!contextTag) { 2388 return false; 2389 } 2390 2391 var tag = node.nodeName.toLowerCase(); 2392 var inlineWhitelistTagGroups = [['ul', 'li', 'ol'], ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']]; 2393 return inlineWhitelistTagGroups.some(function (tagGroup) { 2394 return Object(lodash__WEBPACK_IMPORTED_MODULE_0__["difference"])([tag, contextTag], tagGroup).length === 0; 2395 }); 2396 } 2397 2398 function deepCheck(nodes, contextTag) { 2399 return nodes.every(function (node) { 2400 return isInline(node, contextTag) && deepCheck(Array.from(node.children), contextTag); 2401 }); 2402 } 2403 2404 function isDoubleBR(node) { 2405 return node.nodeName === 'BR' && node.previousSibling && node.previousSibling.nodeName === 'BR'; 2406 } 2407 2408 /* harmony default export */ __webpack_exports__["default"] = (function (HTML, contextTag) { 2409 var doc = document.implementation.createHTMLDocument(''); 2410 doc.body.innerHTML = HTML; 2411 var nodes = Array.from(doc.body.children); 2412 return !nodes.some(isDoubleBR) && deepCheck(nodes, contextTag); 2413 }); 2414 2415 2416 /***/ }), 2417 2418 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/list-reducer.js": 2419 /*!**************************************************************************************!*\ 2420 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/list-reducer.js ***! 2421 \**************************************************************************************/ 2422 /*! exports provided: default */ 2423 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2424 2425 "use strict"; 2426 __webpack_require__.r(__webpack_exports__); 2427 /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); 2428 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom"); 2429 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_1__); 2430 2431 2432 /** 2433 * WordPress dependencies 2434 */ 2435 2436 2437 function isList(node) { 2438 return node.nodeName === 'OL' || node.nodeName === 'UL'; 2439 } 2440 2441 function shallowTextContent(element) { 2442 return Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(element.childNodes).map(function (_ref) { 2443 var _ref$nodeValue = _ref.nodeValue, 2444 nodeValue = _ref$nodeValue === void 0 ? '' : _ref$nodeValue; 2445 return nodeValue; 2446 }).join(''); 2447 } 2448 2449 /* harmony default export */ __webpack_exports__["default"] = (function (node) { 2450 if (!isList(node)) { 2451 return; 2452 } 2453 2454 var list = node; 2455 var prevElement = node.previousElementSibling; // Merge with previous list if: 2456 // * There is a previous list of the same type. 2457 // * There is only one list item. 2458 2459 if (prevElement && prevElement.nodeName === node.nodeName && list.children.length === 1) { 2460 prevElement.appendChild(list.firstChild); 2461 list.parentNode.removeChild(list); 2462 } 2463 2464 var parentElement = node.parentNode; // Nested list with empty parent item. 2465 2466 if (parentElement && parentElement.nodeName === 'LI' && parentElement.children.length === 1 && !/\S/.test(shallowTextContent(parentElement))) { 2467 var parentListItem = parentElement; 2468 var prevListItem = parentListItem.previousElementSibling; 2469 var parentList = parentListItem.parentNode; 2470 2471 if (prevListItem) { 2472 prevListItem.appendChild(list); 2473 parentList.removeChild(parentListItem); 2474 } else { 2475 parentList.parentNode.insertBefore(list, parentList); 2476 parentList.parentNode.removeChild(parentList); 2477 } 2478 } // Invalid: OL/UL > OL/UL. 2479 2480 2481 if (parentElement && isList(parentElement)) { 2482 var _prevListItem = node.previousElementSibling; 2483 2484 if (_prevListItem) { 2485 _prevListItem.appendChild(node); 2486 } else { 2487 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(node); 2488 } 2489 } 2490 }); 2491 2492 2493 /***/ }), 2494 2495 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/markdown-converter.js": 2496 /*!********************************************************************************************!*\ 2497 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/markdown-converter.js ***! 2498 \********************************************************************************************/ 2499 /*! exports provided: default */ 2500 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2501 2502 "use strict"; 2503 __webpack_require__.r(__webpack_exports__); 2504 /* harmony import */ var showdown__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! showdown */ "./node_modules/showdown/dist/showdown.js"); 2505 /* harmony import */ var showdown__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(showdown__WEBPACK_IMPORTED_MODULE_0__); 2506 /** 2507 * External dependencies 2508 */ 2509 // Reuse the same showdown converter. 2510 2511 var converter = new showdown__WEBPACK_IMPORTED_MODULE_0___default.a.Converter({ 2512 noHeaderId: true, 2513 tables: true, 2514 literalMidWordUnderscores: true, 2515 omitExtraWLInCodeBlocks: true, 2516 simpleLineBreaks: true, 2517 strikethrough: true 2518 }); 2519 /** 2520 * Corrects the Slack Markdown variant of the code block. 2521 * If uncorrected, it will be converted to inline code. 2522 * 2523 * @see https://get.slack.help/hc/en-us/articles/202288908-how-can-i-add-formatting-to-my-messages-#code-blocks 2524 * 2525 * @param {string} text The potential Markdown text to correct. 2526 * 2527 * @return {string} The corrected Markdown. 2528 */ 2529 2530 function slackMarkdownVariantCorrector(text) { 2531 return text.replace(/((?:^|\n)```)([^\n`]+)(```(?:$|\n))/, function (match, p1, p2, p3) { 2532 return "".concat(p1, "\n").concat(p2, "\n").concat(p3); 2533 }); 2534 } 2535 /** 2536 * Converts a piece of text into HTML based on any Markdown present. 2537 * Also decodes any encoded HTML. 2538 * 2539 * @param {string} text The plain text to convert. 2540 * 2541 * @return {string} HTML. 2542 */ 2543 2544 2545 /* harmony default export */ __webpack_exports__["default"] = (function (text) { 2546 return converter.makeHtml(slackMarkdownVariantCorrector(text)); 2547 }); 2548 2549 2550 /***/ }), 2551 2552 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/ms-list-converter.js": 2553 /*!*******************************************************************************************!*\ 2554 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/ms-list-converter.js ***! 2555 \*******************************************************************************************/ 2556 /*! exports provided: default */ 2557 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2558 2559 "use strict"; 2560 __webpack_require__.r(__webpack_exports__); 2561 /** 2562 * Browser dependencies 2563 */ 2564 var _window = window, 2565 parseInt = _window.parseInt; 2566 2567 function isList(node) { 2568 return node.nodeName === 'OL' || node.nodeName === 'UL'; 2569 } 2570 2571 /* harmony default export */ __webpack_exports__["default"] = (function (node, doc) { 2572 if (node.nodeName !== 'P') { 2573 return; 2574 } 2575 2576 var style = node.getAttribute('style'); 2577 2578 if (!style) { 2579 return; 2580 } // Quick check. 2581 2582 2583 if (style.indexOf('mso-list') === -1) { 2584 return; 2585 } 2586 2587 var matches = /mso-list\s*:[^;]+level([0-9]+)/i.exec(style); 2588 2589 if (!matches) { 2590 return; 2591 } 2592 2593 var level = parseInt(matches[1], 10) - 1 || 0; 2594 var prevNode = node.previousElementSibling; // Add new list if no previous. 2595 2596 if (!prevNode || !isList(prevNode)) { 2597 // See https://html.spec.whatwg.org/multipage/grouping-content.html#attr-ol-type. 2598 var type = node.textContent.trim().slice(0, 1); 2599 var isNumeric = /[1iIaA]/.test(type); 2600 var newListNode = doc.createElement(isNumeric ? 'ol' : 'ul'); 2601 2602 if (isNumeric) { 2603 newListNode.setAttribute('type', type); 2604 } 2605 2606 node.parentNode.insertBefore(newListNode, node); 2607 } 2608 2609 var listNode = node.previousElementSibling; 2610 var listType = listNode.nodeName; 2611 var listItem = doc.createElement('li'); 2612 var receivingNode = listNode; // Remove the first span with list info. 2613 2614 node.removeChild(node.firstElementChild); // Add content. 2615 2616 while (node.firstChild) { 2617 listItem.appendChild(node.firstChild); 2618 } // Change pointer depending on indentation level. 2619 2620 2621 while (level--) { 2622 receivingNode = receivingNode.lastElementChild || receivingNode; // If it's a list, move pointer to the last item. 2623 2624 if (isList(receivingNode)) { 2625 receivingNode = receivingNode.lastElementChild || receivingNode; 2626 } 2627 } // Make sure we append to a list. 2628 2629 2630 if (!isList(receivingNode)) { 2631 receivingNode = receivingNode.appendChild(doc.createElement(listType)); 2632 } // Append the list item to the list. 2633 2634 2635 receivingNode.appendChild(listItem); // Remove the wrapper paragraph. 2636 2637 node.parentNode.removeChild(node); 2638 }); 2639 2640 2641 /***/ }), 2642 2643 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/normalise-blocks.js": 2644 /*!******************************************************************************************!*\ 2645 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/normalise-blocks.js ***! 2646 \******************************************************************************************/ 2647 /*! exports provided: default */ 2648 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2649 2650 "use strict"; 2651 __webpack_require__.r(__webpack_exports__); 2652 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/utils.js"); 2653 /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js"); 2654 /** 2655 * Internal dependencies 2656 */ 2657 2658 2659 /** 2660 * Browser dependencies 2661 */ 2662 2663 var _window$Node = window.Node, 2664 ELEMENT_NODE = _window$Node.ELEMENT_NODE, 2665 TEXT_NODE = _window$Node.TEXT_NODE; 2666 /* harmony default export */ __webpack_exports__["default"] = (function (HTML) { 2667 var decuDoc = document.implementation.createHTMLDocument(''); 2668 var accuDoc = document.implementation.createHTMLDocument(''); 2669 var decu = decuDoc.body; 2670 var accu = accuDoc.body; 2671 decu.innerHTML = HTML; 2672 2673 while (decu.firstChild) { 2674 var node = decu.firstChild; // Text nodes: wrap in a paragraph, or append to previous. 2675 2676 if (node.nodeType === TEXT_NODE) { 2677 if (!node.nodeValue.trim()) { 2678 decu.removeChild(node); 2679 } else { 2680 if (!accu.lastChild || accu.lastChild.nodeName !== 'P') { 2681 accu.appendChild(accuDoc.createElement('P')); 2682 } 2683 2684 accu.lastChild.appendChild(node); 2685 } // Element nodes. 2686 2687 } else if (node.nodeType === ELEMENT_NODE) { 2688 // BR nodes: create a new paragraph on double, or append to previous. 2689 if (node.nodeName === 'BR') { 2690 if (node.nextSibling && node.nextSibling.nodeName === 'BR') { 2691 accu.appendChild(accuDoc.createElement('P')); 2692 decu.removeChild(node.nextSibling); 2693 } // Don't append to an empty paragraph. 2694 2695 2696 if (accu.lastChild && accu.lastChild.nodeName === 'P' && accu.lastChild.hasChildNodes()) { 2697 accu.lastChild.appendChild(node); 2698 } else { 2699 decu.removeChild(node); 2700 } 2701 } else if (node.nodeName === 'P') { 2702 // Only append non-empty paragraph nodes. 2703 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(node)) { 2704 decu.removeChild(node); 2705 } else { 2706 accu.appendChild(node); 2707 } 2708 } else if (Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_1__["isPhrasingContent"])(node)) { 2709 if (!accu.lastChild || accu.lastChild.nodeName !== 'P') { 2710 accu.appendChild(accuDoc.createElement('P')); 2711 } 2712 2713 accu.lastChild.appendChild(node); 2714 } else { 2715 accu.appendChild(node); 2716 } 2717 } else { 2718 decu.removeChild(node); 2719 } 2720 } 2721 2722 return accu.innerHTML; 2723 }); 2724 2725 2726 /***/ }), 2727 2728 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content-reducer.js": 2729 /*!**************************************************************************************************!*\ 2730 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content-reducer.js ***! 2731 \**************************************************************************************************/ 2732 /*! exports provided: default */ 2733 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2734 2735 "use strict"; 2736 __webpack_require__.r(__webpack_exports__); 2737 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom"); 2738 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__); 2739 /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js"); 2740 /** 2741 * WordPress dependencies 2742 */ 2743 2744 /** 2745 * Internal dependencies 2746 */ 2747 2748 2749 2750 function isBlockContent(node) { 2751 var schema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 2752 return schema.hasOwnProperty(node.nodeName.toLowerCase()); 2753 } 2754 2755 /* harmony default export */ __webpack_exports__["default"] = (function (node, doc, schema) { 2756 if (node.nodeName === 'SPAN') { 2757 var _node$style = node.style, 2758 fontWeight = _node$style.fontWeight, 2759 fontStyle = _node$style.fontStyle; 2760 2761 if (fontWeight === 'bold' || fontWeight === '700') { 2762 node = Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replaceTag"])(node, 'strong', doc); 2763 } else if (fontStyle === 'italic') { 2764 node = Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replaceTag"])(node, 'em', doc); 2765 } 2766 } else if (node.nodeName === 'B') { 2767 node = Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replaceTag"])(node, 'strong', doc); 2768 } else if (node.nodeName === 'I') { 2769 node = Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replaceTag"])(node, 'em', doc); 2770 } else if (node.nodeName === 'A') { 2771 if (node.target.toLowerCase() === '_blank') { 2772 node.rel = 'noreferrer noopener'; 2773 } else { 2774 node.removeAttribute('target'); 2775 node.removeAttribute('rel'); 2776 } 2777 } 2778 2779 if (Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_1__["isPhrasingContent"])(node) && node.hasChildNodes() && Array.from(node.childNodes).some(function (child) { 2780 return isBlockContent(child, schema); 2781 })) { 2782 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["unwrap"])(node); 2783 } 2784 }); 2785 2786 2787 /***/ }), 2788 2789 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js": 2790 /*!******************************************************************************************!*\ 2791 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js ***! 2792 \******************************************************************************************/ 2793 /*! exports provided: getPhrasingContentSchema, isPhrasingContent */ 2794 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2795 2796 "use strict"; 2797 __webpack_require__.r(__webpack_exports__); 2798 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPhrasingContentSchema", function() { return getPhrasingContentSchema; }); 2799 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPhrasingContent", function() { return isPhrasingContent; }); 2800 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash"); 2801 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); 2802 /** 2803 * External dependencies 2804 */ 2805 2806 var phrasingContentSchema = { 2807 strong: {}, 2808 em: {}, 2809 del: {}, 2810 ins: {}, 2811 a: { 2812 attributes: ['href', 'target', 'rel'] 2813 }, 2814 code: {}, 2815 abbr: { 2816 attributes: ['title'] 2817 }, 2818 sub: {}, 2819 sup: {}, 2820 br: {}, 2821 '#text': {} 2822 }; // Recursion is needed. 2823 // Possible: strong > em > strong. 2824 // Impossible: strong > strong. 2825 2826 ['strong', 'em', 'del', 'ins', 'a', 'code', 'abbr', 'sub', 'sup'].forEach(function (tag) { 2827 phrasingContentSchema[tag].children = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["omit"])(phrasingContentSchema, tag); 2828 }); 2829 /** 2830 * Get schema of possible paths for phrasing content. 2831 * 2832 * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content 2833 * 2834 * @return {Object} Schema. 2835 */ 2836 2837 function getPhrasingContentSchema() { 2838 return phrasingContentSchema; 2839 } 2840 /** 2841 * Find out whether or not the given node is phrasing content. 2842 * 2843 * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content 2844 * 2845 * @param {Element} node The node to test. 2846 * 2847 * @return {boolean} True if phrasing content, false if not. 2848 */ 2849 2850 function isPhrasingContent(node) { 2851 var tag = node.nodeName.toLowerCase(); 2852 return getPhrasingContentSchema().hasOwnProperty(tag) || tag === 'span'; 2853 } 2854 2855 2856 /***/ }), 2857 2858 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/shortcode-converter.js": 2859 /*!*********************************************************************************************!*\ 2860 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/shortcode-converter.js ***! 2861 \*********************************************************************************************/ 2862 /*! exports provided: default */ 2863 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2864 2865 "use strict"; 2866 __webpack_require__.r(__webpack_exports__); 2867 /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); 2868 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 2869 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash"); 2870 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__); 2871 /* harmony import */ var _wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/shortcode */ "@wordpress/shortcode"); 2872 /* harmony import */ var _wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3__); 2873 /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js"); 2874 /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js"); 2875 /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../parser */ "./node_modules/@wordpress/blocks/build-module/api/parser.js"); 2876 2877 2878 2879 /** 2880 * External dependencies 2881 */ 2882 2883 /** 2884 * WordPress dependencies 2885 */ 2886 2887 2888 /** 2889 * Internal dependencies 2890 */ 2891 2892 2893 2894 2895 2896 function segmentHTMLToShortcodeBlock(HTML) { 2897 var lastIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 2898 // Get all matches. 2899 var transformsFrom = Object(_factory__WEBPACK_IMPORTED_MODULE_4__["getBlockTransforms"])('from'); 2900 var transformation = Object(_factory__WEBPACK_IMPORTED_MODULE_4__["findTransform"])(transformsFrom, function (transform) { 2901 return transform.type === 'shortcode' && Object(lodash__WEBPACK_IMPORTED_MODULE_2__["some"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["castArray"])(transform.tag), function (tag) { 2902 return Object(_wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3__["regexp"])(tag).test(HTML); 2903 }); 2904 }); 2905 2906 if (!transformation) { 2907 return [HTML]; 2908 } 2909 2910 var transformTags = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["castArray"])(transformation.tag); 2911 var transformTag = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["first"])(transformTags); 2912 var match; 2913 2914 if (match = Object(_wordpress_shortcode__WEBPACK_IMPORTED_MODULE_3__["next"])(transformTag, HTML, lastIndex)) { 2915 var beforeHTML = HTML.substr(0, match.index); 2916 lastIndex = match.index + match.content.length; // If the shortcode content does not contain HTML and the shortcode is 2917 // not on a new line (or in paragraph from Markdown converter), 2918 // consider the shortcode as inline text, and thus skip conversion for 2919 // this segment. 2920 2921 if (!Object(lodash__WEBPACK_IMPORTED_MODULE_2__["includes"])(match.shortcode.content || '', '<') && !/(\n|<p>)\s*$/.test(beforeHTML)) { 2922 return segmentHTMLToShortcodeBlock(HTML, lastIndex); 2923 } 2924 2925 var attributes = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["mapValues"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["pickBy"])(transformation.attributes, function (schema) { 2926 return schema.shortcode; 2927 }), // Passing all of `match` as second argument is intentionally broad 2928 // but shouldn't be too relied upon. 2929 // 2930 // See: https://github.com/WordPress/gutenberg/pull/3610#discussion_r152546926 2931 function (schema) { 2932 return schema.shortcode(match.shortcode.attrs, match); 2933 }); 2934 var block = Object(_factory__WEBPACK_IMPORTED_MODULE_4__["createBlock"])(transformation.blockName, Object(_parser__WEBPACK_IMPORTED_MODULE_6__["getBlockAttributes"])(Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(transformation.blockName), { 2935 attributes: transformation.attributes 2936 }), match.shortcode.content, attributes)); 2937 return [beforeHTML, block].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(segmentHTMLToShortcodeBlock(HTML.substr(lastIndex)))); 2938 } 2939 2940 return [HTML]; 2941 } 2942 2943 /* harmony default export */ __webpack_exports__["default"] = (segmentHTMLToShortcodeBlock); 2944 2945 2946 /***/ }), 2947 2948 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/special-comment-converter.js": 2949 /*!***************************************************************************************************!*\ 2950 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/special-comment-converter.js ***! 2951 \***************************************************************************************************/ 2952 /*! exports provided: default */ 2953 /***/ (function(module, __webpack_exports__, __webpack_require__) { 2954 2955 "use strict"; 2956 __webpack_require__.r(__webpack_exports__); 2957 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom"); 2958 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__); 2959 /** 2960 * WordPress dependencies 2961 */ 2962 2963 /** 2964 * Browser dependencies 2965 */ 2966 2967 var COMMENT_NODE = window.Node.COMMENT_NODE; 2968 /** 2969 * Looks for `<!--nextpage-->` and `<!--more-->` comments, as well as the 2970 * `<!--more Some text-->` variant and its `<!--noteaser-->` companion, 2971 * and replaces them with a custom element representing a future block. 2972 * 2973 * The custom element is a way to bypass the rest of the `raw-handling` 2974 * transforms, which would eliminate other kinds of node with which to carry 2975 * `<!--more-->`'s data: nodes with `data` attributes, empty paragraphs, etc. 2976 * 2977 * The custom element is then expected to be recognized by any registered 2978 * block's `raw` transform. 2979 * 2980 * @param {Node} node The node to be processed. 2981 * @param {Document} doc The document of the node. 2982 * @return {void} 2983 */ 2984 2985 /* harmony default export */ __webpack_exports__["default"] = (function (node, doc) { 2986 if (node.nodeType !== COMMENT_NODE) { 2987 return; 2988 } 2989 2990 if (node.nodeValue === 'nextpage') { 2991 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replace"])(node, createNextpage(doc)); 2992 return; 2993 } 2994 2995 if (node.nodeValue.indexOf('more') === 0) { 2996 // Grab any custom text in the comment. 2997 var customText = node.nodeValue.slice(4).trim(); 2998 /* 2999 * When a `<!--more-->` comment is found, we need to look for any 3000 * `<!--noteaser-->` sibling, but it may not be a direct sibling 3001 * (whitespace typically lies in between) 3002 */ 3003 3004 var sibling = node; 3005 var noTeaser = false; 3006 3007 while (sibling = sibling.nextSibling) { 3008 if (sibling.nodeType === COMMENT_NODE && sibling.nodeValue === 'noteaser') { 3009 noTeaser = true; 3010 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["remove"])(sibling); 3011 break; 3012 } 3013 } 3014 3015 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_0__["replace"])(node, createMore(customText, noTeaser, doc)); 3016 } 3017 }); 3018 3019 function createMore(customText, noTeaser, doc) { 3020 var node = doc.createElement('wp-block'); 3021 node.dataset.block = 'core/more'; 3022 3023 if (customText) { 3024 node.dataset.customText = customText; 3025 } 3026 3027 if (noTeaser) { 3028 // "Boolean" data attribute 3029 node.dataset.noTeaser = ''; 3030 } 3031 3032 return node; 3033 } 3034 3035 function createNextpage(doc) { 3036 var node = doc.createElement('wp-block'); 3037 node.dataset.block = 'core/nextpage'; 3038 return node; 3039 } 3040 3041 3042 /***/ }), 3043 3044 /***/ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/utils.js": 3045 /*!*******************************************************************************!*\ 3046 !*** ./node_modules/@wordpress/blocks/build-module/api/raw-handling/utils.js ***! 3047 \*******************************************************************************/ 3048 /*! exports provided: getBlockContentSchema, isEmpty, isPlain, deepFilterNodeList, deepFilterHTML, removeInvalidHTML */ 3049 /***/ (function(module, __webpack_exports__, __webpack_require__) { 3050 3051 "use strict"; 3052 __webpack_require__.r(__webpack_exports__); 3053 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockContentSchema", function() { return getBlockContentSchema; }); 3054 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; }); 3055 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPlain", function() { return isPlain; }); 3056 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deepFilterNodeList", function() { return deepFilterNodeList; }); 3057 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deepFilterHTML", function() { return deepFilterHTML; }); 3058 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeInvalidHTML", function() { return removeInvalidHTML; }); 3059 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 3060 /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); 3061 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash"); 3062 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__); 3063 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/dom */ "@wordpress/dom"); 3064 /* harmony import */ var _wordpress_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__); 3065 /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! .. */ "./node_modules/@wordpress/blocks/build-module/api/index.js"); 3066 /* harmony import */ var _phrasing_content__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./phrasing-content */ "./node_modules/@wordpress/blocks/build-module/api/raw-handling/phrasing-content.js"); 3067 3068 3069 3070 /** 3071 * External dependencies 3072 */ 3073 3074 /** 3075 * WordPress dependencies 3076 */ 3077 3078 3079 3080 /** 3081 * Internal dependencies 3082 */ 3083 3084 3085 /** 3086 * Browser dependencies 3087 */ 3088 3089 var _window$Node = window.Node, 3090 ELEMENT_NODE = _window$Node.ELEMENT_NODE, 3091 TEXT_NODE = _window$Node.TEXT_NODE; 3092 /** 3093 * Given raw transforms from blocks, merges all schemas into one. 3094 * 3095 * @param {Array} transforms Block transforms, of the `raw` type. 3096 * 3097 * @return {Object} A complete block content schema. 3098 */ 3099 3100 function getBlockContentSchema(transforms) { 3101 var schemas = transforms.map(function (_ref) { 3102 var blockName = _ref.blockName, 3103 schema = _ref.schema; 3104 3105 // If the block supports the "anchor" functionality, it needs to keep its ID attribute. 3106 if (Object(___WEBPACK_IMPORTED_MODULE_4__["hasBlockSupport"])(blockName, 'anchor')) { 3107 for (var tag in schema) { 3108 if (!schema[tag].attributes) { 3109 schema[tag].attributes = []; 3110 } 3111 3112 schema[tag].attributes.push('id'); 3113 } 3114 } 3115 3116 return schema; 3117 }); 3118 return lodash__WEBPACK_IMPORTED_MODULE_2__["mergeWith"].apply(void 0, [{}].concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(schemas), [function (objValue, srcValue, key) { 3119 if (key === 'children') { 3120 if (objValue === '*' || srcValue === '*') { 3121 return '*'; 3122 } 3123 3124 return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, objValue, srcValue); 3125 } else if (key === 'attributes' || key === 'require') { 3126 return Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(objValue || []).concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(srcValue || [])); 3127 } 3128 }])); 3129 } 3130 /** 3131 * Recursively checks if an element is empty. An element is not empty if it 3132 * contains text or contains elements with attributes such as images. 3133 * 3134 * @param {Element} element The element to check. 3135 * 3136 * @return {boolean} Wether or not the element is empty. 3137 */ 3138 3139 function isEmpty(element) { 3140 if (!element.hasChildNodes()) { 3141 return true; 3142 } 3143 3144 return Array.from(element.childNodes).every(function (node) { 3145 if (node.nodeType === TEXT_NODE) { 3146 return !node.nodeValue.trim(); 3147 } 3148 3149 if (node.nodeType === ELEMENT_NODE) { 3150 if (node.nodeName === 'BR') { 3151 return true; 3152 } else if (node.hasAttributes()) { 3153 return false; 3154 } 3155 3156 return isEmpty(node); 3157 } 3158 3159 return true; 3160 }); 3161 } 3162 /** 3163 * Checks wether HTML can be considered plain text. That is, it does not contain 3164 * any elements that are not line breaks. 3165 * 3166 * @param {string} HTML The HTML to check. 3167 * 3168 * @return {boolean} Wether the HTML can be considered plain text. 3169 */ 3170 3171 function isPlain(HTML) { 3172 return !/<(?!br[ />])/i.test(HTML); 3173 } 3174 /** 3175 * Given node filters, deeply filters and mutates a NodeList. 3176 * 3177 * @param {NodeList} nodeList The nodeList to filter. 3178 * @param {Array} filters An array of functions that can mutate with the provided node. 3179 * @param {Document} doc The document of the nodeList. 3180 * @param {Object} schema The schema to use. 3181 */ 3182 3183 function deepFilterNodeList(nodeList, filters, doc, schema) { 3184 Array.from(nodeList).forEach(function (node) { 3185 deepFilterNodeList(node.childNodes, filters, doc, schema); 3186 filters.forEach(function (item) { 3187 // Make sure the node is still attached to the document. 3188 if (!doc.contains(node)) { 3189 return; 3190 } 3191 3192 item(node, doc, schema); 3193 }); 3194 }); 3195 } 3196 /** 3197 * Given node filters, deeply filters HTML tags. 3198 * Filters from the deepest nodes to the top. 3199 * 3200 * @param {string} HTML The HTML to filter. 3201 * @param {Array} filters An array of functions that can mutate with the provided node. 3202 * @param {Object} schema The schema to use. 3203 * 3204 * @return {string} The filtered HTML. 3205 */ 3206 3207 function deepFilterHTML(HTML) { 3208 var filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 3209 var schema = arguments.length > 2 ? arguments[2] : undefined; 3210 var doc = document.implementation.createHTMLDocument(''); 3211 doc.body.innerHTML = HTML; 3212 deepFilterNodeList(doc.body.childNodes, filters, doc, schema); 3213 return doc.body.innerHTML; 3214 } 3215 /** 3216 * Given a schema, unwraps or removes nodes, attributes and classes on a node 3217 * list. 3218 * 3219 * @param {NodeList} nodeList The nodeList to filter. 3220 * @param {Document} doc The document of the nodeList. 3221 * @param {Object} schema An array of functions that can mutate with the provided node. 3222 * @param {Object} inline Whether to clean for inline mode. 3223 */ 3224 3225 function cleanNodeList(nodeList, doc, schema, inline) { 3226 Array.from(nodeList).forEach(function (node) { 3227 var tag = node.nodeName.toLowerCase(); // It's a valid child. 3228 3229 if (schema.hasOwnProperty(tag)) { 3230 if (node.nodeType === ELEMENT_NODE) { 3231 var _schema$tag = schema[tag], 3232 _schema$tag$attribute = _schema$tag.attributes, 3233 attributes = _schema$tag$attribute === void 0 ? [] : _schema$tag$attribute, 3234 _schema$tag$classes = _schema$tag.classes, 3235 classes = _schema$tag$classes === void 0 ? [] : _schema$tag$classes, 3236 children = _schema$tag.children, 3237 _schema$tag$require = _schema$tag.require, 3238 require = _schema$tag$require === void 0 ? [] : _schema$tag$require; // If the node is empty and it's supposed to have children, 3239 // remove the node. 3240 3241 3242 if (isEmpty(node) && children) { 3243 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["remove"])(node); 3244 return; 3245 } 3246 3247 if (node.hasAttributes()) { 3248 // Strip invalid attributes. 3249 Array.from(node.attributes).forEach(function (_ref2) { 3250 var name = _ref2.name; 3251 3252 if (name !== 'class' && !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["includes"])(attributes, name)) { 3253 node.removeAttribute(name); 3254 } 3255 }); // Strip invalid classes. 3256 3257 if (node.classList.length) { 3258 var mattchers = classes.map(function (item) { 3259 if (typeof item === 'string') { 3260 return function (className) { 3261 return className === item; 3262 }; 3263 } else if (item instanceof RegExp) { 3264 return function (className) { 3265 return item.test(className); 3266 }; 3267 } 3268 3269 return lodash__WEBPACK_IMPORTED_MODULE_2__["noop"]; 3270 }); 3271 Array.from(node.classList).forEach(function (name) { 3272 if (!mattchers.some(function (isMatch) { 3273 return isMatch(name); 3274 })) { 3275 node.classList.remove(name); 3276 } 3277 }); 3278 3279 if (!node.classList.length) { 3280 node.removeAttribute('class'); 3281 } 3282 } 3283 } 3284 3285 if (node.hasChildNodes()) { 3286 // Do not filter any content. 3287 if (children === '*') { 3288 return; 3289 } // Continue if the node is supposed to have children. 3290 3291 3292 if (children) { 3293 // If a parent requires certain children, but it does 3294 // not have them, drop the parent and continue. 3295 if (require.length && !node.querySelector(require.join(','))) { 3296 cleanNodeList(node.childNodes, doc, schema, inline); 3297 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["unwrap"])(node); 3298 } 3299 3300 cleanNodeList(node.childNodes, doc, children, inline); // Remove children if the node is not supposed to have any. 3301 } else { 3302 while (node.firstChild) { 3303 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["remove"])(node.firstChild); 3304 } 3305 } 3306 } 3307 } // Invalid child. Continue with schema at the same place and unwrap. 3308 3309 } else { 3310 cleanNodeList(node.childNodes, doc, schema, inline); // For inline mode, insert a line break when unwrapping nodes that 3311 // are not phrasing content. 3312 3313 if (inline && !Object(_phrasing_content__WEBPACK_IMPORTED_MODULE_5__["isPhrasingContent"])(node) && node.nextElementSibling) { 3314 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["insertAfter"])(doc.createElement('br'), node); 3315 } 3316 3317 Object(_wordpress_dom__WEBPACK_IMPORTED_MODULE_3__["unwrap"])(node); 3318 } 3319 }); 3320 } 3321 /** 3322 * Given a schema, unwraps or removes nodes, attributes and classes on HTML. 3323 * 3324 * @param {string} HTML The HTML to clean up. 3325 * @param {Object} schema Schema for the HTML. 3326 * @param {Object} inline Whether to clean for inline mode. 3327 * 3328 * @return {string} The cleaned up HTML. 3329 */ 3330 3331 3332 function removeInvalidHTML(HTML, schema, inline) { 3333 var doc = document.implementation.createHTMLDocument(''); 3334 doc.body.innerHTML = HTML; 3335 cleanNodeList(doc.body.childNodes, doc, schema, inline); 3336 return doc.body.innerHTML; 3337 } 3338 3339 3340 /***/ }), 3341 3342 /***/ "./node_modules/@wordpress/blocks/build-module/api/registration.js": 3343 /*!*************************************************************************!*\ 3344 !*** ./node_modules/@wordpress/blocks/build-module/api/registration.js ***! 3345 \*************************************************************************/ 3346 /*! exports provided: unstable__bootstrapServerSideBlockDefinitions, registerBlockType, unregisterBlockType, setUnknownTypeHandlerName, getUnknownTypeHandlerName, setFreeformContentHandlerName, getFreeformContentHandlerName, setUnregisteredTypeHandlerName, getUnregisteredTypeHandlerName, setDefaultBlockName, getDefaultBlockName, getBlockType, getBlockTypes, getBlockSupport, hasBlockSupport, isReusableBlock, getChildBlockNames, hasChildBlocks, hasChildBlocksWithInserterSupport, registerBlockStyle */ 3347 /***/ (function(module, __webpack_exports__, __webpack_require__) { 3348 3349 "use strict"; 3350 __webpack_require__.r(__webpack_exports__); 3351 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unstable__bootstrapServerSideBlockDefinitions", function() { return unstable__bootstrapServerSideBlockDefinitions; }); 3352 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerBlockType", function() { return registerBlockType; }); 3353 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unregisterBlockType", function() { return unregisterBlockType; }); 3354 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUnknownTypeHandlerName", function() { return setUnknownTypeHandlerName; }); 3355 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUnknownTypeHandlerName", function() { return getUnknownTypeHandlerName; }); 3356 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFreeformContentHandlerName", function() { return setFreeformContentHandlerName; }); 3357 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFreeformContentHandlerName", function() { return getFreeformContentHandlerName; }); 3358 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUnregisteredTypeHandlerName", function() { return setUnregisteredTypeHandlerName; }); 3359 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUnregisteredTypeHandlerName", function() { return getUnregisteredTypeHandlerName; }); 3360 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDefaultBlockName", function() { return setDefaultBlockName; }); 3361 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDefaultBlockName", function() { return getDefaultBlockName; }); 3362 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockType", function() { return getBlockType; }); 3363 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockTypes", function() { return getBlockTypes; }); 3364 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockSupport", function() { return getBlockSupport; }); 3365 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasBlockSupport", function() { return hasBlockSupport; }); 3366 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isReusableBlock", function() { return isReusableBlock; }); 3367 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getChildBlockNames", function() { return getChildBlockNames; }); 3368 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocks", function() { return hasChildBlocks; }); 3369 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocksWithInserterSupport", function() { return hasChildBlocksWithInserterSupport; }); 3370 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerBlockStyle", function() { return registerBlockStyle; }); 3371 /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); 3372 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 3373 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash"); 3374 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__); 3375 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks"); 3376 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__); 3377 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 3378 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__); 3379 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated"); 3380 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5__); 3381 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils */ "./node_modules/@wordpress/blocks/build-module/api/utils.js"); 3382 3383 3384 3385 /* eslint no-console: [ 'error', { allow: [ 'error' ] } ] */ 3386 3387 /** 3388 * External dependencies 3389 */ 3390 3391 /** 3392 * WordPress dependencies 3393 */ 3394 3395 3396 3397 3398 /** 3399 * Internal dependencies 3400 */ 3401 3402 3403 /** 3404 * Defined behavior of a block type. 3405 * 3406 * @typedef {WPBlockType} 3407 * 3408 * @property {string} name Block's namespaced name. 3409 * @property {string} title Human-readable label for a block. 3410 * Shown in the block inserter. 3411 * @property {string} category Category classification of block, 3412 * impacting where block is shown in 3413 * inserter results. 3414 * @property {(Object|string|WPElement)} icon Slug of the Dashicon to be shown 3415 * as the icon for the block in the 3416 * inserter, or element or an object describing the icon. 3417 * @property {?string[]} keywords Additional keywords to produce 3418 * block as inserter search result. 3419 * @property {?Object} attributes Block attributes. 3420 * @property {Function} save Serialize behavior of a block, 3421 * returning an element describing 3422 * structure of the block's post 3423 * content markup. 3424 * @property {WPComponent} edit Component rendering element to be 3425 * interacted with in an editor. 3426 */ 3427 3428 var serverSideBlockDefinitions = {}; 3429 /** 3430 * Set the server side block definition of blocks. 3431 * 3432 * @param {Object} definitions Server-side block definitions 3433 */ 3434 3435 function unstable__bootstrapServerSideBlockDefinitions(definitions) { 3436 // eslint-disable-line camelcase 3437 serverSideBlockDefinitions = definitions; 3438 } 3439 /** 3440 * Registers a new block provided a unique name and an object defining its 3441 * behavior. Once registered, the block is made available as an option to any 3442 * editor interface where blocks are implemented. 3443 * 3444 * @param {string} name Block name. 3445 * @param {Object} settings Block settings. 3446 * 3447 * @return {?WPBlock} The block, if it has been successfully registered; 3448 * otherwise `undefined`. 3449 */ 3450 3451 function registerBlockType(name, settings) { 3452 settings = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({ 3453 name: name 3454 }, Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(serverSideBlockDefinitions, name), settings); 3455 3456 if (typeof name !== 'string') { 3457 console.error('Block names must be strings.'); 3458 return; 3459 } 3460 3461 if (!/^[a-z][a-z0-9-]*\/[a-z][a-z0-9-]*$/.test(name)) { 3462 console.error('Block names must contain a namespace prefix, include only lowercase alphanumeric characters or dashes, and start with a letter. Example: my-plugin/my-custom-block'); 3463 return; 3464 } 3465 3466 if (Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockType(name)) { 3467 console.error('Block "' + name + '" is already registered.'); 3468 return; 3469 } 3470 3471 settings = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.registerBlockType', settings, name); 3472 3473 if (!settings || !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(settings.save)) { 3474 console.error('The "save" property must be specified and must be a valid function.'); 3475 return; 3476 } 3477 3478 if ('edit' in settings && !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(settings.edit)) { 3479 console.error('The "edit" property must be a valid function.'); 3480 return; 3481 } 3482 3483 if ('keywords' in settings && settings.keywords.length > 3) { 3484 console.error('The block "' + name + '" can have a maximum of 3 keywords.'); 3485 return; 3486 } 3487 3488 if (!('category' in settings)) { 3489 console.error('The block "' + name + '" must have a category.'); 3490 return; 3491 } 3492 3493 if ('category' in settings && !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["some"])(Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getCategories(), { 3494 slug: settings.category 3495 })) { 3496 console.error('The block "' + name + '" must have a registered category.'); 3497 return; 3498 } 3499 3500 if (!('title' in settings) || settings.title === '') { 3501 console.error('The block "' + name + '" must have a title.'); 3502 return; 3503 } 3504 3505 if (typeof settings.title !== 'string') { 3506 console.error('Block titles must be strings.'); 3507 return; 3508 } 3509 3510 settings.icon = Object(_utils__WEBPACK_IMPORTED_MODULE_6__["normalizeIconObject"])(settings.icon); 3511 3512 if (!Object(_utils__WEBPACK_IMPORTED_MODULE_6__["isValidIcon"])(settings.icon.src)) { 3513 console.error('The icon passed is invalid. ' + 'The icon should be a string, an element, a function, or an object following the specifications documented in https://wordpress.org/gutenberg/handbook/block-api/#icon-optional'); 3514 return; 3515 } 3516 3517 Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').addBlockTypes(settings); 3518 return settings; 3519 } 3520 /** 3521 * Unregisters a block. 3522 * 3523 * @param {string} name Block name. 3524 * 3525 * @return {?WPBlock} The previous block value, if it has been successfully 3526 * unregistered; otherwise `undefined`. 3527 */ 3528 3529 function unregisterBlockType(name) { 3530 var oldBlock = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockType(name); 3531 3532 if (!oldBlock) { 3533 console.error('Block "' + name + '" is not registered.'); 3534 return; 3535 } 3536 3537 Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').removeBlockTypes(name); 3538 return oldBlock; 3539 } 3540 /** 3541 * Assigns name of block handling unknown block types. 3542 * 3543 * @param {string} name Block name. 3544 */ 3545 3546 function setUnknownTypeHandlerName(name) { 3547 _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5___default()('setUnknownTypeHandlerName', { 3548 plugin: 'Gutenberg', 3549 version: '4.2', 3550 alternative: 'setFreeformContentHandlerName and setUnregisteredTypeHandlerName' 3551 }); 3552 setFreeformContentHandlerName(name); 3553 } 3554 /** 3555 * Retrieves name of block handling unknown block types, or undefined if no 3556 * handler has been defined. 3557 * 3558 * @return {?string} Blog name. 3559 */ 3560 3561 function getUnknownTypeHandlerName() { 3562 _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_5___default()('getUnknownTypeHandlerName', { 3563 plugin: 'Gutenberg', 3564 version: '4.2', 3565 alternative: 'getFreeformContentHandlerName and getUnregisteredTypeHandlerName' 3566 }); 3567 return getFreeformContentHandlerName(); 3568 } 3569 /** 3570 * Assigns name of block for handling non-block content. 3571 * 3572 * @param {string} name Block name. 3573 */ 3574 3575 function setFreeformContentHandlerName(name) { 3576 Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').setFreeformFallbackBlockName(name); 3577 } 3578 /** 3579 * Retrieves name of block handling non-block content, or undefined if no 3580 * handler has been defined. 3581 * 3582 * @return {?string} Blog name. 3583 */ 3584 3585 function getFreeformContentHandlerName() { 3586 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getFreeformFallbackBlockName(); 3587 } 3588 /** 3589 * Assigns name of block handling unregistered block types. 3590 * 3591 * @param {string} name Block name. 3592 */ 3593 3594 function setUnregisteredTypeHandlerName(name) { 3595 Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').setUnregisteredFallbackBlockName(name); 3596 } 3597 /** 3598 * Retrieves name of block handling unregistered block types, or undefined if no 3599 * handler has been defined. 3600 * 3601 * @return {?string} Blog name. 3602 */ 3603 3604 function getUnregisteredTypeHandlerName() { 3605 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getUnregisteredFallbackBlockName(); 3606 } 3607 /** 3608 * Assigns the default block name. 3609 * 3610 * @param {string} name Block name. 3611 */ 3612 3613 function setDefaultBlockName(name) { 3614 Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["dispatch"])('core/blocks').setDefaultBlockName(name); 3615 } 3616 /** 3617 * Retrieves the default block name. 3618 * 3619 * @return {?string} Block name. 3620 */ 3621 3622 function getDefaultBlockName() { 3623 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getDefaultBlockName(); 3624 } 3625 /** 3626 * Returns a registered block type. 3627 * 3628 * @param {string} name Block name. 3629 * 3630 * @return {?Object} Block type. 3631 */ 3632 3633 function getBlockType(name) { 3634 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockType(name); 3635 } 3636 /** 3637 * Returns all registered blocks. 3638 * 3639 * @return {Array} Block settings. 3640 */ 3641 3642 function getBlockTypes() { 3643 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockTypes(); 3644 } 3645 /** 3646 * Returns the block support value for a feature, if defined. 3647 * 3648 * @param {(string|Object)} nameOrType Block name or type object 3649 * @param {string} feature Feature to retrieve 3650 * @param {*} defaultSupports Default value to return if not 3651 * explicitly defined 3652 * 3653 * @return {?*} Block support value 3654 */ 3655 3656 function getBlockSupport(nameOrType, feature, defaultSupports) { 3657 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getBlockSupport(nameOrType, feature, defaultSupports); 3658 } 3659 /** 3660 * Returns true if the block defines support for a feature, or false otherwise. 3661 * 3662 * @param {(string|Object)} nameOrType Block name or type object. 3663 * @param {string} feature Feature to test. 3664 * @param {boolean} defaultSupports Whether feature is supported by 3665 * default if not explicitly defined. 3666 * 3667 * @return {boolean} Whether block supports feature. 3668 */ 3669 3670 function hasBlockSupport(nameOrType, feature, defaultSupports) { 3671 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').hasBlockSupport(nameOrType, feature, defaultSupports); 3672 } 3673 /** 3674 * Determines whether or not the given block is a reusable block. This is a 3675 * special block type that is used to point to a global block stored via the 3676 * API. 3677 * 3678 * @param {Object} blockOrType Block or Block Type to test. 3679 * 3680 * @return {boolean} Whether the given block is a reusable block. 3681 */ 3682 3683 function isReusableBlock(blockOrType) { 3684 return blockOrType.name === 'core/block'; 3685 } 3686 /** 3687 * Returns an array with the child blocks of a given block. 3688 * 3689 * @param {string} blockName Name of block (example: “latest-posts”). 3690 * 3691 * @return {Array} Array of child block names. 3692 */ 3693 3694 var getChildBlockNames = function getChildBlockNames(blockName) { 3695 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').getChildBlockNames(blockName); 3696 }; 3697 /** 3698 * Returns a boolean indicating if a block has child blocks or not. 3699 * 3700 * @param {string} blockName Name of block (example: “latest-posts”). 3701 * 3702 * @return {boolean} True if a block contains child blocks and false otherwise. 3703 */ 3704 3705 var hasChildBlocks = function hasChildBlocks(blockName) { 3706 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').hasChildBlocks(blockName); 3707 }; 3708 /** 3709 * Returns a boolean indicating if a block has at least one child block with inserter support. 3710 * 3711 * @param {string} blockName Block type name. 3712 * 3713 * @return {boolean} True if a block contains at least one child blocks with inserter support 3714 * and false otherwise. 3715 */ 3716 3717 var hasChildBlocksWithInserterSupport = function hasChildBlocksWithInserterSupport(blockName) { 3718 return Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/blocks').hasChildBlocksWithInserterSupport(blockName); 3719 }; 3720 /** 3721 * Registers a new block style variation for the given block. 3722 * 3723 * @param {string} blockName Name of block (example: “core/latest-posts”). 3724 * @param {Object} styleVariation Object containing `name` which is the class name applied to the block and `label` which identifies the variation to the user. 3725 */ 3726 3727 var registerBlockStyle = function registerBlockStyle(blockName, styleVariation) { 3728 Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["addFilter"])('blocks.registerBlockType', "".concat(blockName, "/").concat(styleVariation.name), function (settings, name) { 3729 if (blockName !== name) { 3730 return settings; 3731 } 3732 3733 return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__["default"])({}, settings, { 3734 styles: Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(settings, ['styles'], [])).concat([styleVariation]) 3735 }); 3736 }); 3737 }; 3738 3739 3740 /***/ }), 3741 3742 /***/ "./node_modules/@wordpress/blocks/build-module/api/serializer.js": 3743 /*!***********************************************************************!*\ 3744 !*** ./node_modules/@wordpress/blocks/build-module/api/serializer.js ***! 3745 \***********************************************************************/ 3746 /*! exports provided: getBlockDefaultClassName, getBlockMenuDefaultClassName, getSaveElement, getSaveContent, getCommentAttributes, serializeAttributes, getBlockContent, getCommentDelimitedContent, serializeBlock, default */ 3747 /***/ (function(module, __webpack_exports__, __webpack_require__) { 3748 3749 "use strict"; 3750 __webpack_require__.r(__webpack_exports__); 3751 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockDefaultClassName", function() { return getBlockDefaultClassName; }); 3752 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockMenuDefaultClassName", function() { return getBlockMenuDefaultClassName; }); 3753 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSaveElement", function() { return getSaveElement; }); 3754 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSaveContent", function() { return getSaveContent; }); 3755 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCommentAttributes", function() { return getCommentAttributes; }); 3756 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "serializeAttributes", function() { return serializeAttributes; }); 3757 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockContent", function() { return getBlockContent; }); 3758 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCommentDelimitedContent", function() { return getCommentDelimitedContent; }); 3759 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "serializeBlock", function() { return serializeBlock; }); 3760 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return serialize; }); 3761 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 3762 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 3763 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 3764 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash"); 3765 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__); 3766 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks"); 3767 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__); 3768 /* harmony import */ var _wordpress_is_shallow_equal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/is-shallow-equal */ "@wordpress/is-shallow-equal"); 3769 /* harmony import */ var _wordpress_is_shallow_equal__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_is_shallow_equal__WEBPACK_IMPORTED_MODULE_4__); 3770 /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js"); 3771 /* harmony import */ var _block_content_provider__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../block-content-provider */ "./node_modules/@wordpress/blocks/build-module/block-content-provider/index.js"); 3772 3773 3774 3775 /** 3776 * External dependencies 3777 */ 3778 3779 /** 3780 * WordPress dependencies 3781 */ 3782 3783 3784 3785 3786 /** 3787 * Internal dependencies 3788 */ 3789 3790 3791 3792 /** 3793 * Returns the block's default classname from its name. 3794 * 3795 * @param {string} blockName The block name. 3796 * 3797 * @return {string} The block's default class. 3798 */ 3799 3800 function getBlockDefaultClassName(blockName) { 3801 // Generated HTML classes for blocks follow the `wp-block-{name}` nomenclature. 3802 // Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (used in 'core-embed/'). 3803 var className = 'wp-block-' + blockName.replace(/\//, '-').replace(/^core-/, ''); 3804 return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.getBlockDefaultClassName', className, blockName); 3805 } 3806 /** 3807 * Returns the block's default menu item classname from its name. 3808 * 3809 * @param {string} blockName The block name. 3810 * 3811 * @return {string} The block's default menu item class. 3812 */ 3813 3814 function getBlockMenuDefaultClassName(blockName) { 3815 // Generated HTML classes for blocks follow the `editor-block-list-item-{name}` nomenclature. 3816 // Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (used in 'core-embed/'). 3817 var className = 'editor-block-list-item-' + blockName.replace(/\//, '-').replace(/^core-/, ''); 3818 return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.getBlockMenuDefaultClassName', className, blockName); 3819 } 3820 /** 3821 * Given a block type containing a save render implementation and attributes, returns the 3822 * enhanced element to be saved or string when raw HTML expected. 3823 * 3824 * @param {Object} blockType Block type. 3825 * @param {Object} attributes Block attributes. 3826 * @param {?Array} innerBlocks Nested blocks. 3827 * 3828 * @return {Object|string} Save element or raw HTML string. 3829 */ 3830 3831 function getSaveElement(blockType, attributes) { 3832 var innerBlocks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; 3833 var save = blockType.save; // Component classes are unsupported for save since serialization must 3834 // occur synchronously. For improved interoperability with higher-order 3835 // components which often return component class, emulate basic support. 3836 3837 if (save.prototype instanceof _wordpress_element__WEBPACK_IMPORTED_MODULE_1__["Component"]) { 3838 var instance = new save({ 3839 attributes: attributes 3840 }); 3841 save = instance.render.bind(instance); 3842 } 3843 3844 var element = save({ 3845 attributes: attributes, 3846 innerBlocks: innerBlocks 3847 }); 3848 3849 if (Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isObject"])(element) && Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["hasFilter"])('blocks.getSaveContent.extraProps')) { 3850 /** 3851 * Filters the props applied to the block save result element. 3852 * 3853 * @param {Object} props Props applied to save element. 3854 * @param {WPBlockType} blockType Block type definition. 3855 * @param {Object} attributes Block attributes. 3856 */ 3857 var props = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.getSaveContent.extraProps', Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, element.props), blockType, attributes); 3858 3859 if (!_wordpress_is_shallow_equal__WEBPACK_IMPORTED_MODULE_4___default()(props, element.props)) { 3860 element = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["cloneElement"])(element, props); 3861 } 3862 } 3863 /** 3864 * Filters the save result of a block during serialization. 3865 * 3866 * @param {WPElement} element Block save result. 3867 * @param {WPBlockType} blockType Block type definition. 3868 * @param {Object} attributes Block attributes. 3869 */ 3870 3871 3872 element = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_3__["applyFilters"])('blocks.getSaveElement', element, blockType, attributes); 3873 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_block_content_provider__WEBPACK_IMPORTED_MODULE_6__["default"], { 3874 innerBlocks: innerBlocks 3875 }, element); 3876 } 3877 /** 3878 * Given a block type containing a save render implementation and attributes, returns the 3879 * static markup to be saved. 3880 * 3881 * @param {Object} blockType Block type. 3882 * @param {Object} attributes Block attributes. 3883 * @param {?Array} innerBlocks Nested blocks. 3884 * 3885 * @return {string} Save content. 3886 */ 3887 3888 function getSaveContent(blockType, attributes, innerBlocks) { 3889 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["renderToString"])(getSaveElement(blockType, attributes, innerBlocks)); 3890 } 3891 /** 3892 * Returns attributes which are to be saved and serialized into the block 3893 * comment delimiter. 3894 * 3895 * When a block exists in memory it contains as its attributes both those 3896 * parsed the block comment delimiter _and_ those which matched from the 3897 * contents of the block. 3898 * 3899 * This function returns only those attributes which are needed to persist and 3900 * which cannot be matched from the block content. 3901 * 3902 * @param {Object<string,*>} allAttributes Attributes from in-memory block data. 3903 * @param {Object<string,*>} blockType Block type. 3904 * 3905 * @return {Object<string,*>} Subset of attributes for comment serialization. 3906 */ 3907 3908 function getCommentAttributes(allAttributes, blockType) { 3909 var attributes = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["reduce"])(blockType.attributes, function (result, attributeSchema, key) { 3910 var value = allAttributes[key]; // Ignore undefined values. 3911 3912 if (undefined === value) { 3913 return result; 3914 } // Ignore all attributes but the ones with an "undefined" source 3915 // "undefined" source refers to attributes saved in the block comment. 3916 3917 3918 if (attributeSchema.source !== undefined) { 3919 return result; 3920 } // Ignore default value. 3921 3922 3923 if ('default' in attributeSchema && attributeSchema.default === value) { 3924 return result; 3925 } // Otherwise, include in comment set. 3926 3927 3928 result[key] = value; 3929 return result; 3930 }, {}); 3931 return attributes; 3932 } 3933 /** 3934 * Given an attributes object, returns a string in the serialized attributes 3935 * format prepared for post content. 3936 * 3937 * @param {Object} attributes Attributes object. 3938 * 3939 * @return {string} Serialized attributes. 3940 */ 3941 3942 function serializeAttributes(attributes) { 3943 return JSON.stringify(attributes) // Don't break HTML comments. 3944 .replace(/--/g, "\\u002d\\u002d") // Don't break non-standard-compliant tools. 3945 .replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/&/g, "\\u0026") // Bypass server stripslashes behavior which would unescape stringify's 3946 // escaping of quotation mark. 3947 // 3948 // See: https://developer.wordpress.org/reference/functions/wp_kses_stripslashes/ 3949 .replace(/\\"/g, "\\u0022"); 3950 } 3951 /** 3952 * Given a block object, returns the Block's Inner HTML markup. 3953 * 3954 * @param {Object} block Block Object. 3955 * 3956 * @return {string} HTML. 3957 */ 3958 3959 function getBlockContent(block) { 3960 // @todo why not getBlockInnerHtml? 3961 var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(block.name); // If block was parsed as invalid or encounters an error while generating 3962 // save content, use original content instead to avoid content loss. If a 3963 // block contains nested content, exempt it from this condition because we 3964 // otherwise have no access to its original content and content loss would 3965 // still occur. 3966 3967 var saveContent = block.originalContent; 3968 3969 if (block.isValid || block.innerBlocks.length) { 3970 try { 3971 saveContent = getSaveContent(blockType, block.attributes, block.innerBlocks); 3972 } catch (error) {} 3973 } 3974 3975 return saveContent; 3976 } 3977 /** 3978 * Returns the content of a block, including comment delimiters. 3979 * 3980 * @param {string} rawBlockName Block name. 3981 * @param {Object} attributes Block attributes. 3982 * @param {string} content Block save content. 3983 * 3984 * @return {string} Comment-delimited block content. 3985 */ 3986 3987 function getCommentDelimitedContent(rawBlockName, attributes, content) { 3988 var serializedAttributes = !Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(attributes) ? serializeAttributes(attributes) + ' ' : ''; // Strip core blocks of their namespace prefix. 3989 3990 var blockName = Object(lodash__WEBPACK_IMPORTED_MODULE_2__["startsWith"])(rawBlockName, 'core/') ? rawBlockName.slice(5) : rawBlockName; // @todo make the `wp:` prefix potentially configurable. 3991 3992 if (!content) { 3993 return "<!-- wp:".concat(blockName, " ").concat(serializedAttributes, "/-->"); 3994 } 3995 3996 return "<!-- wp:".concat(blockName, " ").concat(serializedAttributes, "-->\n") + content + "\n<!-- /wp:".concat(blockName, " -->"); 3997 } 3998 /** 3999 * Returns the content of a block, including comment delimiters, determining 4000 * serialized attributes and content form from the current state of the block. 4001 * 4002 * @param {Object} block Block instance. 4003 * 4004 * @return {string} Serialized block. 4005 */ 4006 4007 function serializeBlock(block) { 4008 var blockName = block.name; 4009 var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(blockName); 4010 var saveContent = getBlockContent(block); 4011 var saveAttributes = getCommentAttributes(block.attributes, blockType); 4012 4013 switch (blockName) { 4014 case Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getFreeformContentHandlerName"])(): 4015 case Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getUnregisteredTypeHandlerName"])(): 4016 return saveContent; 4017 4018 default: 4019 return getCommentDelimitedContent(blockName, saveAttributes, saveContent); 4020 } 4021 } 4022 /** 4023 * Takes a block or set of blocks and returns the serialized post content. 4024 * 4025 * @param {Array} blocks Block(s) to serialize. 4026 * 4027 * @return {string} The post content. 4028 */ 4029 4030 function serialize(blocks) { 4031 return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["castArray"])(blocks).map(serializeBlock).join('\n\n'); 4032 } 4033 4034 4035 /***/ }), 4036 4037 /***/ "./node_modules/@wordpress/blocks/build-module/api/templates.js": 4038 /*!**********************************************************************!*\ 4039 !*** ./node_modules/@wordpress/blocks/build-module/api/templates.js ***! 4040 \**********************************************************************/ 4041 /*! exports provided: doBlocksMatchTemplate, synchronizeBlocksWithTemplate */ 4042 /***/ (function(module, __webpack_exports__, __webpack_require__) { 4043 4044 "use strict"; 4045 __webpack_require__.r(__webpack_exports__); 4046 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "doBlocksMatchTemplate", function() { return doBlocksMatchTemplate; }); 4047 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "synchronizeBlocksWithTemplate", function() { return synchronizeBlocksWithTemplate; }); 4048 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 4049 /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); 4050 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash"); 4051 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__); 4052 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 4053 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__); 4054 /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js"); 4055 /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js"); 4056 4057 4058 4059 /** 4060 * External dependencies 4061 */ 4062 4063 /** 4064 * WordPress dependencies 4065 */ 4066 4067 4068 /** 4069 * Internal dependencies 4070 */ 4071 4072 4073 4074 /** 4075 * Checks whether a list of blocks matches a template by comparing the block names. 4076 * 4077 * @param {Array} blocks Block list. 4078 * @param {Array} template Block template. 4079 * 4080 * @return {boolean} Whether the list of blocks matches a templates 4081 */ 4082 4083 function doBlocksMatchTemplate() { 4084 var blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; 4085 var template = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 4086 return blocks.length === template.length && Object(lodash__WEBPACK_IMPORTED_MODULE_2__["every"])(template, function (_ref, index) { 4087 var _ref2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, 3), 4088 name = _ref2[0], 4089 innerBlocksTemplate = _ref2[2]; 4090 4091 var block = blocks[index]; 4092 return name === block.name && doBlocksMatchTemplate(block.innerBlocks, innerBlocksTemplate); 4093 }); 4094 } 4095 /** 4096 * Synchronize a block list with a block template. 4097 * 4098 * Synchronizing a block list with a block template means that we loop over the blocks 4099 * keep the block as is if it matches the block at the same position in the template 4100 * (If it has the same name) and if doesn't match, we create a new block based on the template. 4101 * Extra blocks not present in the template are removed. 4102 * 4103 * @param {Array} blocks Block list. 4104 * @param {Array} template Block template. 4105 * 4106 * @return {Array} Updated Block list. 4107 */ 4108 4109 function synchronizeBlocksWithTemplate() { 4110 var blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; 4111 var template = arguments.length > 1 ? arguments[1] : undefined; 4112 4113 // If no template is provided, return blocks unmodified. 4114 if (!template) { 4115 return blocks; 4116 } 4117 4118 return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["map"])(template, function (_ref3, index) { 4119 var _ref4 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref3, 3), 4120 name = _ref4[0], 4121 attributes = _ref4[1], 4122 innerBlocksTemplate = _ref4[2]; 4123 4124 var block = blocks[index]; 4125 4126 if (block && block.name === name) { 4127 var innerBlocks = synchronizeBlocksWithTemplate(block.innerBlocks, innerBlocksTemplate); 4128 return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, block, { 4129 innerBlocks: innerBlocks 4130 }); 4131 } // To support old templates that were using the "children" format 4132 // for the attributes using "html" strings now, we normalize the template attributes 4133 // before creating the blocks. 4134 4135 4136 var blockType = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getBlockType"])(name); 4137 4138 var isHTMLAttribute = function isHTMLAttribute(attributeDefinition) { 4139 return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(attributeDefinition, ['source']) === 'html'; 4140 }; 4141 4142 var isQueryAttribute = function isQueryAttribute(attributeDefinition) { 4143 return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(attributeDefinition, ['source']) === 'query'; 4144 }; 4145 4146 var normalizeAttributes = function normalizeAttributes(schema, values) { 4147 return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["mapValues"])(values, function (value, key) { 4148 return normalizeAttribute(schema[key], value); 4149 }); 4150 }; 4151 4152 var normalizeAttribute = function normalizeAttribute(definition, value) { 4153 if (isHTMLAttribute(definition) && Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isArray"])(value)) { 4154 // Introduce a deprecated call at this point 4155 // When we're confident that "children" format should be removed from the templates. 4156 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__["renderToString"])(value); 4157 } 4158 4159 if (isQueryAttribute(definition) && value) { 4160 return value.map(function (subValues) { 4161 return normalizeAttributes(definition.query, subValues); 4162 }); 4163 } 4164 4165 return value; 4166 }; 4167 4168 var normalizedAttributes = normalizeAttributes(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["get"])(blockType, ['attributes'], {}), attributes); 4169 return Object(_factory__WEBPACK_IMPORTED_MODULE_4__["createBlock"])(name, normalizedAttributes, synchronizeBlocksWithTemplate([], innerBlocksTemplate)); 4170 }); 4171 } 4172 4173 4174 /***/ }), 4175 4176 /***/ "./node_modules/@wordpress/blocks/build-module/api/utils.js": 4177 /*!******************************************************************!*\ 4178 !*** ./node_modules/@wordpress/blocks/build-module/api/utils.js ***! 4179 \******************************************************************/ 4180 /*! exports provided: isUnmodifiedDefaultBlock, isValidIcon, normalizeIconObject */ 4181 /***/ (function(module, __webpack_exports__, __webpack_require__) { 4182 4183 "use strict"; 4184 __webpack_require__.r(__webpack_exports__); 4185 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isUnmodifiedDefaultBlock", function() { return isUnmodifiedDefaultBlock; }); 4186 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isValidIcon", function() { return isValidIcon; }); 4187 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "normalizeIconObject", function() { return normalizeIconObject; }); 4188 /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); 4189 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 4190 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 4191 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "lodash"); 4192 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__); 4193 /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tinycolor2 */ "./node_modules/tinycolor2/tinycolor.js"); 4194 /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(tinycolor2__WEBPACK_IMPORTED_MODULE_3__); 4195 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks"); 4196 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__); 4197 /* harmony import */ var _registration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./registration */ "./node_modules/@wordpress/blocks/build-module/api/registration.js"); 4198 /* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./factory */ "./node_modules/@wordpress/blocks/build-module/api/factory.js"); 4199 4200 4201 4202 /** 4203 * External dependencies 4204 */ 4205 4206 4207 /** 4208 * WordPress dependencies 4209 */ 4210 4211 4212 4213 /** 4214 * Internal dependencies 4215 */ 4216 4217 4218 4219 /** 4220 * Array of icon colors containing a color to be used if the icon color 4221 * was not explicitly set but the icon background color was. 4222 * 4223 * @type {Object} 4224 */ 4225 4226 var ICON_COLORS = ['#191e23', '#f8f9f9']; 4227 /** 4228 * Determines whether the block is a default block 4229 * and its attributes are equal to the default attributes 4230 * which means the block is unmodified. 4231 * 4232 * @param {WPBlock} block Block Object 4233 * 4234 * @return {boolean} Whether the block is an unmodified default block 4235 */ 4236 4237 function isUnmodifiedDefaultBlock(block) { 4238 var defaultBlockName = Object(_registration__WEBPACK_IMPORTED_MODULE_5__["getDefaultBlockName"])(); 4239 4240 if (block.name !== defaultBlockName) { 4241 return false; 4242 } 4243 4244 var newDefaultBlock = Object(_factory__WEBPACK_IMPORTED_MODULE_6__["createBlock"])(defaultBlockName); 4245 var attributeKeys = Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_4__["applyFilters"])('blocks.isUnmodifiedDefaultBlock.attributes', Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["keys"])(newDefaultBlock.attributes)).concat(Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(Object(lodash__WEBPACK_IMPORTED_MODULE_2__["keys"])(block.attributes)))); 4246 return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["every"])(attributeKeys, function (key) { 4247 return Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isEqual"])(newDefaultBlock.attributes[key], block.attributes[key]); 4248 }); 4249 } 4250 /** 4251 * Function that checks if the parameter is a valid icon. 4252 * 4253 * @param {*} icon Parameter to be checked. 4254 * 4255 * @return {boolean} True if the parameter is a valid icon and false otherwise. 4256 */ 4257 4258 function isValidIcon(icon) { 4259 return !!icon && (Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isString"])(icon) || Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["isValidElement"])(icon) || Object(lodash__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(icon) || icon instanceof _wordpress_element__WEBPACK_IMPORTED_MODULE_1__["Component"]); 4260 } 4261 /** 4262 * Function that receives an icon as set by the blocks during the registration 4263 * and returns a new icon object that is normalized so we can rely on just on possible icon structure 4264 * in the codebase. 4265 * 4266 * @param {(Object|string|WPElement)} icon Slug of the Dashicon to be shown 4267 * as the icon for the block in the 4268 * inserter, or element or an object describing the icon. 4269 * 4270 * @return {Object} Object describing the icon. 4271 */ 4272 4273 function normalizeIconObject(icon) { 4274 if (!icon) { 4275 return { 4276 src: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("svg", { 4277 xmlns: "http://www.w3.org/2000/svg", 4278 viewBox: "0 0 24 24" 4279 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("path", { 4280 d: "M19 7h-1V5h-4v2h-4V5H6v2H5c-1.1 0-2 .9-2 2v10h18V9c0-1.1-.9-2-2-2zm0 10H5V9h14v8z" 4281 })) 4282 }; 4283 } 4284 4285 if (isValidIcon(icon)) { 4286 return { 4287 src: icon 4288 }; 4289 } 4290 4291 if (icon.background) { 4292 var tinyBgColor = tinycolor2__WEBPACK_IMPORTED_MODULE_3___default()(icon.background); 4293 4294 if (!icon.foreground) { 4295 var foreground = Object(tinycolor2__WEBPACK_IMPORTED_MODULE_3__["mostReadable"])(tinyBgColor, ICON_COLORS, { 4296 includeFallbackColors: true, 4297 level: 'AA', 4298 size: 'large' 4299 }).toHexString(); 4300 icon.foreground = foreground; 4301 } 4302 4303 icon.shadowColor = tinyBgColor.setAlpha(0.3).toRgbString(); 4304 } 4305 4306 return icon; 4307 } 4308 4309 4310 /***/ }), 4311 4312 /***/ "./node_modules/@wordpress/blocks/build-module/api/validation.js": 4313 /*!***********************************************************************!*\ 4314 !*** ./node_modules/@wordpress/blocks/build-module/api/validation.js ***! 4315 \***********************************************************************/ 4316 /*! exports provided: getTextPiecesSplitOnWhitespace, getTextWithCollapsedWhitespace, getMeaningfulAttributePairs, isEqualTextTokensWithCollapsedWhitespace, getNormalizedStyleValue, getStyleProperties, isEqualAttributesOfName, isEqualTagAttributePairs, isEqualTokensOfType, getNextNonWhitespaceToken, isEquivalentHTML, isValidBlock */ 4317 /***/ (function(module, __webpack_exports__, __webpack_require__) { 4318 4319 "use strict"; 4320 __webpack_require__.r(__webpack_exports__); 4321 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTextPiecesSplitOnWhitespace", function() { return getTextPiecesSplitOnWhitespace; }); 4322 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTextWithCollapsedWhitespace", function() { return getTextWithCollapsedWhitespace; }); 4323 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMeaningfulAttributePairs", function() { return getMeaningfulAttributePairs; }); 4324 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualTextTokensWithCollapsedWhitespace", function() { return isEqualTextTokensWithCollapsedWhitespace; }); 4325 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNormalizedStyleValue", function() { return getNormalizedStyleValue; }); 4326 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getStyleProperties", function() { return getStyleProperties; }); 4327 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualAttributesOfName", function() { return isEqualAttributesOfName; }); 4328 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualTagAttributePairs", function() { return isEqualTagAttributePairs; }); 4329 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualTokensOfType", function() { return isEqualTokensOfType; }); 4330 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNextNonWhitespaceToken", function() { return getNextNonWhitespaceToken; }); 4331 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEquivalentHTML", function() { return isEquivalentHTML; }); 4332 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isValidBlock", function() { return isValidBlock; }); 4333 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 4334 /* harmony import */ var _babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toArray */ "./node_modules/@babel/runtime/helpers/esm/toArray.js"); 4335 /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); 4336 /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); 4337 /* harmony import */ var simple_html_tokenizer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! simple-html-tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/index.js"); 4338 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash */ "lodash"); 4339 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_5__); 4340 /* harmony import */ var _serializer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serializer */ "./node_modules/@wordpress/blocks/build-module/api/serializer.js"); 4341 4342 4343 4344 4345 4346 /** 4347 * External dependencies 4348 */ 4349 4350 4351 /** 4352 * Internal dependencies 4353 */ 4354 4355 4356 /** 4357 * Globally matches any consecutive whitespace 4358 * 4359 * @type {RegExp} 4360 */ 4361 4362 var REGEXP_WHITESPACE = /[\t\n\r\v\f ]+/g; 4363 /** 4364 * Matches a string containing only whitespace 4365 * 4366 * @type {RegExp} 4367 */ 4368 4369 var REGEXP_ONLY_WHITESPACE = /^[\t\n\r\v\f ]*$/; 4370 /** 4371 * Matches a CSS URL type value 4372 * 4373 * @type {RegExp} 4374 */ 4375 4376 var REGEXP_STYLE_URL_TYPE = /^url\s*\(['"\s]*(.*?)['"\s]*\)$/; 4377 /** 4378 * Boolean attributes are attributes whose presence as being assigned is 4379 * meaningful, even if only empty. 4380 * 4381 * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes 4382 * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3 4383 * 4384 * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ] 4385 * .filter( ( tr ) => tr.lastChild.textContent.indexOf( 'Boolean attribute' ) !== -1 ) 4386 * .reduce( ( result, tr ) => Object.assign( result, { 4387 * [ tr.firstChild.textContent.trim() ]: true 4388 * } ), {} ) ).sort(); 4389 * 4390 * @type {Array} 4391 */ 4392 4393 var BOOLEAN_ATTRIBUTES = ['allowfullscreen', 'allowpaymentrequest', 'allowusermedia', 'async', 'autofocus', 'autoplay', 'checked', 'controls', 'default', 'defer', 'disabled', 'formnovalidate', 'hidden', 'ismap', 'itemscope', 'loop', 'multiple', 'muted', 'nomodule', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'selected', 'typemustmatch']; 4394 /** 4395 * Enumerated attributes are attributes which must be of a specific value form. 4396 * Like boolean attributes, these are meaningful if specified, even if not of a 4397 * valid enumerated value. 4398 * 4399 * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute 4400 * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3 4401 * 4402 * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ] 4403 * .filter( ( tr ) => /^("(.+?)";?\s*)+/.test( tr.lastChild.textContent.trim() ) ) 4404 * .reduce( ( result, tr ) => Object.assign( result, { 4405 * [ tr.firstChild.textContent.trim() ]: true 4406 * } ), {} ) ).sort(); 4407 * 4408 * @type {Array} 4409 */ 4410 4411 var ENUMERATED_ATTRIBUTES = ['autocapitalize', 'autocomplete', 'charset', 'contenteditable', 'crossorigin', 'decoding', 'dir', 'draggable', 'enctype', 'formenctype', 'formmethod', 'http-equiv', 'inputmode', 'kind', 'method', 'preload', 'scope', 'shape', 'spellcheck', 'translate', 'type', 'wrap']; 4412 /** 4413 * Meaningful attributes are those who cannot be safely ignored when omitted in 4414 * one HTML markup string and not another. 4415 * 4416 * @type {Array} 4417 */ 4418 4419 var MEANINGFUL_ATTRIBUTES = BOOLEAN_ATTRIBUTES.concat(ENUMERATED_ATTRIBUTES); 4420 /** 4421 * Object of logger functions. 4422 */ 4423 4424 var log = function () { 4425 /** 4426 * Creates a logger with block validation prefix. 4427 * 4428 * @param {Function} logger Original logger function. 4429 * 4430 * @return {Function} Augmented logger function. 4431 */ 4432 function createLogger(logger) { 4433 // In test environments, pre-process the sprintf message to improve 4434 // readability of error messages. We'd prefer to avoid pulling in this 4435 // dependency in runtime environments, and it can be dropped by a combo 4436 // of Webpack env substitution + UglifyJS dead code elimination. 4437 if (false) {} 4438 4439 return function (message) { 4440 for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 4441 args[_key - 1] = arguments[_key]; 4442 } 4443 4444 return logger.apply(void 0, ['Block validation: ' + message].concat(args)); 4445 }; 4446 } 4447 4448 return { 4449 /* eslint-disable no-console */ 4450 error: createLogger(console.error), 4451 warning: createLogger(console.warn) 4452 /* eslint-enable no-console */ 4453 4454 }; 4455 }(); 4456 /** 4457 * Given a specified string, returns an array of strings split by consecutive 4458 * whitespace, ignoring leading or trailing whitespace. 4459 * 4460 * @param {string} text Original text. 4461 * 4462 * @return {string[]} Text pieces split on whitespace. 4463 */ 4464 4465 4466 function getTextPiecesSplitOnWhitespace(text) { 4467 return text.trim().split(REGEXP_WHITESPACE); 4468 } 4469 /** 4470 * Given a specified string, returns a new trimmed string where all consecutive 4471 * whitespace is collapsed to a single space. 4472 * 4473 * @param {string} text Original text. 4474 * 4475 * @return {string} Trimmed text with consecutive whitespace collapsed. 4476 */ 4477 4478 function getTextWithCollapsedWhitespace(text) { 4479 return getTextPiecesSplitOnWhitespace(text).join(' '); 4480 } 4481 /** 4482 * Returns attribute pairs of the given StartTag token, including only pairs 4483 * where the value is non-empty or the attribute is a boolean attribute, an 4484 * enumerated attribute, or a custom data- attribute. 4485 * 4486 * @see MEANINGFUL_ATTRIBUTES 4487 * 4488 * @param {Object} token StartTag token. 4489 * 4490 * @return {Array[]} Attribute pairs. 4491 */ 4492 4493 function getMeaningfulAttributePairs(token) { 4494 return token.attributes.filter(function (pair) { 4495 var _pair = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(pair, 2), 4496 key = _pair[0], 4497 value = _pair[1]; 4498 4499 return value || key.indexOf('data-') === 0 || Object(lodash__WEBPACK_IMPORTED_MODULE_5__["includes"])(MEANINGFUL_ATTRIBUTES, key); 4500 }); 4501 } 4502 /** 4503 * Returns true if two text tokens (with `chars` property) are equivalent, or 4504 * false otherwise. 4505 * 4506 * @param {Object} actual Actual token. 4507 * @param {Object} expected Expected token. 4508 * 4509 * @return {boolean} Whether two text tokens are equivalent. 4510 */ 4511 4512 function isEqualTextTokensWithCollapsedWhitespace(actual, expected) { 4513 // This is an overly simplified whitespace comparison. The specification is 4514 // more prescriptive of whitespace behavior in inline and block contexts. 4515 // 4516 // See: https://medium.com/@patrickbrosset/when-does-white-space-matter-in-html-b90e8a7cdd33 4517 var isEquivalentText = lodash__WEBPACK_IMPORTED_MODULE_5__["isEqual"].apply(void 0, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])([actual.chars, expected.chars].map(getTextWithCollapsedWhitespace))); 4518 4519 if (!isEquivalentText) { 4520 log.warning('Expected text `%s`, saw `%s`.', expected.chars, actual.chars); 4521 } 4522 4523 return isEquivalentText; 4524 } 4525 /** 4526 * Given a style value, returns a normalized style value for strict equality 4527 * comparison. 4528 * 4529 * @param {string} value Style value. 4530 * 4531 * @return {string} Normalized style value. 4532 */ 4533 4534 function getNormalizedStyleValue(value) { 4535 return value // Normalize URL type to omit whitespace or quotes 4536 .replace(REGEXP_STYLE_URL_TYPE, 'url($1)'); 4537 } 4538 /** 4539 * Given a style attribute string, returns an object of style properties. 4540 * 4541 * @param {string} text Style attribute. 4542 * 4543 * @return {Object} Style properties. 4544 */ 4545 4546 function getStyleProperties(text) { 4547 var pairs = text // Trim ending semicolon (avoid including in split) 4548 .replace(/;?\s*$/, '') // Split on property assignment 4549 .split(';') // For each property assignment... 4550 .map(function (style) { 4551 // ...split further into key-value pairs 4552 var _style$split = style.split(':'), 4553 _style$split2 = Object(_babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_style$split), 4554 key = _style$split2[0], 4555 valueParts = _style$split2.slice(1); 4556 4557 var value = valueParts.join(':'); 4558 return [key.trim(), getNormalizedStyleValue(value.trim())]; 4559 }); 4560 return Object(lodash__WEBPACK_IMPORTED_MODULE_5__["fromPairs"])(pairs); 4561 } 4562 /** 4563 * Attribute-specific equality handlers 4564 * 4565 * @type {Object} 4566 */ 4567 4568 var isEqualAttributesOfName = Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({ 4569 class: function _class(actual, expected) { 4570 // Class matches if members are the same, even if out of order or 4571 // superfluous whitespace between. 4572 return !lodash__WEBPACK_IMPORTED_MODULE_5__["xor"].apply(void 0, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])([actual, expected].map(getTextPiecesSplitOnWhitespace))).length; 4573 }, 4574 style: function style(actual, expected) { 4575 return lodash__WEBPACK_IMPORTED_MODULE_5__["isEqual"].apply(void 0, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])([actual, expected].map(getStyleProperties))); 4576 } 4577 }, Object(lodash__WEBPACK_IMPORTED_MODULE_5__["fromPairs"])(BOOLEAN_ATTRIBUTES.map(function (attribute) { 4578 return [attribute, lodash__WEBPACK_IMPORTED_MODULE_5__["stubTrue"]]; 4579 }))); 4580 /** 4581 * Given two sets of attribute tuples, returns true if the attribute sets are 4582 * equivalent. 4583 * 4584 * @param {Array[]} actual Actual attributes tuples. 4585 * @param {Array[]} expected Expected attributes tuples. 4586 * 4587 * @return {boolean} Whether attributes are equivalent. 4588 */ 4589 4590 function isEqualTagAttributePairs(actual, expected) { 4591 // Attributes is tokenized as tuples. Their lengths should match. This also 4592 // avoids us needing to check both attributes sets, since if A has any keys 4593 // which do not exist in B, we know the sets to be different. 4594 if (actual.length !== expected.length) { 4595 log.warning('Expected attributes %o, instead saw %o.', expected, actual); 4596 return false; 4597 } // Convert tuples to object for ease of lookup 4598 4599 4600 var _map = [actual, expected].map(lodash__WEBPACK_IMPORTED_MODULE_5__["fromPairs"]), 4601 _map2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_map, 2), 4602 actualAttributes = _map2[0], 4603 expectedAttributes = _map2[1]; 4604 4605 for (var name in actualAttributes) { 4606 // As noted above, if missing member in B, assume different 4607 if (!expectedAttributes.hasOwnProperty(name)) { 4608 log.warning('Encountered unexpected attribute `%s`.', name); 4609 return false; 4610 } 4611 4612 var actualValue = actualAttributes[name]; 4613 var expectedValue = expectedAttributes[name]; 4614 var isEqualAttributes = isEqualAttributesOfName[name]; 4615 4616 if (isEqualAttributes) { 4617 // Defer custom attribute equality handling 4618 if (!isEqualAttributes(actualValue, expectedValue)) { 4619 log.warning('Expected attribute `%s` of value `%s`, saw `%s`.', name, expectedValue, actualValue); 4620 return false; 4621 } 4622 } else if (actualValue !== expectedValue) { 4623 // Otherwise strict inequality should bail 4624 log.warning('Expected attribute `%s` of value `%s`, saw `%s`.', name, expectedValue, actualValue); 4625 return false; 4626 } 4627 } 4628 4629 return true; 4630 } 4631 /** 4632 * Token-type-specific equality handlers 4633 * 4634 * @type {Object} 4635 */ 4636 4637 var isEqualTokensOfType = { 4638 StartTag: function StartTag(actual, expected) { 4639 if (actual.tagName !== expected.tagName) { 4640 log.warning('Expected tag name `%s`, instead saw `%s`.', expected.tagName, actual.tagName); 4641 return false; 4642 } 4643 4644 return isEqualTagAttributePairs.apply(void 0, Object(_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__["default"])([actual, expected].map(getMeaningfulAttributePairs))); 4645 }, 4646 Chars: isEqualTextTokensWithCollapsedWhitespace, 4647 Comment: isEqualTextTokensWithCollapsedWhitespace 4648 }; 4649 /** 4650 * Given an array of tokens, returns the first token which is not purely 4651 * whitespace. 4652 * 4653 * Mutates the tokens array. 4654 * 4655 * @param {Object[]} tokens Set of tokens to search. 4656 * 4657 * @return {Object} Next non-whitespace token. 4658 */ 4659 4660 function getNextNonWhitespaceToken(tokens) { 4661 var token; 4662 4663 while (token = tokens.shift()) { 4664 if (token.type !== 'Chars') { 4665 return token; 4666 } 4667 4668 if (!REGEXP_ONLY_WHITESPACE.test(token.chars)) { 4669 return token; 4670 } 4671 } 4672 } 4673 /** 4674 * Tokenize an HTML string, gracefully handling any errors thrown during 4675 * underlying tokenization. 4676 * 4677 * @param {string} html HTML string to tokenize. 4678 * 4679 * @return {Object[]|null} Array of valid tokenized HTML elements, or null on error 4680 */ 4681 4682 function getHTMLTokens(html) { 4683 try { 4684 return Object(simple_html_tokenizer__WEBPACK_IMPORTED_MODULE_4__["tokenize"])(html); 4685 } catch (e) { 4686 log.warning('Malformed HTML detected: %s', html); 4687 } 4688 4689 return null; 4690 } 4691 /** 4692 * Returns true if the given HTML strings are effectively equivalent, or 4693 * false otherwise. Invalid HTML is not considered equivalent, even if the 4694 * strings directly match. 4695 * 4696 * @param {string} actual Actual HTML string. 4697 * @param {string} expected Expected HTML string. 4698 * 4699 * @return {boolean} Whether HTML strings are equivalent. 4700 */ 4701 4702 4703 function isEquivalentHTML(actual, expected) { 4704 // Tokenize input content and reserialized save content 4705 var _map3 = [actual, expected].map(getHTMLTokens), 4706 _map4 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__["default"])(_map3, 2), 4707 actualTokens = _map4[0], 4708 expectedTokens = _map4[1]; // If either is malformed then stop comparing - the strings are not equivalent 4709 4710 4711 if (!actualTokens || !expectedTokens) { 4712 return false; 4713 } 4714 4715 var actualToken, expectedToken; 4716 4717 while (actualToken = getNextNonWhitespaceToken(actualTokens)) { 4718 expectedToken = getNextNonWhitespaceToken(expectedTokens); // Inequal if exhausted all expected tokens 4719 4720 if (!expectedToken) { 4721 log.warning('Expected end of content, instead saw %o.', actualToken); 4722 return false; 4723 } // Inequal if next non-whitespace token of each set are not same type 4724 4725 4726 if (actualToken.type !== expectedToken.type) { 4727 log.warning('Expected token of type `%s` (%o), instead saw `%s` (%o).', expectedToken.type, expectedToken, actualToken.type, actualToken); 4728 return false; 4729 } // Defer custom token type equality handling, otherwise continue and 4730 // assume as equal 4731 4732 4733 var isEqualTokens = isEqualTokensOfType[actualToken.type]; 4734 4735 if (isEqualTokens && !isEqualTokens(actualToken, expectedToken)) { 4736 return false; 4737 } 4738 } 4739 4740 if (expectedToken = getNextNonWhitespaceToken(expectedTokens)) { 4741 // If any non-whitespace tokens remain in expected token set, this 4742 // indicates inequality 4743 log.warning('Expected %o, instead saw end of content.', expectedToken); 4744 return false; 4745 } 4746 4747 return true; 4748 } 4749 /** 4750 * Returns true if the parsed block is valid given the input content. A block 4751 * is considered valid if, when serialized with assumed attributes, the content 4752 * matches the original value. 4753 * 4754 * Logs to console in development environments when invalid. 4755 * 4756 * @param {string} innerHTML Original block content. 4757 * @param {string} blockType Block type. 4758 * @param {Object} attributes Parsed block attributes. 4759 * 4760 * @return {boolean} Whether block is valid. 4761 */ 4762 4763 function isValidBlock(innerHTML, blockType, attributes) { 4764 var saveContent; 4765 4766 try { 4767 saveContent = Object(_serializer__WEBPACK_IMPORTED_MODULE_6__["getSaveContent"])(blockType, attributes); 4768 } catch (error) { 4769 log.error('Block validation failed because an error occurred while generating block content:\n\n%s', error.toString()); 4770 return false; 4771 } 4772 4773 var isValid = isEquivalentHTML(innerHTML, saveContent); 4774 4775 if (!isValid) { 4776 log.error('Block validation failed for `%s` (%o).\n\nExpected:\n\n%s\n\nActual:\n\n%s', blockType.name, blockType, saveContent, innerHTML); 4777 } 4778 4779 return isValid; 4780 } 4781 4782 4783 /***/ }), 4784 4785 /***/ "./node_modules/@wordpress/blocks/build-module/block-content-provider/index.js": 4786 /*!*************************************************************************************!*\ 4787 !*** ./node_modules/@wordpress/blocks/build-module/block-content-provider/index.js ***! 4788 \*************************************************************************************/ 4789 /*! exports provided: withBlockContentContext, default */ 4790 /***/ (function(module, __webpack_exports__, __webpack_require__) { 4791 4792 "use strict"; 4793 __webpack_require__.r(__webpack_exports__); 4794 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "withBlockContentContext", function() { return withBlockContentContext; }); 4795 /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); 4796 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 4797 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 4798 /* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/compose */ "@wordpress/compose"); 4799 /* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_compose__WEBPACK_IMPORTED_MODULE_2__); 4800 /* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../api */ "./node_modules/@wordpress/blocks/build-module/api/index.js"); 4801 4802 4803 4804 /** 4805 * WordPress dependencies 4806 */ 4807 4808 4809 /** 4810 * Internal dependencies 4811 */ 4812 4813 4814 4815 var _createContext = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createContext"])(function () {}), 4816 Consumer = _createContext.Consumer, 4817 Provider = _createContext.Provider; 4818 /** 4819 * An internal block component used in block content serialization to inject 4820 * nested block content within the `save` implementation of the ancestor 4821 * component in which it is nested. The component provides a pre-bound 4822 * `BlockContent` component via context, which is used by the developer-facing 4823 * `InnerBlocks.Content` component to render block content. 4824 * 4825 * @example 4826 * 4827 * ```jsx 4828 * <BlockContentProvider innerBlocks={ innerBlocks }> 4829 * { blockSaveElement } 4830 * </BlockContentProvider> 4831 * ``` 4832 * 4833 * @return {WPElement} Element with BlockContent injected via context. 4834 */ 4835 4836 4837 var BlockContentProvider = function BlockContentProvider(_ref) { 4838 var children = _ref.children, 4839 innerBlocks = _ref.innerBlocks; 4840 4841 var BlockContent = function BlockContent() { 4842 // Value is an array of blocks, so defer to block serializer 4843 var html = Object(_api__WEBPACK_IMPORTED_MODULE_3__["serialize"])(innerBlocks); // Use special-cased raw HTML tag to avoid default escaping 4844 4845 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["RawHTML"], null, html); 4846 }; 4847 4848 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(Provider, { 4849 value: BlockContent 4850 }, children); 4851 }; 4852 /** 4853 * A Higher Order Component used to inject BlockContent using context to the 4854 * wrapped component. 4855 * 4856 * @return {Component} Enhanced component with injected BlockContent as prop. 4857 */ 4858 4859 4860 var withBlockContentContext = Object(_wordpress_compose__WEBPACK_IMPORTED_MODULE_2__["createHigherOrderComponent"])(function (OriginalComponent) { 4861 return function (props) { 4862 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(Consumer, null, function (context) { 4863 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(OriginalComponent, Object(_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { 4864 BlockContent: context 4865 })); 4866 }); 4867 }; 4868 }, 'withBlockContentContext'); 4869 /* harmony default export */ __webpack_exports__["default"] = (BlockContentProvider); 4870 4871 4872 /***/ }), 4873 4874 /***/ "./node_modules/@wordpress/blocks/build-module/index.js": 4875 /*!**************************************************************!*\ 4876 !*** ./node_modules/@wordpress/blocks/build-module/index.js ***! 4877 \**************************************************************/ 4878 /*! exports provided: withBlockContentContext, createBlock, cloneBlock, getPossibleBlockTransformations, switchToBlockType, getBlockTransforms, findTransform, parse, getBlockAttributes, parseWithAttributeSchema, rawHandler, getPhrasingContentSchema, serialize, getBlockContent, getBlockDefaultClassName, getBlockMenuDefaultClassName, getSaveElement, getSaveContent, isValidBlock, getCategories, setCategories, registerBlockType, unregisterBlockType, setUnknownTypeHandlerName, getUnknownTypeHandlerName, setFreeformContentHandlerName, getFreeformContentHandlerName, setUnregisteredTypeHandlerName, getUnregisteredTypeHandlerName, setDefaultBlockName, getDefaultBlockName, getBlockType, getBlockTypes, getBlockSupport, hasBlockSupport, isReusableBlock, getChildBlockNames, hasChildBlocks, hasChildBlocksWithInserterSupport, unstable__bootstrapServerSideBlockDefinitions, registerBlockStyle, isUnmodifiedDefaultBlock, normalizeIconObject, isValidIcon, doBlocksMatchTemplate, synchronizeBlocksWithTemplate, children, node */ 4879 /***/ (function(module, __webpack_exports__, __webpack_require__) { 4880 4881 "use strict"; 4882 __webpack_require__.r(__webpack_exports__); 4883 /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./store */ "./node_modules/@wordpress/blocks/build-module/store/index.js"); 4884 /* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./api */ "./node_modules/@wordpress/blocks/build-module/api/index.js"); 4885 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["createBlock"]; }); 4886 4887 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cloneBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["cloneBlock"]; }); 4888 4889 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPossibleBlockTransformations", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getPossibleBlockTransformations"]; }); 4890 4891 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchToBlockType", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["switchToBlockType"]; }); 4892 4893 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockTransforms", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockTransforms"]; }); 4894 4895 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findTransform", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["findTransform"]; }); 4896 4897 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["parse"]; }); 4898 4899 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockAttributes", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockAttributes"]; }); 4900 4901 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseWithAttributeSchema", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["parseWithAttributeSchema"]; }); 4902 4903 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rawHandler", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["rawHandler"]; }); 4904 4905 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPhrasingContentSchema", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getPhrasingContentSchema"]; }); 4906 4907 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "serialize", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["serialize"]; }); 4908 4909 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockContent", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockContent"]; }); 4910 4911 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockDefaultClassName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockDefaultClassName"]; }); 4912 4913 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockMenuDefaultClassName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockMenuDefaultClassName"]; }); 4914 4915 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSaveElement", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getSaveElement"]; }); 4916 4917 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSaveContent", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getSaveContent"]; }); 4918 4919 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["isValidBlock"]; }); 4920 4921 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getCategories"]; }); 4922 4923 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setCategories", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setCategories"]; }); 4924 4925 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerBlockType", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["registerBlockType"]; }); 4926 4927 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unregisterBlockType", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["unregisterBlockType"]; }); 4928 4929 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setUnknownTypeHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setUnknownTypeHandlerName"]; }); 4930 4931 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnknownTypeHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getUnknownTypeHandlerName"]; }); 4932 4933 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setFreeformContentHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setFreeformContentHandlerName"]; }); 4934 4935 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getFreeformContentHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getFreeformContentHandlerName"]; }); 4936 4937 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setUnregisteredTypeHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setUnregisteredTypeHandlerName"]; }); 4938 4939 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnregisteredTypeHandlerName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getUnregisteredTypeHandlerName"]; }); 4940 4941 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setDefaultBlockName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["setDefaultBlockName"]; }); 4942 4943 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultBlockName", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getDefaultBlockName"]; }); 4944 4945 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockType", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockType"]; }); 4946 4947 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockTypes", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockTypes"]; }); 4948 4949 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBlockSupport", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getBlockSupport"]; }); 4950 4951 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasBlockSupport", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["hasBlockSupport"]; }); 4952 4953 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isReusableBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["isReusableBlock"]; }); 4954 4955 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getChildBlockNames", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["getChildBlockNames"]; }); 4956 4957 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocks", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["hasChildBlocks"]; }); 4958 4959 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocksWithInserterSupport", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["hasChildBlocksWithInserterSupport"]; }); 4960 4961 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unstable__bootstrapServerSideBlockDefinitions", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["unstable__bootstrapServerSideBlockDefinitions"]; }); 4962 4963 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerBlockStyle", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["registerBlockStyle"]; }); 4964 4965 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isUnmodifiedDefaultBlock", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["isUnmodifiedDefaultBlock"]; }); 4966 4967 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "normalizeIconObject", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["normalizeIconObject"]; }); 4968 4969 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidIcon", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["isValidIcon"]; }); 4970 4971 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "doBlocksMatchTemplate", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["doBlocksMatchTemplate"]; }); 4972 4973 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "synchronizeBlocksWithTemplate", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["synchronizeBlocksWithTemplate"]; }); 4974 4975 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "children", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["children"]; }); 4976 4977 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "node", function() { return _api__WEBPACK_IMPORTED_MODULE_1__["node"]; }); 4978 4979 /* harmony import */ var _block_content_provider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./block-content-provider */ "./node_modules/@wordpress/blocks/build-module/block-content-provider/index.js"); 4980 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "withBlockContentContext", function() { return _block_content_provider__WEBPACK_IMPORTED_MODULE_2__["withBlockContentContext"]; }); 4981 4982 // A "block" is the abstract term used to describe units of markup that, 4983 // when composed together, form the content or layout of a page. 4984 // The API for blocks is exposed via `wp.blocks`. 4985 // 4986 // Supported blocks are registered by calling `registerBlockType`. Once registered, 4987 // the block is made available as an option to the editor interface. 4988 // 4989 // Blocks are inferred from the HTML source of a post through a parsing mechanism 4990 // and then stored as objects in state, from which it is then rendered for editing. 4991 4992 4993 4994 4995 4996 /***/ }), 4997 4998 /***/ "./node_modules/@wordpress/blocks/build-module/store/actions.js": 4999 /*!**********************************************************************!*\ 5000 !*** ./node_modules/@wordpress/blocks/build-module/store/actions.js ***! 5001 \**********************************************************************/ 5002 /*! exports provided: addBlockTypes, removeBlockTypes, setDefaultBlockName, setFallbackBlockName, setFreeformFallbackBlockName, setUnregisteredFallbackBlockName, setCategories */ 5003 /***/ (function(module, __webpack_exports__, __webpack_require__) { 5004 5005 "use strict"; 5006 __webpack_require__.r(__webpack_exports__); 5007 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addBlockTypes", function() { return addBlockTypes; }); 5008 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeBlockTypes", function() { return removeBlockTypes; }); 5009 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDefaultBlockName", function() { return setDefaultBlockName; }); 5010 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFallbackBlockName", function() { return setFallbackBlockName; }); 5011 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFreeformFallbackBlockName", function() { return setFreeformFallbackBlockName; }); 5012 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUnregisteredFallbackBlockName", function() { return setUnregisteredFallbackBlockName; }); 5013 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCategories", function() { return setCategories; }); 5014 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash"); 5015 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); 5016 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated"); 5017 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_1__); 5018 /** 5019 * External dependencies 5020 */ 5021 5022 /** 5023 * WordPress dependencies 5024 */ 5025 5026 5027 /** 5028 * Returns an action object used in signalling that block types have been added. 5029 * 5030 * @param {Array|Object} blockTypes Block types received. 5031 * 5032 * @return {Object} Action object. 5033 */ 5034 5035 function addBlockTypes(blockTypes) { 5036 return { 5037 type: 'ADD_BLOCK_TYPES', 5038 blockTypes: Object(lodash__WEBPACK_IMPORTED_MODULE_0__["castArray"])(blockTypes) 5039 }; 5040 } 5041 /** 5042 * Returns an action object used to remove a registered block type. 5043 * 5044 * @param {string|Array} names Block name. 5045 * 5046 * @return {Object} Action object. 5047 */ 5048 5049 function removeBlockTypes(names) { 5050 return { 5051 type: 'REMOVE_BLOCK_TYPES', 5052 names: Object(lodash__WEBPACK_IMPORTED_MODULE_0__["castArray"])(names) 5053 }; 5054 } 5055 /** 5056 * Returns an action object used to set the default block name. 5057 * 5058 * @param {string} name Block name. 5059 * 5060 * @return {Object} Action object. 5061 */ 5062 5063 function setDefaultBlockName(name) { 5064 return { 5065 type: 'SET_DEFAULT_BLOCK_NAME', 5066 name: name 5067 }; 5068 } 5069 /** 5070 * Returns an action object used to set the name of the block used as a fallback 5071 * for non-block content. 5072 * 5073 * @param {string} name Block name. 5074 * 5075 * @return {Object} Action object. 5076 */ 5077 5078 function setFallbackBlockName(name) { 5079 _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_1___default()('setFallbackBlockName', { 5080 plugin: 'Gutenberg', 5081 version: '4.2', 5082 alternative: 'setFreeformFallbackBlockName and setUnregisteredFallbackBlockName' 5083 }); 5084 return setFreeformFallbackBlockName(name); 5085 } 5086 /** 5087 * Returns an action object used to set the name of the block used as a fallback 5088 * for non-block content. 5089 * 5090 * @param {string} name Block name. 5091 * 5092 * @return {Object} Action object. 5093 */ 5094 5095 function setFreeformFallbackBlockName(name) { 5096 return { 5097 type: 'SET_FREEFORM_FALLBACK_BLOCK_NAME', 5098 name: name 5099 }; 5100 } 5101 /** 5102 * Returns an action object used to set the name of the block used as a fallback 5103 * for unregistered blocks. 5104 * 5105 * @param {string} name Block name. 5106 * 5107 * @return {Object} Action object. 5108 */ 5109 5110 function setUnregisteredFallbackBlockName(name) { 5111 return { 5112 type: 'SET_UNREGISTERED_FALLBACK_BLOCK_NAME', 5113 name: name 5114 }; 5115 } 5116 /** 5117 * Returns an action object used to set block categories. 5118 * 5119 * @param {Object[]} categories Block categories. 5120 * 5121 * @return {Object} Action object. 5122 */ 5123 5124 function setCategories(categories) { 5125 return { 5126 type: 'SET_CATEGORIES', 5127 categories: categories 5128 }; 5129 } 5130 5131 5132 /***/ }), 5133 5134 /***/ "./node_modules/@wordpress/blocks/build-module/store/index.js": 5135 /*!********************************************************************!*\ 5136 !*** ./node_modules/@wordpress/blocks/build-module/store/index.js ***! 5137 \********************************************************************/ 5138 /*! no exports provided */ 5139 /***/ (function(module, __webpack_exports__, __webpack_require__) { 5140 5141 "use strict"; 5142 __webpack_require__.r(__webpack_exports__); 5143 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 5144 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); 5145 /* harmony import */ var _reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reducer */ "./node_modules/@wordpress/blocks/build-module/store/reducer.js"); 5146 /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectors */ "./node_modules/@wordpress/blocks/build-module/store/selectors.js"); 5147 /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ "./node_modules/@wordpress/blocks/build-module/store/actions.js"); 5148 /** 5149 * WordPress dependencies 5150 */ 5151 5152 /** 5153 * Internal dependencies 5154 */ 5155 5156 5157 5158 5159 Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__["registerStore"])('core/blocks', { 5160 reducer: _reducer__WEBPACK_IMPORTED_MODULE_1__["default"], 5161 selectors: _selectors__WEBPACK_IMPORTED_MODULE_2__, 5162 actions: _actions__WEBPACK_IMPORTED_MODULE_3__ 5163 }); 5164 5165 5166 /***/ }), 5167 5168 /***/ "./node_modules/@wordpress/blocks/build-module/store/reducer.js": 5169 /*!**********************************************************************!*\ 5170 !*** ./node_modules/@wordpress/blocks/build-module/store/reducer.js ***! 5171 \**********************************************************************/ 5172 /*! exports provided: DEFAULT_CATEGORIES, blockTypes, createBlockNameSetterReducer, defaultBlockName, freeformFallbackBlockName, unregisteredFallbackBlockName, categories, default */ 5173 /***/ (function(module, __webpack_exports__, __webpack_require__) { 5174 5175 "use strict"; 5176 __webpack_require__.r(__webpack_exports__); 5177 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_CATEGORIES", function() { return DEFAULT_CATEGORIES; }); 5178 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blockTypes", function() { return blockTypes; }); 5179 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createBlockNameSetterReducer", function() { return createBlockNameSetterReducer; }); 5180 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultBlockName", function() { return defaultBlockName; }); 5181 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freeformFallbackBlockName", function() { return freeformFallbackBlockName; }); 5182 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unregisteredFallbackBlockName", function() { return unregisteredFallbackBlockName; }); 5183 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "categories", function() { return categories; }); 5184 /* harmony import */ var _babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread */ "./node_modules/@babel/runtime/helpers/esm/objectSpread.js"); 5185 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash"); 5186 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); 5187 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 5188 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); 5189 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 5190 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); 5191 5192 5193 /** 5194 * External dependencies 5195 */ 5196 5197 /** 5198 * WordPress dependencies 5199 */ 5200 5201 5202 5203 /** 5204 * Module Constants 5205 */ 5206 5207 var DEFAULT_CATEGORIES = [{ 5208 slug: 'common', 5209 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Common Blocks') 5210 }, { 5211 slug: 'formatting', 5212 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Formatting') 5213 }, { 5214 slug: 'layout', 5215 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Layout Elements') 5216 }, { 5217 slug: 'widgets', 5218 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Widgets') 5219 }, { 5220 slug: 'embed', 5221 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Embeds') 5222 }, { 5223 slug: 'reusable', 5224 title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Reusable Blocks') 5225 }]; 5226 /** 5227 * Reducer managing the block types 5228 * 5229 * @param {Object} state Current state. 5230 * @param {Object} action Dispatched action. 5231 * 5232 * @return {Object} Updated state. 5233 */ 5234 5235 function blockTypes() { 5236 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 5237 var action = arguments.length > 1 ? arguments[1] : undefined; 5238 5239 switch (action.type) { 5240 case 'ADD_BLOCK_TYPES': 5241 return Object(_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__["default"])({}, state, Object(lodash__WEBPACK_IMPORTED_MODULE_1__["keyBy"])(action.blockTypes, 'name')); 5242 5243 case 'REMOVE_BLOCK_TYPES': 5244 return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["omit"])(state, action.names); 5245 } 5246 5247 return state; 5248 } 5249 /** 5250 * Higher-order Reducer creating a reducer keeping track of given block name. 5251 * 5252 * @param {string} setActionType Action type. 5253 * 5254 * @return {function} Reducer. 5255 */ 5256 5257 function createBlockNameSetterReducer(setActionType) { 5258 return function () { 5259 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 5260 var action = arguments.length > 1 ? arguments[1] : undefined; 5261 5262 switch (action.type) { 5263 case 'REMOVE_BLOCK_TYPES': 5264 if (action.names.indexOf(state) !== -1) { 5265 return null; 5266 } 5267 5268 return state; 5269 5270 case setActionType: 5271 return action.name || null; 5272 } 5273 5274 return state; 5275 }; 5276 } 5277 var defaultBlockName = createBlockNameSetterReducer('SET_DEFAULT_BLOCK_NAME'); 5278 var freeformFallbackBlockName = createBlockNameSetterReducer('SET_FREEFORM_FALLBACK_BLOCK_NAME'); 5279 var unregisteredFallbackBlockName = createBlockNameSetterReducer('SET_UNREGISTERED_FALLBACK_BLOCK_NAME'); 5280 /** 5281 * Reducer managing the categories 5282 * 5283 * @param {Object} state Current state. 5284 * @param {Object} action Dispatched action. 5285 * 5286 * @return {Object} Updated state. 5287 */ 5288 5289 function categories() { 5290 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_CATEGORIES; 5291 var action = arguments.length > 1 ? arguments[1] : undefined; 5292 5293 if (action.type === 'SET_CATEGORIES') { 5294 return action.categories || []; 5295 } 5296 5297 return state; 5298 } 5299 /* harmony default export */ __webpack_exports__["default"] = (Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["combineReducers"])({ 5300 blockTypes: blockTypes, 5301 defaultBlockName: defaultBlockName, 5302 freeformFallbackBlockName: freeformFallbackBlockName, 5303 unregisteredFallbackBlockName: unregisteredFallbackBlockName, 5304 categories: categories 5305 })); 5306 5307 5308 /***/ }), 5309 5310 /***/ "./node_modules/@wordpress/blocks/build-module/store/selectors.js": 5311 /*!************************************************************************!*\ 5312 !*** ./node_modules/@wordpress/blocks/build-module/store/selectors.js ***! 5313 \************************************************************************/ 5314 /*! exports provided: getBlockTypes, getBlockType, getCategories, getDefaultBlockName, getFallbackBlockName, getFreeformFallbackBlockName, getUnregisteredFallbackBlockName, getChildBlockNames, getBlockSupport, hasBlockSupport, hasChildBlocks, hasChildBlocksWithInserterSupport */ 5315 /***/ (function(module, __webpack_exports__, __webpack_require__) { 5316 5317 "use strict"; 5318 __webpack_require__.r(__webpack_exports__); 5319 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockTypes", function() { return getBlockTypes; }); 5320 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockType", function() { return getBlockType; }); 5321 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return getCategories; }); 5322 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDefaultBlockName", function() { return getDefaultBlockName; }); 5323 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFallbackBlockName", function() { return getFallbackBlockName; }); 5324 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFreeformFallbackBlockName", function() { return getFreeformFallbackBlockName; }); 5325 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUnregisteredFallbackBlockName", function() { return getUnregisteredFallbackBlockName; }); 5326 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getChildBlockNames", function() { return getChildBlockNames; }); 5327 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBlockSupport", function() { return getBlockSupport; }); 5328 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasBlockSupport", function() { return hasBlockSupport; }); 5329 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocks", function() { return hasChildBlocks; }); 5330 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasChildBlocksWithInserterSupport", function() { return hasChildBlocksWithInserterSupport; }); 5331 /* harmony import */ var rememo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rememo */ "./node_modules/rememo/es/rememo.js"); 5332 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash"); 5333 /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); 5334 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated"); 5335 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_2__); 5336 /** 5337 * External dependencies 5338 */ 5339 5340 5341 /** 5342 * WordPress dependencies 5343 */ 5344 5345 5346 /** 5347 * Returns all the available block types. 5348 * 5349 * @param {Object} state Data state. 5350 * 5351 * @return {Array} Block Types. 5352 */ 5353 5354 var getBlockTypes = Object(rememo__WEBPACK_IMPORTED_MODULE_0__["default"])(function (state) { 5355 return Object.values(state.blockTypes); 5356 }, function (state) { 5357 return [state.blockTypes]; 5358 }); 5359 /** 5360 * Returns a block type by name. 5361 * 5362 * @param {Object} state Data state. 5363 * @param {string} name Block type name. 5364 * 5365 * @return {Object?} Block Type. 5366 */ 5367 5368 function getBlockType(state, name) { 5369 return state.blockTypes[name]; 5370 } 5371 /** 5372 * Returns all the available categories. 5373 * 5374 * @param {Object} state Data state. 5375 * 5376 * @return {Array} Categories list. 5377 */ 5378 5379 function getCategories(state) { 5380 return state.categories; 5381 } 5382 /** 5383 * Returns the name of the default block name. 5384 * 5385 * @param {Object} state Data state. 5386 * 5387 * @return {string?} Default block name. 5388 */ 5389 5390 function getDefaultBlockName(state) { 5391 return state.defaultBlockName; 5392 } 5393 /** 5394 * Returns the name of the fallback block name. 5395 * 5396 * @param {Object} state Data state. 5397 * 5398 * @return {string?} Fallback block name. 5399 */ 5400 5401 function getFallbackBlockName(state) { 5402 _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_2___default()('getFallbackBlockName', { 5403 plugin: 'Gutenberg', 5404 version: '4.2', 5405 alternative: 'getFreeformFallbackBlockName and getUnregisteredFallbackBlockName' 5406 }); 5407 return getFreeformFallbackBlockName(state); 5408 } 5409 /** 5410 * Returns the name of the block for handling non-block content. 5411 * 5412 * @param {Object} state Data state. 5413 * 5414 * @return {string?} Name of the block for handling non-block content. 5415 */ 5416 5417 function getFreeformFallbackBlockName(state) { 5418 return state.freeformFallbackBlockName; 5419 } 5420 /** 5421 * Returns the name of the block for handling unregistered blocks. 5422 * 5423 * @param {Object} state Data state. 5424 * 5425 * @return {string?} Name of the block for handling unregistered blocks. 5426 */ 5427 5428 function getUnregisteredFallbackBlockName(state) { 5429 return state.unregisteredFallbackBlockName; 5430 } 5431 /** 5432 * Returns an array with the child blocks of a given block. 5433 * 5434 * @param {Object} state Data state. 5435 * @param {string} blockName Block type name. 5436 * 5437 * @return {Array} Array of child block names. 5438 */ 5439 5440 var getChildBlockNames = Object(rememo__WEBPACK_IMPORTED_MODULE_0__["default"])(function (state, blockName) { 5441 return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["map"])(Object(lodash__WEBPACK_IMPORTED_MODULE_1__["filter"])(state.blockTypes, function (blockType) { 5442 return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["includes"])(blockType.parent, blockName); 5443 }), function (_ref) { 5444 var name = _ref.name; 5445 return name; 5446 }); 5447 }, function (state) { 5448 return [state.blockTypes]; 5449 }); 5450 /** 5451 * Returns the block support value for a feature, if defined. 5452 * 5453 * @param {Object} state Data state. 5454 * @param {(string|Object)} nameOrType Block name or type object 5455 * @param {string} feature Feature to retrieve 5456 * @param {*} defaultSupports Default value to return if not 5457 * explicitly defined 5458 * 5459 * @return {?*} Block support value 5460 */ 5461 5462 var getBlockSupport = function getBlockSupport(state, nameOrType, feature, defaultSupports) { 5463 var blockType = 'string' === typeof nameOrType ? getBlockType(state, nameOrType) : nameOrType; 5464 return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["get"])(blockType, ['supports', feature], defaultSupports); 5465 }; 5466 /** 5467 * Returns true if the block defines support for a feature, or false otherwise. 5468 * 5469 * @param {Object} state Data state. 5470 * @param {(string|Object)} nameOrType Block name or type object. 5471 * @param {string} feature Feature to test. 5472 * @param {boolean} defaultSupports Whether feature is supported by 5473 * default if not explicitly defined. 5474 * 5475 * @return {boolean} Whether block supports feature. 5476 */ 5477 5478 function hasBlockSupport(state, nameOrType, feature, defaultSupports) { 5479 return !!getBlockSupport(state, nameOrType, feature, defaultSupports); 5480 } 5481 /** 5482 * Returns a boolean indicating if a block has child blocks or not. 5483 * 5484 * @param {Object} state Data state. 5485 * @param {string} blockName Block type name. 5486 * 5487 * @return {boolean} True if a block contains child blocks and false otherwise. 5488 */ 5489 5490 var hasChildBlocks = function hasChildBlocks(state, blockName) { 5491 return getChildBlockNames(state, blockName).length > 0; 5492 }; 5493 /** 5494 * Returns a boolean indicating if a block has at least one child block with inserter support. 5495 * 5496 * @param {Object} state Data state. 5497 * @param {string} blockName Block type name. 5498 * 5499 * @return {boolean} True if a block contains at least one child blocks with inserter support 5500 * and false otherwise. 5501 */ 5502 5503 var hasChildBlocksWithInserterSupport = function hasChildBlocksWithInserterSupport(state, blockName) { 5504 return Object(lodash__WEBPACK_IMPORTED_MODULE_1__["some"])(getChildBlockNames(state, blockName), function (childBlockName) { 5505 return hasBlockSupport(state, childBlockName, 'inserter', true); 5506 }); 5507 }; 5508 5509 5510 /***/ }), 5511 5512 /***/ "./node_modules/hpq/es/get-path.js": 5513 /*!*****************************************!*\ 5514 !*** ./node_modules/hpq/es/get-path.js ***! 5515 \*****************************************/ 5516 /*! exports provided: default */ 5517 /***/ (function(module, __webpack_exports__, __webpack_require__) { 5518 5519 "use strict"; 5520 __webpack_require__.r(__webpack_exports__); 5521 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getPath; }); 5522 /** 5523 * Given object and string of dot-delimited path segments, returns value at 5524 * path or undefined if path cannot be resolved. 5525 * 5526 * @param {Object} object Lookup object 5527 * @param {string} path Path to resolve 5528 * @return {?*} Resolved value 5529 */ 5530 function getPath(object, path) { 5531 var segments = path.split('.'); 5532 var segment; 5533 5534 while (segment = segments.shift()) { 5535 if (!(segment in object)) { 5536 return; 5537 } 5538 5539 object = object[segment]; 5540 } 5541 5542 return object; 5543 } 5544 5545 /***/ }), 5546 5547 /***/ "./node_modules/hpq/es/index.js": 5548 /*!**************************************!*\ 5549 !*** ./node_modules/hpq/es/index.js ***! 5550 \**************************************/ 5551 /*! exports provided: parse, prop, attr, html, text, query */ 5552 /***/ (function(module, __webpack_exports__, __webpack_require__) { 5553 5554 "use strict"; 5555 __webpack_require__.r(__webpack_exports__); 5556 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return parse; }); 5557 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prop", function() { return prop; }); 5558 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "attr", function() { return attr; }); 5559 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "html", function() { return html; }); 5560 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; }); 5561 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "query", function() { return query; }); 5562 /* harmony import */ var _get_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./get-path */ "./node_modules/hpq/es/get-path.js"); 5563 /** 5564 * Internal dependencies 5565 */ 5566 5567 /** 5568 * Function returning a DOM document created by `createHTMLDocument`. The same 5569 * document is returned between invocations. 5570 * 5571 * @return {Document} DOM document. 5572 */ 5573 5574 var getDocument = function () { 5575 var doc; 5576 return function () { 5577 if (!doc) { 5578 doc = document.implementation.createHTMLDocument(''); 5579 } 5580 5581 return doc; 5582 }; 5583 }(); 5584 /** 5585 * Given a markup string or DOM element, creates an object aligning with the 5586 * shape of the matchers object, or the value returned by the matcher. 5587 * 5588 * @param {(string|Element)} source Source content 5589 * @param {(Object|Function)} matchers Matcher function or object of matchers 5590 * @return {(Object|*)} Matched value(s), shaped by object 5591 */ 5592 5593 5594 function parse(source, matchers) { 5595 if (!matchers) { 5596 return; 5597 } // Coerce to element 5598 5599 5600 if ('string' === typeof source) { 5601 var doc = getDocument(); 5602 doc.body.innerHTML = source; 5603 source = doc.body; 5604 } // Return singular value 5605 5606 5607 if ('function' === typeof matchers) { 5608 return matchers(source); 5609 } // Bail if we can't handle matchers 5610 5611 5612 if (Object !== matchers.constructor) { 5613 return; 5614 } // Shape result by matcher object 5615 5616 5617 return Object.keys(matchers).reduce(function (memo, key) { 5618 memo[key] = parse(source, matchers[key]); 5619 return memo; 5620 }, {}); 5621 } 5622 /** 5623 * Generates a function which matches node of type selector, returning an 5624 * attribute by property if the attribute exists. If no selector is passed, 5625 * returns property of the query element. 5626 * 5627 * @param {?string} selector Optional selector 5628 * @param {string} name Property name 5629 * @return {*} Property value 5630 */ 5631 5632 function prop(selector, name) { 5633 if (1 === arguments.length) { 5634 name = selector; 5635 selector = undefined; 5636 } 5637 5638 return function (node) { 5639 var match = node; 5640 5641 if (selector) { 5642 match = node.querySelector(selector); 5643 } 5644 5645 if (match) { 5646 return Object(_get_path__WEBPACK_IMPORTED_MODULE_0__["default"])(match, name); 5647 } 5648 }; 5649 } 5650 /** 5651 * Generates a function which matches node of type selector, returning an 5652 * attribute by name if the attribute exists. If no selector is passed, 5653 * returns attribute of the query element. 5654 * 5655 * @param {?string} selector Optional selector 5656 * @param {string} name Attribute name 5657 * @return {?string} Attribute value 5658 */ 5659 5660 function attr(selector, name) { 5661 if (1 === arguments.length) { 5662 name = selector; 5663 selector = undefined; 5664 } 5665 5666 return function (node) { 5667 var attributes = prop(selector, 'attributes')(node); 5668 5669 if (attributes && attributes.hasOwnProperty(name)) { 5670 return attributes[name].value; 5671 } 5672 }; 5673 } 5674 /** 5675 * Convenience for `prop( selector, 'innerHTML' )`. 5676 * 5677 * @see prop() 5678 * 5679 * @param {?string} selector Optional selector 5680 * @return {string} Inner HTML 5681 */ 5682 5683 function html(selector) { 5684 return prop(selector, 'innerHTML'); 5685 } 5686 /** 5687 * Convenience for `prop( selector, 'textContent' )`. 5688 * 5689 * @see prop() 5690 * 5691 * @param {?string} selector Optional selector 5692 * @return {string} Text content 5693 */ 5694 5695 function text(selector) { 5696 return prop(selector, 'textContent'); 5697 } 5698 /** 5699 * Creates a new matching context by first finding elements matching selector 5700 * using querySelectorAll before then running another `parse` on `matchers` 5701 * scoped to the matched elements. 5702 * 5703 * @see parse() 5704 * 5705 * @param {string} selector Selector to match 5706 * @param {(Object|Function)} matchers Matcher function or object of matchers 5707 * @return {Array.<*,Object>} Array of matched value(s) 5708 */ 5709 5710 function query(selector, matchers) { 5711 return function (node) { 5712 var matches = node.querySelectorAll(selector); 5713 return [].map.call(matches, function (match) { 5714 return parse(match, matchers); 5715 }); 5716 }; 5717 } 5718 5719 /***/ }), 5720 5721 /***/ "./node_modules/rememo/es/rememo.js": 5722 /*!******************************************!*\ 5723 !*** ./node_modules/rememo/es/rememo.js ***! 5724 \******************************************/ 5725 /*! exports provided: default */ 5726 /***/ (function(module, __webpack_exports__, __webpack_require__) { 5727 5728 "use strict"; 5729 __webpack_require__.r(__webpack_exports__); 5730 5731 5732 var LEAF_KEY, hasWeakMap; 5733 5734 /** 5735 * Arbitrary value used as key for referencing cache object in WeakMap tree. 5736 * 5737 * @type {Object} 5738 */ 5739 LEAF_KEY = {}; 5740 5741 /** 5742 * Whether environment supports WeakMap. 5743 * 5744 * @type {boolean} 5745 */ 5746 hasWeakMap = typeof WeakMap !== 'undefined'; 5747 5748 /** 5749 * Returns the first argument as the sole entry in an array. 5750 * 5751 * @param {*} value Value to return. 5752 * 5753 * @return {Array} Value returned as entry in array. 5754 */ 5755 function arrayOf( value ) { 5756 return [ value ]; 5757 } 5758 5759 /** 5760 * Returns true if the value passed is object-like, or false otherwise. A value 5761 * is object-like if it can support property assignment, e.g. object or array. 5762 * 5763 * @param {*} value Value to test. 5764 * 5765 * @return {boolean} Whether value is object-like. 5766 */ 5767 function isObjectLike( value ) { 5768 return !! value && 'object' === typeof value; 5769 } 5770 5771 /** 5772 * Creates and returns a new cache object. 5773 * 5774 * @return {Object} Cache object. 5775 */ 5776 function createCache() { 5777 var cache = { 5778 clear: function() { 5779 cache.head = null; 5780 }, 5781 }; 5782 5783 return cache; 5784 } 5785 5786 /** 5787 * Returns true if entries within the two arrays are strictly equal by 5788 * reference from a starting index. 5789 * 5790 * @param {Array} a First array. 5791 * @param {Array} b Second array. 5792 * @param {number} fromIndex Index from which to start comparison. 5793 * 5794 * @return {boolean} Whether arrays are shallowly equal. 5795 */ 5796 function isShallowEqual( a, b, fromIndex ) { 5797 var i; 5798 5799 if ( a.length !== b.length ) { 5800 return false; 5801 } 5802 5803 for ( i = fromIndex; i < a.length; i++ ) { 5804 if ( a[ i ] !== b[ i ] ) { 5805 return false; 5806 } 5807 } 5808 5809 return true; 5810 } 5811 5812 /** 5813 * Returns a memoized selector function. The getDependants function argument is 5814 * called before the memoized selector and is expected to return an immutable 5815 * reference or array of references on which the selector depends for computing 5816 * its own return value. The memoize cache is preserved only as long as those 5817 * dependant references remain the same. If getDependants returns a different 5818 * reference(s), the cache is cleared and the selector value regenerated. 5819 * 5820 * @param {Function} selector Selector function. 5821 * @param {Function} getDependants Dependant getter returning an immutable 5822 * reference or array of reference used in 5823 * cache bust consideration. 5824 * 5825 * @return {Function} Memoized selector. 5826 */ 5827 /* harmony default export */ __webpack_exports__["default"] = (function( selector, getDependants ) { 5828 var rootCache, getCache; 5829 5830 // Use object source as dependant if getter not provided 5831 if ( ! getDependants ) { 5832 getDependants = arrayOf; 5833 } 5834 5835 /** 5836 * Returns the root cache. If WeakMap is supported, this is assigned to the 5837 * root WeakMap cache set, otherwise it is a shared instance of the default 5838 * cache object. 5839 * 5840 * @return {(WeakMap|Object)} Root cache object. 5841 */ 5842 function getRootCache() { 5843 return rootCache; 5844 } 5845 5846 /** 5847 * Returns the cache for a given dependants array. When possible, a WeakMap 5848 * will be used to create a unique cache for each set of dependants. This 5849 * is feasible due to the nature of WeakMap in allowing garbage collection 5850 * to occur on entries where the key object is no longer referenced. Since 5851 * WeakMap requires the key to be an object, this is only possible when the 5852 * dependant is object-like. The root cache is created as a hierarchy where 5853 * each top-level key is the first entry in a dependants set, the value a 5854 * WeakMap where each key is the next dependant, and so on. This continues 5855 * so long as the dependants are object-like. If no dependants are object- 5856 * like, then the cache is shared across all invocations. 5857 * 5858 * @see isObjectLike 5859 * 5860 * @param {Array} dependants Selector dependants. 5861 * 5862 * @return {Object} Cache object. 5863 */ 5864 function getWeakMapCache( dependants ) { 5865 var caches = rootCache, 5866 isUniqueByDependants = true, 5867 i, dependant, map, cache; 5868 5869 for ( i = 0; i < dependants.length; i++ ) { 5870 dependant = dependants[ i ]; 5871 5872 // Can only compose WeakMap from object-like key. 5873 if ( ! isObjectLike( dependant ) ) { 5874 isUniqueByDependants = false; 5875 break; 5876 } 5877 5878 // Does current segment of cache already have a WeakMap? 5879 if ( caches.has( dependant ) ) { 5880 // Traverse into nested WeakMap. 5881 caches = caches.get( dependant ); 5882 } else { 5883 // Create, set, and traverse into a new one. 5884 map = new WeakMap(); 5885 caches.set( dependant, map ); 5886 caches = map; 5887 } 5888 } 5889 5890 // We use an arbitrary (but consistent) object as key for the last item 5891 // in the WeakMap to serve as our running cache. 5892 if ( ! caches.has( LEAF_KEY ) ) { 5893 cache = createCache(); 5894 cache.isUniqueByDependants = isUniqueByDependants; 5895 caches.set( LEAF_KEY, cache ); 5896 } 5897 5898 return caches.get( LEAF_KEY ); 5899 } 5900 5901 // Assign cache handler by availability of WeakMap 5902 getCache = hasWeakMap ? getWeakMapCache : getRootCache; 5903 5904 /** 5905 * Resets root memoization cache. 5906 */ 5907 function clear() { 5908 rootCache = hasWeakMap ? new WeakMap() : createCache(); 5909 } 5910 5911 // eslint-disable-next-line jsdoc/check-param-names 5912 /** 5913 * The augmented selector call, considering first whether dependants have 5914 * changed before passing it to underlying memoize function. 5915 * 5916 * @param {Object} source Source object for derivation. 5917 * @param {...*} extraArgs Additional arguments to pass to selector. 5918 * 5919 * @return {*} Selector result. 5920 */ 5921 function callSelector( /* source, ...extraArgs */ ) { 5922 var len = arguments.length, 5923 cache, node, i, args, dependants; 5924 5925 // Create copy of arguments (avoid leaking deoptimization). 5926 args = new Array( len ); 5927 for ( i = 0; i < len; i++ ) { 5928 args[ i ] = arguments[ i ]; 5929 } 5930 5931 dependants = getDependants.apply( null, args ); 5932 cache = getCache( dependants ); 5933 5934 // If not guaranteed uniqueness by dependants (primitive type or lack 5935 // of WeakMap support), shallow compare against last dependants and, if 5936 // references have changed, destroy cache to recalculate result. 5937 if ( ! cache.isUniqueByDependants ) { 5938 if ( cache.lastDependants && ! isShallowEqual( dependants, cache.lastDependants, 0 ) ) { 5939 cache.clear(); 5940 } 5941 5942 cache.lastDependants = dependants; 5943 } 5944 5945 node = cache.head; 5946 while ( node ) { 5947 // Check whether node arguments match arguments 5948 if ( ! isShallowEqual( node.args, args, 1 ) ) { 5949 node = node.next; 5950 continue; 5951 } 5952 5953 // At this point we can assume we've found a match 5954 5955 // Surface matched node to head if not already 5956 if ( node !== cache.head ) { 5957 // Adjust siblings to point to each other. 5958 node.prev.next = node.next; 5959 if ( node.next ) { 5960 node.next.prev = node.prev; 5961 } 5962 5963 node.next = cache.head; 5964 node.prev = null; 5965 cache.head.prev = node; 5966 cache.head = node; 5967 } 5968 5969 // Return immediately 5970 return node.val; 5971 } 5972 5973 // No cached value found. Continue to insertion phase: 5974 5975 node = { 5976 // Generate the result from original function 5977 val: selector.apply( null, args ), 5978 }; 5979 5980 // Avoid including the source object in the cache. 5981 args[ 0 ] = null; 5982 node.args = args; 5983 5984 // Don't need to check whether node is already head, since it would 5985 // have been returned above already if it was 5986 5987 // Shift existing head down list 5988 if ( cache.head ) { 5989 cache.head.prev = node; 5990 node.next = cache.head; 5991 } 5992 5993 cache.head = node; 5994 5995 return node.val; 5996 } 5997 5998 callSelector.getDependants = getDependants; 5999 callSelector.clear = clear; 6000 clear(); 6001 6002 return callSelector; 6003 }); 6004 6005 6006 /***/ }), 6007 6008 /***/ "./node_modules/showdown/dist/showdown.js": 6009 /*!************************************************!*\ 6010 !*** ./node_modules/showdown/dist/showdown.js ***! 6011 \************************************************/ 6012 /*! no static exports found */ 6013 /***/ (function(module, exports, __webpack_require__) { 6014 6015 var __WEBPACK_AMD_DEFINE_RESULT__;;/*! showdown v 1.9.0 - 10-11-2018 */ 6016 (function(){ 6017 /** 6018 * Created by Tivie on 13-07-2015. 6019 */ 6020 6021 function getDefaultOpts (simple) { 6022 'use strict'; 6023 6024 var defaultOptions = { 6025 omitExtraWLInCodeBlocks: { 6026 defaultValue: false, 6027 describe: 'Omit the default extra whiteline added to code blocks', 6028 type: 'boolean' 6029 }, 6030 noHeaderId: { 6031 defaultValue: false, 6032 describe: 'Turn on/off generated header id', 6033 type: 'boolean' 6034 }, 6035 prefixHeaderId: { 6036 defaultValue: false, 6037 describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \'section-\' prefix', 6038 type: 'string' 6039 }, 6040 rawPrefixHeaderId: { 6041 defaultValue: false, 6042 describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)', 6043 type: 'boolean' 6044 }, 6045 ghCompatibleHeaderId: { 6046 defaultValue: false, 6047 describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)', 6048 type: 'boolean' 6049 }, 6050 rawHeaderId: { 6051 defaultValue: false, 6052 describe: 'Remove only spaces, \' and " from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids', 6053 type: 'boolean' 6054 }, 6055 headerLevelStart: { 6056 defaultValue: false, 6057 describe: 'The header blocks level start', 6058 type: 'integer' 6059 }, 6060 parseImgDimensions: { 6061 defaultValue: false, 6062 describe: 'Turn on/off image dimension parsing', 6063 type: 'boolean' 6064 }, 6065 simplifiedAutoLink: { 6066 defaultValue: false, 6067 describe: 'Turn on/off GFM autolink style', 6068 type: 'boolean' 6069 }, 6070 excludeTrailingPunctuationFromURLs: { 6071 defaultValue: false, 6072 describe: 'Excludes trailing punctuation from links generated with autoLinking', 6073 type: 'boolean' 6074 }, 6075 literalMidWordUnderscores: { 6076 defaultValue: false, 6077 describe: 'Parse midword underscores as literal underscores', 6078 type: 'boolean' 6079 }, 6080 literalMidWordAsterisks: { 6081 defaultValue: false, 6082 describe: 'Parse midword asterisks as literal asterisks', 6083 type: 'boolean' 6084 }, 6085 strikethrough: { 6086 defaultValue: false, 6087 describe: 'Turn on/off strikethrough support', 6088 type: 'boolean' 6089 }, 6090 tables: { 6091 defaultValue: false, 6092 describe: 'Turn on/off tables support', 6093 type: 'boolean' 6094 }, 6095 tablesHeaderId: { 6096 defaultValue: false, 6097 describe: 'Add an id to table headers', 6098 type: 'boolean' 6099 }, 6100 ghCodeBlocks: { 6101 defaultValue: true, 6102 describe: 'Turn on/off GFM fenced code blocks support', 6103 type: 'boolean' 6104 }, 6105 tasklists: { 6106 defaultValue: false, 6107 describe: 'Turn on/off GFM tasklist support', 6108 type: 'boolean' 6109 }, 6110 smoothLivePreview: { 6111 defaultValue: false, 6112 describe: 'Prevents weird effects in live previews due to incomplete input', 6113 type: 'boolean' 6114 }, 6115 smartIndentationFix: { 6116 defaultValue: false, 6117 description: 'Tries to smartly fix indentation in es6 strings', 6118 type: 'boolean' 6119 }, 6120 disableForced4SpacesIndentedSublists: { 6121 defaultValue: false, 6122 description: 'Disables the requirement of indenting nested sublists by 4 spaces', 6123 type: 'boolean' 6124 }, 6125 simpleLineBreaks: { 6126 defaultValue: false, 6127 description: 'Parses simple line breaks as <br> (GFM Style)', 6128 type: 'boolean' 6129 }, 6130 requireSpaceBeforeHeadingText: { 6131 defaultValue: false, 6132 description: 'Makes adding a space between `#` and the header text mandatory (GFM Style)', 6133 type: 'boolean' 6134 }, 6135 ghMentions: { 6136 defaultValue: false, 6137 description: 'Enables github @mentions', 6138 type: 'boolean' 6139 }, 6140 ghMentionsLink: { 6141 defaultValue: 'https://github.com/{u}', 6142 description: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.', 6143 type: 'string' 6144 }, 6145 encodeEmails: { 6146 defaultValue: true, 6147 description: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities', 6148 type: 'boolean' 6149 }, 6150 openLinksInNewWindow: { 6151 defaultValue: false, 6152 description: 'Open all links in new windows', 6153 type: 'boolean' 6154 }, 6155 backslashEscapesHTMLTags: { 6156 defaultValue: false, 6157 description: 'Support for HTML Tag escaping. ex: \<div>foo\</div>', 6158 type: 'boolean' 6159 }, 6160 emoji: { 6161 defaultValue: false, 6162 description: 'Enable emoji support. Ex: `this is a :smile: emoji`', 6163 type: 'boolean' 6164 }, 6165 underline: { 6166 defaultValue: false, 6167 description: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`', 6168 type: 'boolean' 6169 }, 6170 completeHTMLDocument: { 6171 defaultValue: false, 6172 description: 'Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags', 6173 type: 'boolean' 6174 }, 6175 metadata: { 6176 defaultValue: false, 6177 description: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).', 6178 type: 'boolean' 6179 }, 6180 splitAdjacentBlockquotes: { 6181 defaultValue: false, 6182 description: 'Split adjacent blockquote blocks', 6183 type: 'boolean' 6184 } 6185 }; 6186 if (simple === false) { 6187 return JSON.parse(JSON.stringify(defaultOptions)); 6188 } 6189 var ret = {}; 6190 for (var opt in defaultOptions) { 6191 if (defaultOptions.hasOwnProperty(opt)) { 6192 ret[opt] = defaultOptions[opt].defaultValue; 6193 } 6194 } 6195 return ret; 6196 } 6197 6198 function allOptionsOn () { 6199 'use strict'; 6200 var options = getDefaultOpts(true), 6201 ret = {}; 6202 for (var opt in options) { 6203 if (options.hasOwnProperty(opt)) { 6204 ret[opt] = true; 6205 } 6206 } 6207 return ret; 6208 } 6209 6210 /** 6211 * Created by Tivie on 06-01-2015. 6212 */ 6213 6214 // Private properties 6215 var showdown = {}, 6216 parsers = {}, 6217 extensions = {}, 6218 globalOptions = getDefaultOpts(true), 6219 setFlavor = 'vanilla', 6220 flavor = { 6221 github: { 6222 omitExtraWLInCodeBlocks: true, 6223 simplifiedAutoLink: true, 6224 excludeTrailingPunctuationFromURLs: true, 6225 literalMidWordUnderscores: true, 6226 strikethrough: true, 6227 tables: true, 6228 tablesHeaderId: true, 6229 ghCodeBlocks: true, 6230 tasklists: true, 6231 disableForced4SpacesIndentedSublists: true, 6232 simpleLineBreaks: true, 6233 requireSpaceBeforeHeadingText: true, 6234 ghCompatibleHeaderId: true, 6235 ghMentions: true, 6236 backslashEscapesHTMLTags: true, 6237 emoji: true, 6238 splitAdjacentBlockquotes: true 6239 }, 6240 original: { 6241 noHeaderId: true, 6242 ghCodeBlocks: false 6243 }, 6244 ghost: { 6245 omitExtraWLInCodeBlocks: true, 6246 parseImgDimensions: true, 6247 simplifiedAutoLink: true, 6248 excludeTrailingPunctuationFromURLs: true, 6249 literalMidWordUnderscores: true, 6250 strikethrough: true, 6251 tables: true, 6252 tablesHeaderId: true, 6253 ghCodeBlocks: true, 6254 tasklists: true, 6255 smoothLivePreview: true, 6256 simpleLineBreaks: true, 6257 requireSpaceBeforeHeadingText: true, 6258 ghMentions: false, 6259 encodeEmails: true 6260 }, 6261 vanilla: getDefaultOpts(true), 6262 allOn: allOptionsOn() 6263 }; 6264 6265 /** 6266 * helper namespace 6267 * @type {{}} 6268 */ 6269 showdown.helper = {}; 6270 6271 /** 6272 * TODO LEGACY SUPPORT CODE 6273 * @type {{}} 6274 */ 6275 showdown.extensions = {}; 6276 6277 /** 6278 * Set a global option 6279 * @static 6280 * @param {string} key 6281 * @param {*} value 6282 * @returns {showdown} 6283 */ 6284 showdown.setOption = function (key, value) { 6285 'use strict'; 6286 globalOptions[key] = value; 6287 return this; 6288 }; 6289 6290 /** 6291 * Get a global option 6292 * @static 6293 * @param {string} key 6294 * @returns {*} 6295 */ 6296 showdown.getOption = function (key) { 6297 'use strict'; 6298 return globalOptions[key]; 6299 }; 6300 6301 /** 6302 * Get the global options 6303 * @static 6304 * @returns {{}} 6305 */ 6306 showdown.getOptions = function () { 6307 'use strict'; 6308 return globalOptions; 6309 }; 6310 6311 /** 6312 * Reset global options to the default values 6313 * @static 6314 */ 6315 showdown.resetOptions = function () { 6316 'use strict'; 6317 globalOptions = getDefaultOpts(true); 6318 }; 6319 6320 /** 6321 * Set the flavor showdown should use as default 6322 * @param {string} name 6323 */ 6324 showdown.setFlavor = function (name) { 6325 'use strict'; 6326 if (!flavor.hasOwnProperty(name)) { 6327 throw Error(name + ' flavor was not found'); 6328 } 6329 showdown.resetOptions(); 6330 var preset = flavor[name]; 6331 setFlavor = name; 6332 for (var option in preset) { 6333 if (preset.hasOwnProperty(option)) { 6334 globalOptions[option] = preset[option]; 6335 } 6336 } 6337 }; 6338 6339 /** 6340 * Get the currently set flavor 6341 * @returns {string} 6342 */ 6343 showdown.getFlavor = function () { 6344 'use strict'; 6345 return setFlavor; 6346 }; 6347 6348 /** 6349 * Get the options of a specified flavor. Returns undefined if the flavor was not found 6350 * @param {string} name Name of the flavor 6351 * @returns {{}|undefined} 6352 */ 6353 showdown.getFlavorOptions = function (name) { 6354 'use strict'; 6355 if (flavor.hasOwnProperty(name)) { 6356 return flavor[name]; 6357 } 6358 }; 6359 6360 /** 6361 * Get the default options 6362 * @static 6363 * @param {boolean} [simple=true] 6364 * @returns {{}} 6365 */ 6366 showdown.getDefaultOptions = function (simple) { 6367 'use strict'; 6368 return getDefaultOpts(simple); 6369 }; 6370 6371 /** 6372 * Get or set a subParser 6373 * 6374 * subParser(name) - Get a registered subParser 6375 * subParser(name, func) - Register a subParser 6376 * @static 6377 * @param {string} name 6378 * @param {function} [func] 6379 * @returns {*} 6380 */ 6381 showdown.subParser = function (name, func) { 6382 'use strict'; 6383 if (showdown.helper.isString(name)) { 6384 if (typeof func !== 'undefined') { 6385 parsers[name] = func; 6386 } else { 6387 if (parsers.hasOwnProperty(name)) { 6388 return parsers[name]; 6389 } else { 6390 throw Error('SubParser named ' + name + ' not registered!'); 6391 } 6392 } 6393 } 6394 }; 6395 6396 /** 6397 * Gets or registers an extension 6398 * @static 6399 * @param {string} name 6400 * @param {object|function=} ext 6401 * @returns {*} 6402 */ 6403 showdown.extension = function (name, ext) { 6404 'use strict'; 6405 6406 if (!showdown.helper.isString(name)) { 6407 throw Error('Extension \'name\' must be a string'); 6408 } 6409 6410 name = showdown.helper.stdExtName(name); 6411 6412 // Getter 6413 if (showdown.helper.isUndefined(ext)) { 6414 if (!extensions.hasOwnProperty(name)) { 6415 throw Error('Extension named ' + name + ' is not registered!'); 6416 } 6417 return extensions[name]; 6418 6419 // Setter 6420 } else { 6421 // Expand extension if it's wrapped in a function 6422 if (typeof ext === 'function') { 6423 ext = ext(); 6424 } 6425 6426 // Ensure extension is an array 6427 if (!showdown.helper.isArray(ext)) { 6428 ext = [ext]; 6429 } 6430 6431 var validExtension = validate(ext, name); 6432 6433 if (validExtension.valid) { 6434 extensions[name] = ext; 6435 } else { 6436 throw Error(validExtension.error); 6437 } 6438 } 6439 }; 6440 6441 /** 6442 * Gets all extensions registered 6443 * @returns {{}} 6444 */ 6445 showdown.getAllExtensions = function () { 6446 'use strict'; 6447 return extensions; 6448 }; 6449 6450 /** 6451 * Remove an extension 6452 * @param {string} name 6453 */ 6454 showdown.removeExtension = function (name) { 6455 'use strict'; 6456 delete extensions[name]; 6457 }; 6458 6459 /** 6460 * Removes all extensions 6461 */ 6462 showdown.resetExtensions = function () { 6463 'use strict'; 6464 extensions = {}; 6465 }; 6466 6467 /** 6468 * Validate extension 6469 * @param {array} extension 6470 * @param {string} name 6471 * @returns {{valid: boolean, error: string}} 6472 */ 6473 function validate (extension, name) { 6474 'use strict'; 6475 6476 var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension', 6477 ret = { 6478 valid: true, 6479 error: '' 6480 }; 6481 6482 if (!showdown.helper.isArray(extension)) { 6483 extension = [extension]; 6484 } 6485 6486 for (var i = 0; i < extension.length; ++i) { 6487 var baseMsg = errMsg + ' sub-extension ' + i + ': ', 6488 ext = extension[i]; 6489 if (typeof ext !== 'object') { 6490 ret.valid = false; 6491 ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given'; 6492 return ret; 6493 } 6494 6495 if (!showdown.helper.isString(ext.type)) { 6496 ret.valid = false; 6497 ret.error = baseMsg + 'property "type" must be a string, but ' + typeof ext.type + ' given'; 6498 return ret; 6499 } 6500 6501 var type = ext.type = ext.type.toLowerCase(); 6502 6503 // normalize extension type 6504 if (type === 'language') { 6505 type = ext.type = 'lang'; 6506 } 6507 6508 if (type === 'html') { 6509 type = ext.type = 'output'; 6510 } 6511 6512 if (type !== 'lang' && type !== 'output' && type !== 'listener') { 6513 ret.valid = false; 6514 ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: "lang/language", "output/html" or "listener"'; 6515 return ret; 6516 } 6517 6518 if (type === 'listener') { 6519 if (showdown.helper.isUndefined(ext.listeners)) { 6520 ret.valid = false; 6521 ret.error = baseMsg + '. Extensions of type "listener" must have a property called "listeners"'; 6522 return ret; 6523 } 6524 } else { 6525 if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) { 6526 ret.valid = false; 6527 ret.error = baseMsg + type + ' extensions must define either a "regex" property or a "filter" method'; 6528 return ret; 6529 } 6530 } 6531 6532 if (ext.listeners) { 6533 if (typeof ext.listeners !== 'object') { 6534 ret.valid = false; 6535 ret.error = baseMsg + '"listeners" property must be an object but ' + typeof ext.listeners + ' given'; 6536 return ret; 6537 } 6538 for (var ln in ext.listeners) { 6539 if (ext.listeners.hasOwnProperty(ln)) { 6540 if (typeof ext.listeners[ln] !== 'function') { 6541 ret.valid = false; 6542 ret.error = baseMsg + '"listeners" property must be an hash of [event name]: [callback]. listeners.' + ln + 6543 ' must be a function but ' + typeof ext.listeners[ln] + ' given'; 6544 return ret; 6545 } 6546 } 6547 } 6548 } 6549 6550 if (ext.filter) { 6551 if (typeof ext.filter !== 'function') { 6552 ret.valid = false; 6553 ret.error = baseMsg + '"filter" must be a function, but ' + typeof ext.filter + ' given'; 6554 return ret; 6555 } 6556 } else if (ext.regex) { 6557 if (showdown.helper.isString(ext.regex)) { 6558 ext.regex = new RegExp(ext.regex, 'g'); 6559 } 6560 if (!(ext.regex instanceof RegExp)) { 6561 ret.valid = false; 6562 ret.error = baseMsg + '"regex" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given'; 6563 return ret; 6564 } 6565 if (showdown.helper.isUndefined(ext.replace)) { 6566 ret.valid = false; 6567 ret.error = baseMsg + '"regex" extensions must implement a replace string or function'; 6568 return ret; 6569 } 6570 } 6571 } 6572 return ret; 6573 } 6574 6575 /** 6576 * Validate extension 6577 * @param {object} ext 6578 * @returns {boolean} 6579 */ 6580 showdown.validateExtension = function (ext) { 6581 'use strict'; 6582 6583 var validateExtension = validate(ext, null); 6584 if (!validateExtension.valid) { 6585 console.warn(validateExtension.error); 6586 return false; 6587 } 6588 return true; 6589 }; 6590 6591 /** 6592 * showdownjs helper functions 6593 */ 6594 6595 if (!showdown.hasOwnProperty('helper')) { 6596 showdown.helper = {}; 6597 } 6598 6599 /** 6600 * Check if var is string 6601 * @static 6602 * @param {string} a 6603 * @returns {boolean} 6604 */ 6605 showdown.helper.isString = function (a) { 6606 'use strict'; 6607 return (typeof a === 'string' || a instanceof String); 6608 }; 6609 6610 /** 6611 * Check if var is a function 6612 * @static 6613 * @param {*} a 6614 * @returns {boolean} 6615 */ 6616 showdown.helper.isFunction = function (a) { 6617 'use strict'; 6618 var getType = {}; 6619 return a && getType.toString.call(a) === '[object Function]'; 6620 }; 6621 6622 /** 6623 * isArray helper function 6624 * @static 6625 * @param {*} a 6626 * @returns {boolean} 6627 */ 6628 showdown.helper.isArray = function (a) { 6629 'use strict'; 6630 return Array.isArray(a); 6631 }; 6632 6633 /** 6634 * Check if value is undefined 6635 * @static 6636 * @param {*} value The value to check. 6637 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. 6638 */ 6639 showdown.helper.isUndefined = function (value) { 6640 'use strict'; 6641 return typeof value === 'undefined'; 6642 }; 6643 6644 /** 6645 * ForEach helper function 6646 * Iterates over Arrays and Objects (own properties only) 6647 * @static 6648 * @param {*} obj 6649 * @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object 6650 */ 6651 showdown.helper.forEach = function (obj, callback) { 6652 'use strict'; 6653 // check if obj is defined 6654 if (showdown.helper.isUndefined(obj)) { 6655 throw new Error('obj param is required'); 6656 } 6657 6658 if (showdown.helper.isUndefined(callback)) { 6659 throw new Error('callback param is required'); 6660 } 6661 6662 if (!showdown.helper.isFunction(callback)) { 6663 throw new Error('callback param must be a function/closure'); 6664 } 6665 6666 if (typeof obj.forEach === 'function') { 6667 obj.forEach(callback); 6668 } else if (showdown.helper.isArray(obj)) { 6669 for (var i = 0; i < obj.length; i++) { 6670 callback(obj[i], i, obj); 6671 } 6672 } else if (typeof (obj) === 'object') { 6673 for (var prop in obj) { 6674 if (obj.hasOwnProperty(prop)) { 6675 callback(obj[prop], prop, obj); 6676 } 6677 } 6678 } else { 6679 throw new Error('obj does not seem to be an array or an iterable object'); 6680 } 6681 }; 6682 6683 /** 6684 * Standardidize extension name 6685 * @static 6686 * @param {string} s extension name 6687 * @returns {string} 6688 */ 6689 showdown.helper.stdExtName = function (s) { 6690 'use strict'; 6691 return s.replace(/[_?*+\/\\.^-]/g, '').replace(/\s/g, '').toLowerCase(); 6692 }; 6693 6694 function escapeCharactersCallback (wholeMatch, m1) { 6695 'use strict'; 6696 var charCodeToEscape = m1.charCodeAt(0); 6697 return '¨E' + charCodeToEscape + 'E'; 6698 } 6699 6700 /** 6701 * Callback used to escape characters when passing through String.replace 6702 * @static 6703 * @param {string} wholeMatch 6704 * @param {string} m1 6705 * @returns {string} 6706 */ 6707 showdown.helper.escapeCharactersCallback = escapeCharactersCallback; 6708 6709 /** 6710 * Escape characters in a string 6711 * @static 6712 * @param {string} text 6713 * @param {string} charsToEscape 6714 * @param {boolean} afterBackslash 6715 * @returns {XML|string|void|*} 6716 */ 6717 showdown.helper.escapeCharacters = function (text, charsToEscape, afterBackslash) { 6718 'use strict'; 6719 // First we have to escape the escape characters so that 6720 // we can build a character class out of them 6721 var regexString = '([' + charsToEscape.replace(/([\[\]\\])/g, '\\$1') + '])'; 6722 6723 if (afterBackslash) { 6724 regexString = '\\\\' + regexString; 6725 } 6726 6727 var regex = new RegExp(regexString, 'g'); 6728 text = text.replace(regex, escapeCharactersCallback); 6729 6730 return text; 6731 }; 6732 6733 /** 6734 * Unescape HTML entities 6735 * @param txt 6736 * @returns {string} 6737 */ 6738 showdown.helper.unescapeHTMLEntities = function (txt) { 6739 'use strict'; 6740 6741 return txt 6742 .replace(/"/g, '"') 6743 .replace(/</g, '<') 6744 .replace(/>/g, '>') 6745 .replace(/&/g, '&'); 6746 }; 6747 6748 var rgxFindMatchPos = function (str, left, right, flags) { 6749 'use strict'; 6750 var f = flags || '', 6751 g = f.indexOf('g') > -1, 6752 x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')), 6753 l = new RegExp(left, f.replace(/g/g, '')), 6754 pos = [], 6755 t, s, m, start, end; 6756 6757 do { 6758 t = 0; 6759 while ((m = x.exec(str))) { 6760 if (l.test(m[0])) { 6761 if (!(t++)) { 6762 s = x.lastIndex; 6763 start = s - m[0].length; 6764 } 6765 } else if (t) { 6766 if (!--t) { 6767 end = m.index + m[0].length; 6768 var obj = { 6769 left: {start: start, end: s}, 6770 match: {start: s, end: m.index}, 6771 right: {start: m.index, end: end}, 6772 wholeMatch: {start: start, end: end} 6773 }; 6774 pos.push(obj); 6775 if (!g) { 6776 return pos; 6777 } 6778 } 6779 } 6780 } 6781 } while (t && (x.lastIndex = s)); 6782 6783 return pos; 6784 }; 6785 6786 /** 6787 * matchRecursiveRegExp 6788 * 6789 * (c) 2007 Steven Levithan <stevenlevithan.com> 6790 * MIT License 6791 * 6792 * Accepts a string to search, a left and right format delimiter 6793 * as regex patterns, and optional regex flags. Returns an array 6794 * of matches, allowing nested instances of left/right delimiters. 6795 * Use the "g" flag to return all matches, otherwise only the 6796 * first is returned. Be careful to ensure that the left and 6797 * right format delimiters produce mutually exclusive matches. 6798 * Backreferences are not supported within the right delimiter 6799 * due to how it is internally combined with the left delimiter. 6800 * When matching strings whose format delimiters are unbalanced 6801 * to the left or right, the output is intentionally as a 6802 * conventional regex library with recursion support would 6803 * produce, e.g. "<<x>" and "<x>>" both produce ["x"] when using 6804 * "<" and ">" as the delimiters (both strings contain a single, 6805 * balanced instance of "<x>"). 6806 * 6807 * examples: 6808 * matchRecursiveRegExp("test", "\\(", "\\)") 6809 * returns: [] 6810 * matchRecursiveRegExp("<t<<e>><s>>t<>", "<", ">", "g") 6811 * returns: ["t<<e>><s>", ""] 6812 * matchRecursiveRegExp("<div id=\"x\">test</div>", "<div\\b[^>]*>", "</div>", "gi") 6813 * returns: ["test"] 6814 */ 6815 showdown.helper.matchRecursiveRegExp = function (str, left, right, flags) { 6816 'use strict'; 6817 6818 var matchPos = rgxFindMatchPos (str, left, right, flags), 6819 results = []; 6820 6821 for (var i = 0; i < matchPos.length; ++i) { 6822 results.push([ 6823 str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end), 6824 str.slice(matchPos[i].match.start, matchPos[i].match.end), 6825 str.slice(matchPos[i].left.start, matchPos[i].left.end), 6826 str.slice(matchPos[i].right.start, matchPos[i].right.end) 6827 ]); 6828 } 6829 return results; 6830 }; 6831 6832 /** 6833 * 6834 * @param {string} str 6835 * @param {string|function} replacement 6836 * @param {string} left 6837 * @param {string} right 6838 * @param {string} flags 6839 * @returns {string} 6840 */ 6841 showdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) { 6842 'use strict'; 6843 6844 if (!showdown.helper.isFunction(replacement)) { 6845 var repStr = replacement; 6846 replacement = function () { 6847 return repStr; 6848 }; 6849 } 6850 6851 var matchPos = rgxFindMatchPos(str, left, right, flags), 6852 finalStr = str, 6853 lng = matchPos.length; 6854 6855 if (lng > 0) { 6856 var bits = []; 6857 if (matchPos[0].wholeMatch.start !== 0) { 6858 bits.push(str.slice(0, matchPos[0].wholeMatch.start)); 6859 } 6860 for (var i = 0; i < lng; ++i) { 6861 bits.push( 6862 replacement( 6863 str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end), 6864 str.slice(matchPos[i].match.start, matchPos[i].match.end), 6865 str.slice(matchPos[i].left.start, matchPos[i].left.end), 6866 str.slice(matchPos[i].right.start, matchPos[i].right.end) 6867 ) 6868 ); 6869 if (i < lng - 1) { 6870 bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start)); 6871 } 6872 } 6873 if (matchPos[lng - 1].wholeMatch.end < str.length) { 6874 bits.push(str.slice(matchPos[lng - 1].wholeMatch.end)); 6875 } 6876 finalStr = bits.join(''); 6877 } 6878 return finalStr; 6879 }; 6880 6881 /** 6882 * Returns the index within the passed String object of the first occurrence of the specified regex, 6883 * starting the search at fromIndex. Returns -1 if the value is not found. 6884 * 6885 * @param {string} str string to search 6886 * @param {RegExp} regex Regular expression to search 6887 * @param {int} [fromIndex = 0] Index to start the search 6888 * @returns {Number} 6889 * @throws InvalidArgumentError 6890 */ 6891 showdown.helper.regexIndexOf = function (str, regex, fromIndex) { 6892 'use strict'; 6893 if (!showdown.helper.isString(str)) { 6894 throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string'; 6895 } 6896 if (regex instanceof RegExp === false) { 6897 throw 'InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp'; 6898 } 6899 var indexOf = str.substring(fromIndex || 0).search(regex); 6900 return (indexOf >= 0) ? (indexOf + (fromIndex || 0)) : indexOf; 6901 }; 6902 6903 /** 6904 * Splits the passed string object at the defined index, and returns an array composed of the two substrings 6905 * @param {string} str string to split 6906 * @param {int} index index to split string at 6907 * @returns {[string,string]} 6908 * @throws InvalidArgumentError 6909 */ 6910 showdown.helper.splitAtIndex = function (str, index) { 6911 'use strict'; 6912 if (!showdown.helper.isString(str)) { 6913 throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string'; 6914 } 6915 return [str.substring(0, index), str.substring(index)]; 6916 }; 6917 6918 /** 6919 * Obfuscate an e-mail address through the use of Character Entities, 6920 * transforming ASCII characters into their equivalent decimal or hex entities. 6921 * 6922 * Since it has a random component, subsequent calls to this function produce different results 6923 * 6924 * @param {string} mail 6925 * @returns {string} 6926 */ 6927 showdown.helper.encodeEmailAddress = function (mail) { 6928 'use strict'; 6929 var encode = [ 6930 function (ch) { 6931 return '&#' + ch.charCodeAt(0) + ';'; 6932 }, 6933 function (ch) { 6934 return '&#x' + ch.charCodeAt(0).toString(16) + ';'; 6935 }, 6936 function (ch) { 6937 return ch; 6938 } 6939 ]; 6940 6941 mail = mail.replace(/./g, function (ch) { 6942 if (ch === '@') { 6943 // this *must* be encoded. I insist. 6944 ch = encode[Math.floor(Math.random() * 2)](ch); 6945 } else { 6946 var r = Math.random(); 6947 // roughly 10% raw, 45% hex, 45% dec 6948 ch = ( 6949 r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch) 6950 ); 6951 } 6952 return ch; 6953 }); 6954 6955 return mail; 6956 }; 6957 6958 /** 6959 * 6960 * @param str 6961 * @param targetLength 6962 * @param padString 6963 * @returns {string} 6964 */ 6965 showdown.helper.padEnd = function padEnd (str, targetLength, padString) { 6966 'use strict'; 6967 /*jshint bitwise: false*/ 6968 // eslint-disable-next-line space-infix-ops 6969 targetLength = targetLength>>0; //floor if number or convert non-number to 0; 6970 /*jshint bitwise: true*/ 6971 padString = String(padString || ' '); 6972 if (str.length > targetLength) { 6973 return String(str); 6974 } else { 6975 targetLength = targetLength - str.length; 6976 if (targetLength > padString.length) { 6977 padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed 6978 } 6979 return String(str) + padString.slice(0,targetLength); 6980 } 6981 }; 6982 6983 /** 6984 * POLYFILLS 6985 */ 6986 // use this instead of builtin is undefined for IE8 compatibility 6987 if (typeof(console) === 'undefined') { 6988 console = { 6989 warn: function (msg) { 6990 'use strict'; 6991 alert(msg); 6992 }, 6993 log: function (msg) { 6994 'use strict'; 6995 alert(msg); 6996 }, 6997 error: function (msg) { 6998 'use strict'; 6999 throw msg; 7000 } 7001 }; 7002 } 7003 7004 /** 7005 * Common regexes. 7006 * We declare some common regexes to improve performance 7007 */ 7008 showdown.helper.regexes = { 7009 asteriskDashAndColon: /([*_:~])/g 7010 }; 7011 7012 /** 7013 * EMOJIS LIST 7014 */ 7015 showdown.helper.emojis = { 7016 '+1':'\ud83d\udc4d', 7017 '-1':'\ud83d\udc4e', 7018 '100':'\ud83d\udcaf', 7019 '1234':'\ud83d\udd22', 7020 '1st_place_medal':'\ud83e\udd47', 7021 '2nd_place_medal':'\ud83e\udd48', 7022 '3rd_place_medal':'\ud83e\udd49', 7023 '8ball':'\ud83c\udfb1', 7024 'a':'\ud83c\udd70\ufe0f', 7025 'ab':'\ud83c\udd8e', 7026 'abc':'\ud83d\udd24', 7027 'abcd':'\ud83d\udd21', 7028 'accept':'\ud83c\ude51', 7029 'aerial_tramway':'\ud83d\udea1', 7030 'airplane':'\u2708\ufe0f', 7031 'alarm_clock':'\u23f0', 7032 'alembic':'\u2697\ufe0f', 7033 'alien':'\ud83d\udc7d', 7034 'ambulance':'\ud83d\ude91', 7035 'amphora':'\ud83c\udffa', 7036 'anchor':'\u2693\ufe0f', 7037 'angel':'\ud83d\udc7c', 7038 'anger':'\ud83d\udca2', 7039 'angry':'\ud83d\ude20', 7040 'anguished':'\ud83d\ude27', 7041 'ant':'\ud83d\udc1c', 7042 'apple':'\ud83c\udf4e', 7043 'aquarius':'\u2652\ufe0f', 7044 'aries':'\u2648\ufe0f', 7045 'arrow_backward':'\u25c0\ufe0f', 7046 'arrow_double_down':'\u23ec', 7047 'arrow_double_up':'\u23eb', 7048 'arrow_down':'\u2b07\ufe0f', 7049 'arrow_down_small':'\ud83d\udd3d', 7050 'arrow_forward':'\u25b6\ufe0f', 7051 'arrow_heading_down':'\u2935\ufe0f', 7052 'arrow_heading_up':'\u2934\ufe0f', 7053 'arrow_left':'\u2b05\ufe0f', 7054 'arrow_lower_left':'\u2199\ufe0f', 7055 'arrow_lower_right':'\u2198\ufe0f', 7056 'arrow_right':'\u27a1\ufe0f', 7057 'arrow_right_hook':'\u21aa\ufe0f', 7058 'arrow_up':'\u2b06\ufe0f', 7059 'arrow_up_down':'\u2195\ufe0f', 7060 'arrow_up_small':'\ud83d\udd3c', 7061 'arrow_upper_left':'\u2196\ufe0f', 7062 'arrow_upper_right':'\u2197\ufe0f', 7063 'arrows_clockwise':'\ud83d\udd03', 7064 'arrows_counterclockwise':'\ud83d\udd04', 7065 'art':'\ud83c\udfa8', 7066 'articulated_lorry':'\ud83d\ude9b', 7067 'artificial_satellite':'\ud83d\udef0', 7068 'astonished':'\ud83d\ude32', 7069 'athletic_shoe':'\ud83d\udc5f', 7070 'atm':'\ud83c\udfe7', 7071 'atom_symbol':'\u269b\ufe0f', 7072 'avocado':'\ud83e\udd51', 7073 'b':'\ud83c\udd71\ufe0f', 7074 'baby':'\ud83d\udc76', 7075 'baby_bottle':'\ud83c\udf7c', 7076 'baby_chick':'\ud83d\udc24', 7077 'baby_symbol':'\ud83d\udebc', 7078 'back':'\ud83d\udd19', 7079 'bacon':'\ud83e\udd53', 7080 'badminton':'\ud83c\udff8', 7081 'baggage_claim':'\ud83d\udec4', 7082 'baguette_bread':'\ud83e\udd56', 7083 'balance_scale':'\u2696\ufe0f', 7084 'balloon':'\ud83c\udf88', 7085 'ballot_box':'\ud83d\uddf3', 7086 'ballot_box_with_check':'\u2611\ufe0f', 7087 'bamboo':'\ud83c\udf8d', 7088 'banana':'\ud83c\udf4c', 7089 'bangbang':'\u203c\ufe0f', 7090 'bank':'\ud83c\udfe6', 7091 'bar_chart':'\ud83d\udcca', 7092 'barber':'\ud83d\udc88', 7093 'baseball':'\u26be\ufe0f', 7094 'basketball':'\ud83c\udfc0', 7095 'basketball_man':'\u26f9\ufe0f', 7096 'basketball_woman':'\u26f9\ufe0f‍\u2640\ufe0f', 7097 'bat':'\ud83e\udd87', 7098 'bath':'\ud83d\udec0', 7099 'bathtub':'\ud83d\udec1', 7100 'battery':'\ud83d\udd0b', 7101 'beach_umbrella':'\ud83c\udfd6', 7102 'bear':'\ud83d\udc3b', 7103 'bed':'\ud83d\udecf', 7104 'bee':'\ud83d\udc1d', 7105 'beer':'\ud83c\udf7a', 7106 'beers':'\ud83c\udf7b', 7107 'beetle':'\ud83d\udc1e', 7108 'beginner':'\ud83d\udd30', 7109 'bell':'\ud83d\udd14', 7110 'bellhop_bell':'\ud83d\udece', 7111 'bento':'\ud83c\udf71', 7112 'biking_man':'\ud83d\udeb4', 7113 'bike':'\ud83d\udeb2', 7114 'biking_woman':'\ud83d\udeb4‍\u2640\ufe0f', 7115 'bikini':'\ud83d\udc59', 7116 'biohazard':'\u2623\ufe0f', 7117 'bird':'\ud83d\udc26', 7118 'birthday':'\ud83c\udf82', 7119 'black_circle':'\u26ab\ufe0f', 7120 'black_flag':'\ud83c\udff4', 7121 'black_heart':'\ud83d\udda4', 7122 'black_joker':'\ud83c\udccf', 7123 'black_large_square':'\u2b1b\ufe0f', 7124 'black_medium_small_square':'\u25fe\ufe0f', 7125 'black_medium_square':'\u25fc\ufe0f', 7126 'black_nib':'\u2712\ufe0f', 7127 'black_small_square':'\u25aa\ufe0f', 7128 'black_square_button':'\ud83d\udd32', 7129 'blonde_man':'\ud83d\udc71', 7130 'blonde_woman':'\ud83d\udc71‍\u2640\ufe0f', 7131 'blossom':'\ud83c\udf3c', 7132 'blowfish':'\ud83d\udc21', 7133 'blue_book':'\ud83d\udcd8', 7134 'blue_car':'\ud83d\ude99', 7135 'blue_heart':'\ud83d\udc99', 7136 'blush':'\ud83d\ude0a', 7137 'boar':'\ud83d\udc17', 7138 'boat':'\u26f5\ufe0f', 7139 'bomb':'\ud83d\udca3', 7140 'book':'\ud83d\udcd6', 7141 'bookmark':'\ud83d\udd16', 7142 'bookmark_tabs':'\ud83d\udcd1', 7143 'books':'\ud83d\udcda', 7144 'boom':'\ud83d\udca5', 7145 'boot':'\ud83d\udc62', 7146 'bouquet':'\ud83d\udc90', 7147 'bowing_man':'\ud83d\ude47', 7148 'bow_and_arrow':'\ud83c\udff9', 7149 'bowing_woman':'\ud83d\ude47‍\u2640\ufe0f', 7150 'bowling':'\ud83c\udfb3', 7151 'boxing_glove':'\ud83e\udd4a', 7152 'boy':'\ud83d\udc66', 7153 'bread':'\ud83c\udf5e', 7154 'bride_with_veil':'\ud83d\udc70', 7155 'bridge_at_night':'\ud83c\udf09', 7156 'briefcase':'\ud83d\udcbc', 7157 'broken_heart':'\ud83d\udc94', 7158 'bug':'\ud83d\udc1b', 7159 'building_construction':'\ud83c\udfd7', 7160 'bulb':'\ud83d\udca1', 7161 'bullettrain_front':'\ud83d\ude85', 7162 'bullettrain_side':'\ud83d\ude84', 7163 'burrito':'\ud83c\udf2f', 7164 'bus':'\ud83d\ude8c', 7165 'business_suit_levitating':'\ud83d\udd74', 7166 'busstop':'\ud83d\ude8f', 7167 'bust_in_silhouette':'\ud83d\udc64', 7168 'busts_in_silhouette':'\ud83d\udc65', 7169 'butterfly':'\ud83e\udd8b', 7170 'cactus':'\ud83c\udf35', 7171 'cake':'\ud83c\udf70', 7172 'calendar':'\ud83d\udcc6', 7173 'call_me_hand':'\ud83e\udd19', 7174 'calling':'\ud83d\udcf2', 7175 'camel':'\ud83d\udc2b', 7176 'camera':'\ud83d\udcf7', 7177 'camera_flash':'\ud83d\udcf8', 7178 'camping':'\ud83c\udfd5', 7179 'cancer':'\u264b\ufe0f', 7180 'candle':'\ud83d\udd6f', 7181 'candy':'\ud83c\udf6c', 7182 'canoe':'\ud83d\udef6', 7183 'capital_abcd':'\ud83d\udd20', 7184 'capricorn':'\u2651\ufe0f', 7185 'car':'\ud83d\ude97', 7186 'card_file_box':'\ud83d\uddc3', 7187 'card_index':'\ud83d\udcc7', 7188 'card_index_dividers':'\ud83d\uddc2', 7189 'carousel_horse':'\ud83c\udfa0', 7190 'carrot':'\ud83e\udd55', 7191 'cat':'\ud83d\udc31', 7192 'cat2':'\ud83d\udc08', 7193 'cd':'\ud83d\udcbf', 7194 'chains':'\u26d3', 7195 'champagne':'\ud83c\udf7e', 7196 'chart':'\ud83d\udcb9', 7197 'chart_with_downwards_trend':'\ud83d\udcc9', 7198 'chart_with_upwards_trend':'\ud83d\udcc8', 7199 'checkered_flag':'\ud83c\udfc1', 7200 'cheese':'\ud83e\uddc0', 7201 'cherries':'\ud83c\udf52', 7202 'cherry_blossom':'\ud83c\udf38', 7203 'chestnut':'\ud83c\udf30', 7204 'chicken':'\ud83d\udc14', 7205 'children_crossing':'\ud83d\udeb8', 7206 'chipmunk':'\ud83d\udc3f', 7207 'chocolate_bar':'\ud83c\udf6b', 7208 'christmas_tree':'\ud83c\udf84', 7209 'church':'\u26ea\ufe0f', 7210 'cinema':'\ud83c\udfa6', 7211 'circus_tent':'\ud83c\udfaa', 7212 'city_sunrise':'\ud83c\udf07', 7213 'city_sunset':'\ud83c\udf06', 7214 'cityscape':'\ud83c\udfd9', 7215 'cl':'\ud83c\udd91', 7216 'clamp':'\ud83d\udddc', 7217 'clap':'\ud83d\udc4f', 7218 'clapper':'\ud83c\udfac', 7219 'classical_building':'\ud83c\udfdb', 7220 'clinking_glasses':'\ud83e\udd42', 7221 'clipboard':'\ud83d\udccb', 7222 'clock1':'\ud83d\udd50', 7223 'clock10':'\ud83d\udd59', 7224 'clock1030':'\ud83d\udd65', 7225 'clock11':'\ud83d\udd5a', 7226 'clock1130':'\ud83d\udd66', 7227 'clock12':'\ud83d\udd5b', 7228 'clock1230':'\ud83d\udd67', 7229 'clock130':'\ud83d\udd5c', 7230 'clock2':'\ud83d\udd51', 7231 'clock230':'\ud83d\udd5d', 7232 'clock3':'\ud83d\udd52', 7233 'clock330':'\ud83d\udd5e', 7234 'clock4':'\ud83d\udd53', 7235 'clock430':'\ud83d\udd5f', 7236 'clock5':'\ud83d\udd54', 7237 'clock530':'\ud83d\udd60', 7238 'clock6':'\ud83d\udd55', 7239 'clock630':'\ud83d\udd61', 7240 'clock7':'\ud83d\udd56', 7241 'clock730':'\ud83d\udd62', 7242 'clock8':'\ud83d\udd57', 7243 'clock830':'\ud83d\udd63', 7244 'clock9':'\ud83d\udd58', 7245 'clock930':'\ud83d\udd64', 7246 'closed_book':'\ud83d\udcd5', 7247 'closed_lock_with_key':'\ud83d\udd10', 7248 'closed_umbrella':'\ud83c\udf02', 7249 'cloud':'\u2601\ufe0f', 7250 'cloud_with_lightning':'\ud83c\udf29', 7251 'cloud_with_lightning_and_rain':'\u26c8', 7252 'cloud_with_rain':'\ud83c\udf27', 7253 'cloud_with_snow':'\ud83c\udf28', 7254 'clown_face':'\ud83e\udd21', 7255 'clubs':'\u2663\ufe0f', 7256 'cocktail':'\ud83c\udf78', 7257 'coffee':'\u2615\ufe0f', 7258 'coffin':'\u26b0\ufe0f', 7259 'cold_sweat':'\ud83d\ude30', 7260 'comet':'\u2604\ufe0f', 7261 'computer':'\ud83d\udcbb', 7262 'computer_mouse':'\ud83d\uddb1', 7263 'confetti_ball':'\ud83c\udf8a', 7264 'confounded':'\ud83d\ude16', 7265 'confused':'\ud83d\ude15', 7266 'congratulations':'\u3297\ufe0f', 7267 'construction':'\ud83d\udea7', 7268 'construction_worker_man':'\ud83d\udc77', 7269 'construction_worker_woman':'\ud83d\udc77‍\u2640\ufe0f', 7270 'control_knobs':'\ud83c\udf9b', 7271 'convenience_store':'\ud83c\udfea', 7272 'cookie':'\ud83c\udf6a', 7273 'cool':'\ud83c\udd92', 7274 'policeman':'\ud83d\udc6e', 7275 'copyright':'\u00a9\ufe0f', 7276 'corn':'\ud83c\udf3d', 7277 'couch_and_lamp':'\ud83d\udecb', 7278 'couple':'\ud83d\udc6b', 7279 'couple_with_heart_woman_man':'\ud83d\udc91', 7280 'couple_with_heart_man_man':'\ud83d\udc68‍\u2764\ufe0f‍\ud83d\udc68', 7281 'couple_with_heart_woman_woman':'\ud83d\udc69‍\u2764\ufe0f‍\ud83d\udc69', 7282 'couplekiss_man_man':'\ud83d\udc68‍\u2764\ufe0f‍\ud83d\udc8b‍\ud83d\udc68', 7283 'couplekiss_man_woman':'\ud83d\udc8f', 7284 'couplekiss_woman_woman':'\ud83d\udc69‍\u2764\ufe0f‍\ud83d\udc8b‍\ud83d\udc69', 7285 'cow':'\ud83d\udc2e', 7286 'cow2':'\ud83d\udc04', 7287 'cowboy_hat_face':'\ud83e\udd20', 7288 'crab':'\ud83e\udd80', 7289 'crayon':'\ud83d\udd8d', 7290 'credit_card':'\ud83d\udcb3', 7291 'crescent_moon':'\ud83c\udf19', 7292 'cricket':'\ud83c\udfcf', 7293 'crocodile':'\ud83d\udc0a', 7294 'croissant':'\ud83e\udd50', 7295 'crossed_fingers':'\ud83e\udd1e', 7296 'crossed_flags':'\ud83c\udf8c', 7297 'crossed_swords':'\u2694\ufe0f', 7298 'crown':'\ud83d\udc51', 7299 'cry':'\ud83d\ude22', 7300 'crying_cat_face':'\ud83d\ude3f', 7301 'crystal_ball':'\ud83d\udd2e', 7302 'cucumber':'\ud83e\udd52', 7303 'cupid':'\ud83d\udc98', 7304 'curly_loop':'\u27b0', 7305 'currency_exchange':'\ud83d\udcb1', 7306 'curry':'\ud83c\udf5b', 7307 'custard':'\ud83c\udf6e', 7308 'customs':'\ud83d\udec3', 7309 'cyclone':'\ud83c\udf00', 7310 'dagger':'\ud83d\udde1', 7311 'dancer':'\ud83d\udc83', 7312 'dancing_women':'\ud83d\udc6f', 7313 'dancing_men':'\ud83d\udc6f‍\u2642\ufe0f', 7314 'dango':'\ud83c\udf61', 7315 'dark_sunglasses':'\ud83d\udd76', 7316 'dart':'\ud83c\udfaf', 7317 'dash':'\ud83d\udca8', 7318 'date':'\ud83d\udcc5', 7319 'deciduous_tree':'\ud83c\udf33', 7320 'deer':'\ud83e\udd8c', 7321 'department_store':'\ud83c\udfec', 7322 'derelict_house':'\ud83c\udfda', 7323 'desert':'\ud83c\udfdc', 7324 'desert_island':'\ud83c\udfdd', 7325 'desktop_computer':'\ud83d\udda5', 7326 'male_detective':'\ud83d\udd75\ufe0f', 7327 'diamond_shape_with_a_dot_inside':'\ud83d\udca0', 7328 'diamonds':'\u2666\ufe0f', 7329 'disappointed':'\ud83d\ude1e', 7330 'disappointed_relieved':'\ud83d\ude25', 7331 'dizzy':'\ud83d\udcab', 7332 'dizzy_face':'\ud83d\ude35', 7333 'do_not_litter':'\ud83d\udeaf', 7334 'dog':'\ud83d\udc36', 7335 'dog2':'\ud83d\udc15', 7336 'dollar':'\ud83d\udcb5', 7337 'dolls':'\ud83c\udf8e', 7338 'dolphin':'\ud83d\udc2c', 7339 'door':'\ud83d\udeaa', 7340 'doughnut':'\ud83c\udf69', 7341 'dove':'\ud83d\udd4a', 7342 'dragon':'\ud83d\udc09', 7343 'dragon_face':'\ud83d\udc32', 7344 'dress':'\ud83d\udc57', 7345 'dromedary_camel':'\ud83d\udc2a', 7346 'drooling_face':'\ud83e\udd24', 7347 'droplet':'\ud83d\udca7', 7348 'drum':'\ud83e\udd41', 7349 'duck':'\ud83e\udd86', 7350 'dvd':'\ud83d\udcc0', 7351 'e-mail':'\ud83d\udce7', 7352 'eagle':'\ud83e\udd85', 7353 'ear':'\ud83d\udc42', 7354 'ear_of_rice':'\ud83c\udf3e', 7355 'earth_africa':'\ud83c\udf0d', 7356 'earth_americas':'\ud83c\udf0e', 7357 'earth_asia':'\ud83c\udf0f', 7358 'egg':'\ud83e\udd5a', 7359 'eggplant':'\ud83c\udf46', 7360 'eight_pointed_black_star':'\u2734\ufe0f', 7361 'eight_spoked_asterisk':'\u2733\ufe0f', 7362 'electric_plug':'\ud83d\udd0c', 7363 'elephant':'\ud83d\udc18', 7364 'email':'\u2709\ufe0f', 7365 'end':'\ud83d\udd1a', 7366 'envelope_with_arrow':'\ud83d\udce9', 7367 'euro':'\ud83d\udcb6', 7368 'european_castle':'\ud83c\udff0', 7369 'european_post_office':'\ud83c\udfe4', 7370 'evergreen_tree':'\ud83c\udf32', 7371 'exclamation':'\u2757\ufe0f', 7372 'expressionless':'\ud83d\ude11', 7373 'eye':'\ud83d\udc41', 7374 'eye_speech_bubble':'\ud83d\udc41‍\ud83d\udde8', 7375 'eyeglasses':'\ud83d\udc53', 7376 'eyes':'\ud83d\udc40', 7377 'face_with_head_bandage':'\ud83e\udd15', 7378 'face_with_thermometer':'\ud83e\udd12', 7379 'fist_oncoming':'\ud83d\udc4a', 7380 'factory':'\ud83c\udfed', 7381 'fallen_leaf':'\ud83c\udf42', 7382 'family_man_woman_boy':'\ud83d\udc6a', 7383 'family_man_boy':'\ud83d\udc68‍\ud83d\udc66', 7384 'family_man_boy_boy':'\ud83d\udc68‍\ud83d\udc66‍\ud83d\udc66', 7385 'family_man_girl':'\ud83d\udc68‍\ud83d\udc67', 7386 'family_man_girl_boy':'\ud83d\udc68‍\ud83d\udc67‍\ud83d\udc66', 7387 'family_man_girl_girl':'\ud83d\udc68‍\ud83d\udc67‍\ud83d\udc67', 7388 'family_man_man_boy':'\ud83d\udc68‍\ud83d\udc68‍\ud83d\udc66', 7389 'family_man_man_boy_boy':'\ud83d\udc68‍\ud83d\udc68‍\ud83d\udc66‍\ud83d\udc66', 7390 'family_man_man_girl':'\ud83d\udc68‍\ud83d\udc68‍\ud83d\udc67', 7391 'family_man_man_girl_boy':'\ud83d\udc68‍\ud83d\udc68‍\ud83d\udc67‍\ud83d\udc66', 7392 'family_man_man_girl_girl':'\ud83d\udc68‍\ud83d\udc68‍\ud83d\udc67‍\ud83d\udc67', 7393 'family_man_woman_boy_boy':'\ud83d\udc68‍\ud83d\udc69‍\ud83d\udc66‍\ud83d\udc66', 7394 'family_man_woman_girl':'\ud83d\udc68‍\ud83d\udc69‍\ud83d\udc67', 7395 'family_man_woman_girl_boy':'\ud83d\udc68‍\ud83d\udc69‍\ud83d\udc67‍\ud83d\udc66', 7396 'family_man_woman_girl_girl':'\ud83d\udc68‍\ud83d\udc69‍\ud83d\udc67‍\ud83d\udc67', 7397 'family_woman_boy':'\ud83d\udc69‍\ud83d\udc66', 7398 'family_woman_boy_boy':'\ud83d\udc69‍\ud83d\udc66‍\ud83d\udc66', 7399 'family_woman_girl':'\ud83d\udc69‍\ud83d\udc67', 7400 'family_woman_girl_boy':'\ud83d\udc69‍\ud83d\udc67‍\ud83d\udc66', 7401 'family_woman_girl_girl':'\ud83d\udc69‍\ud83d\udc67‍\ud83d\udc67', 7402 'family_woman_woman_boy':'\ud83d\udc69‍\ud83d\udc69‍\ud83d\udc66', 7403 'family_woman_woman_boy_boy':'\ud83d\udc69‍\ud83d\udc69‍\ud83d\udc66‍\ud83d\udc66', 7404 'family_woman_woman_girl':'\ud83d\udc69‍\ud83d\udc69‍\ud83d\udc67', 7405 'family_woman_woman_girl_boy':'\ud83d\udc69‍\ud83d\udc69‍\ud83d\udc67‍\ud83d\udc66', 7406 'family_woman_woman_girl_girl':'\ud83d\udc69‍\ud83d\udc69‍\ud83d\udc67‍\ud83d\udc67', 7407 'fast_forward':'\u23e9', 7408 'fax':'\ud83d\udce0', 7409 'fearful':'\ud83d\ude28', 7410 'feet':'\ud83d\udc3e', 7411 'female_detective':'\ud83d\udd75\ufe0f‍\u2640\ufe0f', 7412 'ferris_wheel':'\ud83c\udfa1', 7413 'ferry':'\u26f4', 7414 'field_hockey':'\ud83c\udfd1', 7415 'file_cabinet':'\ud83d\uddc4', 7416 'file_folder':'\ud83d\udcc1', 7417 'film_projector':'\ud83d\udcfd', 7418 'film_strip':'\ud83c\udf9e', 7419 'fire':'\ud83d\udd25', 7420 'fire_engine':'\ud83d\ude92', 7421 'fireworks':'\ud83c\udf86', 7422 'first_quarter_moon':'\ud83c\udf13', 7423 'first_quarter_moon_with_face':'\ud83c\udf1b', 7424 'fish':'\ud83d\udc1f', 7425 'fish_cake':'\ud83c\udf65', 7426 'fishing_pole_and_fish':'\ud83c\udfa3', 7427 'fist_raised':'\u270a', 7428 'fist_left':'\ud83e\udd1b', 7429 'fist_right':'\ud83e\udd1c', 7430 'flags':'\ud83c\udf8f', 7431 'flashlight':'\ud83d\udd26', 7432 'fleur_de_lis':'\u269c\ufe0f', 7433 'flight_arrival':'\ud83d\udeec', 7434 'flight_departure':'\ud83d\udeeb', 7435 'floppy_disk':'\ud83d\udcbe', 7436 'flower_playing_cards':'\ud83c\udfb4', 7437 'flushed':'\ud83d\ude33', 7438 'fog':'\ud83c\udf2b', 7439 'foggy':'\ud83c\udf01', 7440 'football':'\ud83c\udfc8', 7441 'footprints':'\ud83d\udc63', 7442 'fork_and_knife':'\ud83c\udf74', 7443 'fountain':'\u26f2\ufe0f', 7444 'fountain_pen':'\ud83d\udd8b', 7445 'four_leaf_clover':'\ud83c\udf40', 7446 'fox_face':'\ud83e\udd8a', 7447 'framed_picture':'\ud83d\uddbc', 7448 'free':'\ud83c\udd93', 7449 'fried_egg':'\ud83c\udf73', 7450 'fried_shrimp':'\ud83c\udf64', 7451 'fries':'\ud83c\udf5f', 7452 'frog':'\ud83d\udc38', 7453 'frowning':'\ud83d\ude26', 7454 'frowning_face':'\u2639\ufe0f', 7455 'frowning_man':'\ud83d\ude4d‍\u2642\ufe0f', 7456 'frowning_woman':'\ud83d\ude4d', 7457 'middle_finger':'\ud83d\udd95', 7458 'fuelpump':'\u26fd\ufe0f', 7459 'full_moon':'\ud83c\udf15', 7460 'full_moon_with_face':'\ud83c\udf1d', 7461 'funeral_urn':'\u26b1\ufe0f', 7462 'game_die':'\ud83c\udfb2', 7463 'gear':'\u2699\ufe0f', 7464 'gem':'\ud83d\udc8e', 7465 'gemini':'\u264a\ufe0f', 7466 'ghost':'\ud83d\udc7b', 7467 'gift':'\ud83c\udf81', 7468 'gift_heart':'\ud83d\udc9d', 7469 'girl':'\ud83d\udc67', 7470 'globe_with_meridians':'\ud83c\udf10', 7471 'goal_net':'\ud83e\udd45', 7472 'goat':'\ud83d\udc10', 7473 'golf':'\u26f3\ufe0f', 7474 'golfing_man':'\ud83c\udfcc\ufe0f', 7475 'golfing_woman':'\ud83c\udfcc\ufe0f‍\u2640\ufe0f', 7476 'gorilla':'\ud83e\udd8d', 7477 'grapes':'\ud83c\udf47', 7478 'green_apple':'\ud83c\udf4f', 7479 'green_book':'\ud83d\udcd7', 7480 'green_heart':'\ud83d\udc9a', 7481 'green_salad':'\ud83e\udd57', 7482 'grey_exclamation':'\u2755', 7483 'grey_question':'\u2754', 7484 'grimacing':'\ud83d\ude2c', 7485 'grin':'\ud83d\ude01', 7486 'grinning':'\ud83d\ude00', 7487 'guardsman':'\ud83d\udc82', 7488 'guardswoman':'\ud83d\udc82‍\u2640\ufe0f', 7489 'guitar':'\ud83c\udfb8', 7490 'gun':'\ud83d\udd2b', 7491 'haircut_woman':'\ud83d\udc87', 7492 'haircut_man':'\ud83d\udc87‍\u2642\ufe0f', 7493 'hamburger':'\ud83c\udf54', 7494 'hammer':'\ud83d\udd28', 7495 'hammer_and_pick':'\u2692', 7496 'hammer_and_wrench':'\ud83d\udee0', 7497 'hamster':'\ud83d\udc39', 7498 'hand':'\u270b', 7499 'handbag':'\ud83d\udc5c', 7500 'handshake':'\ud83e\udd1d', 7501 'hankey':'\ud83d\udca9', 7502 'hatched_chick':'\ud83d\udc25', 7503 'hatching_chick':'\ud83d\udc23', 7504 'headphones':'\ud83c\udfa7', 7505 'hear_no_evil':'\ud83d\ude49', 7506 'heart':'\u2764\ufe0f', 7507 'heart_decoration':'\ud83d\udc9f', 7508 'heart_eyes':'\ud83d\ude0d', 7509 'heart_eyes_cat':'\ud83d\ude3b', 7510 'heartbeat':'\ud83d\udc93', 7511 'heartpulse':'\ud83d\udc97', 7512 'hearts':'\u2665\ufe0f', 7513 'heavy_check_mark':'\u2714\ufe0f', 7514 'heavy_division_sign':'\u2797', 7515 'heavy_dollar_sign':'\ud83d\udcb2', 7516 'heavy_heart_exclamation':'\u2763\ufe0f', 7517 'heavy_minus_sign':'\u2796', 7518 'heavy_multiplication_x':'\u2716\ufe0f', 7519 'heavy_plus_sign':'\u2795', 7520 'helicopter':'\ud83d\ude81', 7521 'herb':'\ud83c\udf3f', 7522 'hibiscus':'\ud83c\udf3a', 7523 'high_brightness':'\ud83d\udd06', 7524 'high_heel':'\ud83d\udc60', 7525 'hocho':'\ud83d\udd2a', 7526 'hole':'\ud83d\udd73', 7527 'honey_pot':'\ud83c\udf6f', 7528 'horse':'\ud83d\udc34', 7529 'horse_racing':'\ud83c\udfc7', 7530 'hospital':'\ud83c\udfe5', 7531 'hot_pepper':'\ud83c\udf36', 7532 'hotdog':'\ud83c\udf2d', 7533 'hotel':'\ud83c\udfe8', 7534 'hotsprings':'\u2668\ufe0f', 7535 'hourglass':'\u231b\ufe0f', 7536 'hourglass_flowing_sand':'\u23f3', 7537 'house':'\ud83c\udfe0', 7538 'house_with_garden':'\ud83c\udfe1', 7539 'houses':'\ud83c\udfd8', 7540 'hugs':'\ud83e\udd17', 7541 'hushed':'\ud83d\ude2f', 7542 'ice_cream':'\ud83c\udf68', 7543 'ice_hockey':'\ud83c\udfd2', 7544 'ice_skate':'\u26f8', 7545 'icecream':'\ud83c\udf66', 7546 'id':'\ud83c\udd94', 7547 'ideograph_advantage':'\ud83c\ude50', 7548 'imp':'\ud83d\udc7f', 7549 'inbox_tray':'\ud83d\udce5', 7550 'incoming_envelope':'\ud83d\udce8', 7551 'tipping_hand_woman':'\ud83d\udc81', 7552 'information_source':'\u2139\ufe0f', 7553 'innocent':'\ud83d\ude07', 7554 'interrobang':'\u2049\ufe0f', 7555 'iphone':'\ud83d\udcf1', 7556 'izakaya_lantern':'\ud83c\udfee', 7557 'jack_o_lantern':'\ud83c\udf83', 7558 'japan':'\ud83d\uddfe', 7559 'japanese_castle':'\ud83c\udfef', 7560 'japanese_goblin':'\ud83d\udc7a', 7561 'japanese_ogre':'\ud83d\udc79', 7562 'jeans':'\ud83d\udc56', 7563 'joy':'\ud83d\ude02', 7564 'joy_cat':'\ud83d\ude39', 7565 'joystick':'\ud83d\udd79', 7566 'kaaba':'\ud83d\udd4b', 7567 'key':'\ud83d\udd11', 7568 'keyboard':'\u2328\ufe0f', 7569 'keycap_ten':'\ud83d\udd1f', 7570 'kick_scooter':'\ud83d\udef4', 7571 'kimono':'\ud83d\udc58', 7572 'kiss':'\ud83d\udc8b', 7573 'kissing':'\ud83d\ude17', 7574 'kissing_cat':'\ud83d\ude3d', 7575 'kissing_closed_eyes':'\ud83d\ude1a', 7576 'kissing_heart':'\ud83d\ude18', 7577 'kissing_smiling_eyes':'\ud83d\ude19', 7578 'kiwi_fruit':'\ud83e\udd5d', 7579 'koala':'\ud83d\udc28', 7580 'koko':'\ud83c\ude01', 7581 'label':'\ud83c\udff7', 7582 'large_blue_circle':'\ud83d\udd35', 7583 'large_blue_diamond':'\ud83d\udd37', 7584 'large_orange_diamond':'\ud83d\udd36', 7585 'last_quarter_moon':'\ud83c\udf17', 7586 'last_quarter_moon_with_face':'\ud83c\udf1c', 7587 'latin_cross':'\u271d\ufe0f', 7588 'laughing':'\ud83d\ude06', 7589 'leaves':'\ud83c\udf43', 7590 'ledger':'\ud83d\udcd2', 7591 'left_luggage':'\ud83d\udec5', 7592 'left_right_arrow':'\u2194\ufe0f', 7593 'leftwards_arrow_with_hook':'\u21a9\ufe0f', 7594 'lemon':'\ud83c\udf4b', 7595 'leo':'\u264c\ufe0f', 7596 'leopard':'\ud83d\udc06', 7597 'level_slider':'\ud83c\udf9a', 7598 'libra':'\u264e\ufe0f', 7599 'light_rail':'\ud83d\ude88', 7600 'link':'\ud83d\udd17', 7601 'lion':'\ud83e\udd81', 7602 'lips':'\ud83d\udc44', 7603 'lipstick':'\ud83d\udc84', 7604 'lizard':'\ud83e\udd8e', 7605 'lock':'\ud83d\udd12', 7606 'lock_with_ink_pen':'\ud83d\udd0f', 7607 'lollipop':'\ud83c\udf6d', 7608 'loop':'\u27bf', 7609 'loud_sound':'\ud83d\udd0a', 7610 'loudspeaker':'\ud83d\udce2', 7611 'love_hotel':'\ud83c\udfe9', 7612 'love_letter':'\ud83d\udc8c', 7613 'low_brightness':'\ud83d\udd05', 7614 'lying_face':'\ud83e\udd25', 7615 'm':'\u24c2\ufe0f', 7616 'mag':'\ud83d\udd0d', 7617 'mag_right':'\ud83d\udd0e', 7618 'mahjong':'\ud83c\udc04\ufe0f', 7619 'mailbox':'\ud83d\udceb', 7620 'mailbox_closed':'\ud83d\udcea', 7621 'mailbox_with_mail':'\ud83d\udcec', 7622 'mailbox_with_no_mail':'\ud83d\udced', 7623 'man':'\ud83d\udc68', 7624 'man_artist':'\ud83d\udc68‍\ud83c\udfa8', 7625 'man_astronaut':'\ud83d\udc68‍\ud83d\ude80', 7626 'man_cartwheeling':'\ud83e\udd38‍\u2642\ufe0f', 7627 'man_cook':'\ud83d\udc68‍\ud83c\udf73', 7628 'man_dancing':'\ud83d\udd7a', 7629 'man_facepalming':'\ud83e\udd26‍\u2642\ufe0f', 7630 'man_factory_worker':'\ud83d\udc68‍\ud83c\udfed', 7631 'man_farmer':'\ud83d\udc68‍\ud83c\udf3e', 7632 'man_firefighter':'\ud83d\udc68‍\ud83d\ude92', 7633 'man_health_worker':'\ud83d\udc68‍\u2695\ufe0f', 7634 'man_in_tuxedo':'\ud83e\udd35', 7635 'man_judge':'\ud83d\udc68‍\u2696\ufe0f', 7636 'man_juggling':'\ud83e\udd39‍\u2642\ufe0f', 7637 'man_mechanic':'\ud83d\udc68‍\ud83d\udd27', 7638 'man_office_worker':'\ud83d\udc68‍\ud83d\udcbc', 7639 'man_pilot':'\ud83d\udc68‍\u2708\ufe0f', 7640 'man_playing_handball':'\ud83e\udd3e‍\u2642\ufe0f', 7641 'man_playing_water_polo':'\ud83e\udd3d‍\u2642\ufe0f', 7642 'man_scientist':'\ud83d\udc68‍\ud83d\udd2c', 7643 'man_shrugging':'\ud83e\udd37‍\u2642\ufe0f', 7644 'man_singer':'\ud83d\udc68‍\ud83c\udfa4', 7645 'man_student':'\ud83d\udc68‍\ud83c\udf93', 7646 'man_teacher':'\ud83d\udc68‍\ud83c\udfeb', 7647 'man_technologist':'\ud83d\udc68‍\ud83d\udcbb', 7648 'man_with_gua_pi_mao':'\ud83d\udc72', 7649 'man_with_turban':'\ud83d\udc73', 7650 'tangerine':'\ud83c\udf4a', 7651 'mans_shoe':'\ud83d\udc5e', 7652 'mantelpiece_clock':'\ud83d\udd70', 7653 'maple_leaf':'\ud83c\udf41', 7654 'martial_arts_uniform':'\ud83e\udd4b', 7655 'mask':'\ud83d\ude37', 7656 'massage_woman':'\ud83d\udc86', 7657 'massage_man':'\ud83d\udc86‍\u2642\ufe0f', 7658 'meat_on_bone':'\ud83c\udf56', 7659 'medal_military':'\ud83c\udf96', 7660 'medal_sports':'\ud83c\udfc5', 7661 'mega':'\ud83d\udce3', 7662 'melon':'\ud83c\udf48', 7663 'memo':'\ud83d\udcdd', 7664 'men_wrestling':'\ud83e\udd3c‍\u2642\ufe0f', 7665 'menorah':'\ud83d\udd4e', 7666 'mens':'\ud83d\udeb9', 7667 'metal':'\ud83e\udd18', 7668 'metro':'\ud83d\ude87', 7669 'microphone':'\ud83c\udfa4', 7670 'microscope':'\ud83d\udd2c', 7671 'milk_glass':'\ud83e\udd5b', 7672 'milky_way':'\ud83c\udf0c', 7673 'minibus':'\ud83d\ude90', 7674 'minidisc':'\ud83d\udcbd', 7675 'mobile_phone_off':'\ud83d\udcf4', 7676 'money_mouth_face':'\ud83e\udd11', 7677 'money_with_wings':'\ud83d\udcb8', 7678 'moneybag':'\ud83d\udcb0', 7679 'monkey':'\ud83d\udc12', 7680 'monkey_face':'\ud83d\udc35', 7681 'monorail':'\ud83d\ude9d', 7682 'moon':'\ud83c\udf14', 7683 'mortar_board':'\ud83c\udf93', 7684 'mosque':'\ud83d\udd4c', 7685 'motor_boat':'\ud83d\udee5', 7686 'motor_scooter':'\ud83d\udef5', 7687 'motorcycle':'\ud83c\udfcd', 7688 'motorway':'\ud83d\udee3', 7689 'mount_fuji':'\ud83d\uddfb', 7690 'mountain':'\u26f0', 7691 'mountain_biking_man':'\ud83d\udeb5', 7692 'mountain_biking_woman':'\ud83d\udeb5‍\u2640\ufe0f', 7693 'mountain_cableway':'\ud83d\udea0', 7694 'mountain_railway':'\ud83d\ude9e', 7695 'mountain_snow':'\ud83c\udfd4', 7696 'mouse':'\ud83d\udc2d', 7697 'mouse2':'\ud83d\udc01', 7698 'movie_camera':'\ud83c\udfa5', 7699 'moyai':'\ud83d\uddff', 7700 'mrs_claus':'\ud83e\udd36', 7701 'muscle':'\ud83d\udcaa', 7702 'mushroom':'\ud83c\udf44', 7703 'musical_keyboard':'\ud83c\udfb9', 7704 'musical_note':'\ud83c\udfb5', 7705 'musical_score':'\ud83c\udfbc', 7706 'mute':'\ud83d\udd07', 7707 'nail_care':'\ud83d\udc85', 7708 'name_badge':'\ud83d\udcdb', 7709 'national_park':'\ud83c\udfde', 7710 'nauseated_face':'\ud83e\udd22', 7711 'necktie':'\ud83d\udc54', 7712 'negative_squared_cross_mark':'\u274e', 7713 'nerd_face':'\ud83e\udd13', 7714 'neutral_face':'\ud83d\ude10', 7715 'new':'\ud83c\udd95', 7716 'new_moon':'\ud83c\udf11', 7717 'new_moon_with_face':'\ud83c\udf1a', 7718 'newspaper':'\ud83d\udcf0', 7719 'newspaper_roll':'\ud83d\uddde', 7720 'next_track_button':'\u23ed', 7721 'ng':'\ud83c\udd96', 7722 'no_good_man':'\ud83d\ude45‍\u2642\ufe0f', 7723 'no_good_woman':'\ud83d\ude45', 7724 'night_with_stars':'\ud83c\udf03', 7725 'no_bell':'\ud83d\udd15', 7726 'no_bicycles':'\ud83d\udeb3', 7727 'no_entry':'\u26d4\ufe0f', 7728 'no_entry_sign':'\ud83d\udeab', 7729 'no_mobile_phones':'\ud83d\udcf5', 7730 'no_mouth':'\ud83d\ude36', 7731 'no_pedestrians':'\ud83d\udeb7', 7732 'no_smoking':'\ud83d\udead', 7733 'non-potable_water':'\ud83d\udeb1', 7734 'nose':'\ud83d\udc43', 7735 'notebook':'\ud83d\udcd3', 7736 'notebook_with_decorative_cover':'\ud83d\udcd4', 7737 'notes':'\ud83c\udfb6', 7738 'nut_and_bolt':'\ud83d\udd29', 7739 'o':'\u2b55\ufe0f', 7740 'o2':'\ud83c\udd7e\ufe0f', 7741 'ocean':'\ud83c\udf0a', 7742 'octopus':'\ud83d\udc19', 7743 'oden':'\ud83c\udf62', 7744 'office':'\ud83c\udfe2', 7745 'oil_drum':'\ud83d\udee2', 7746 'ok':'\ud83c\udd97', 7747 'ok_hand':'\ud83d\udc4c', 7748 'ok_man':'\ud83d\ude46‍\u2642\ufe0f', 7749 'ok_woman':'\ud83d\ude46', 7750 'old_key':'\ud83d\udddd', 7751 'older_man':'\ud83d\udc74', 7752 'older_woman':'\ud83d\udc75', 7753 'om':'\ud83d\udd49', 7754 'on':'\ud83d\udd1b', 7755 'oncoming_automobile':'\ud83d\ude98', 7756 'oncoming_bus':'\ud83d\ude8d', 7757 'oncoming_police_car':'\ud83d\ude94', 7758 'oncoming_taxi':'\ud83d\ude96', 7759 'open_file_folder':'\ud83d\udcc2', 7760 'open_hands':'\ud83d\udc50', 7761 'open_mouth':'\ud83d\ude2e', 7762 'open_umbrella':'\u2602\ufe0f', 7763 'ophiuchus':'\u26ce', 7764 'orange_book':'\ud83d\udcd9', 7765 'orthodox_cross':'\u2626\ufe0f', 7766 'outbox_tray':'\ud83d\udce4', 7767 'owl':'\ud83e\udd89', 7768 'ox':'\ud83d\udc02', 7769 'package':'\ud83d\udce6', 7770 'page_facing_up':'\ud83d\udcc4', 7771 'page_with_curl':'\ud83d\udcc3', 7772 'pager':'\ud83d\udcdf', 7773 'paintbrush':'\ud83d\udd8c', 7774 'palm_tree':'\ud83c\udf34', 7775 'pancakes':'\ud83e\udd5e', 7776 'panda_face':'\ud83d\udc3c', 7777 'paperclip':'\ud83d\udcce', 7778 'paperclips':'\ud83d\udd87', 7779 'parasol_on_ground':'\u26f1', 7780 'parking':'\ud83c\udd7f\ufe0f', 7781 'part_alternation_mark':'\u303d\ufe0f', 7782 'partly_sunny':'\u26c5\ufe0f', 7783 'passenger_ship':'\ud83d\udef3', 7784 'passport_control':'\ud83d\udec2', 7785 'pause_button':'\u23f8', 7786 'peace_symbol':'\u262e\ufe0f', 7787 'peach':'\ud83c\udf51', 7788 'peanuts':'\ud83e\udd5c', 7789 'pear':'\ud83c\udf50', 7790 'pen':'\ud83d\udd8a', 7791 'pencil2':'\u270f\ufe0f', 7792 'penguin':'\ud83d\udc27', 7793 'pensive':'\ud83d\ude14', 7794 'performing_arts':'\ud83c\udfad', 7795 'persevere':'\ud83d\ude23', 7796 'person_fencing':'\ud83e\udd3a', 7797 'pouting_woman':'\ud83d\ude4e', 7798 'phone':'\u260e\ufe0f', 7799 'pick':'\u26cf', 7800 'pig':'\ud83d\udc37', 7801 'pig2':'\ud83d\udc16', 7802 'pig_nose':'\ud83d\udc3d', 7803 'pill':'\ud83d\udc8a', 7804 'pineapple':'\ud83c\udf4d', 7805 'ping_pong':'\ud83c\udfd3', 7806 'pisces':'\u2653\ufe0f', 7807 'pizza':'\ud83c\udf55', 7808 'place_of_worship':'\ud83d\uded0', 7809 'plate_with_cutlery':'\ud83c\udf7d', 7810 'play_or_pause_button':'\u23ef', 7811 'point_down':'\ud83d\udc47', 7812 'point_left':'\ud83d\udc48', 7813 'point_right':'\ud83d\udc49', 7814 'point_up':'\u261d\ufe0f', 7815 'point_up_2':'\ud83d\udc46', 7816 'police_car':'\ud83d\ude93', 7817 'policewoman':'\ud83d\udc6e‍\u2640\ufe0f', 7818 'poodle':'\ud83d\udc29', 7819 'popcorn':'\ud83c\udf7f', 7820 'post_office':'\ud83c\udfe3', 7821 'postal_horn':'\ud83d\udcef', 7822 'postbox':'\ud83d\udcee', 7823 'potable_water':'\ud83d\udeb0', 7824 'potato':'\ud83e\udd54', 7825 'pouch':'\ud83d\udc5d', 7826 'poultry_leg':'\ud83c\udf57', 7827 'pound':'\ud83d\udcb7', 7828 'rage':'\ud83d\ude21', 7829 'pouting_cat':'\ud83d\ude3e', 7830 'pouting_man':'\ud83d\ude4e‍\u2642\ufe0f', 7831 'pray':'\ud83d\ude4f', 7832 'prayer_beads':'\ud83d\udcff', 7833 'pregnant_woman':'\ud83e\udd30', 7834 'previous_track_button':'\u23ee', 7835 'prince':'\ud83e\udd34', 7836 'princess':'\ud83d\udc78', 7837 'printer':'\ud83d\udda8', 7838 'purple_heart':'\ud83d\udc9c', 7839 'purse':'\ud83d\udc5b', 7840 'pushpin':'\ud83d\udccc', 7841 'put_litter_in_its_place':'\ud83d\udeae', 7842 'question':'\u2753', 7843 'rabbit':'\ud83d\udc30', 7844 'rabbit2':'\ud83d\udc07', 7845 'racehorse':'\ud83d\udc0e', 7846 'racing_car':'\ud83c\udfce', 7847 'radio':'\ud83d\udcfb', 7848 'radio_button':'\ud83d\udd18', 7849 'radioactive':'\u2622\ufe0f', 7850 'railway_car':'\ud83d\ude83', 7851 'railway_track':'\ud83d\udee4', 7852 'rainbow':'\ud83c\udf08', 7853 'rainbow_flag':'\ud83c\udff3\ufe0f‍\ud83c\udf08', 7854 'raised_back_of_hand':'\ud83e\udd1a', 7855 'raised_hand_with_fingers_splayed':'\ud83d\udd90', 7856 'raised_hands':'\ud83d\ude4c', 7857 'raising_hand_woman':'\ud83d\ude4b', 7858 'raising_hand_man':'\ud83d\ude4b‍\u2642\ufe0f', 7859 'ram':'\ud83d\udc0f', 7860 'ramen':'\ud83c\udf5c', 7861 'rat':'\ud83d\udc00', 7862 'record_button':'\u23fa', 7863 'recycle':'\u267b\ufe0f', 7864 'red_circle':'\ud83d\udd34', 7865 'registered':'\u00ae\ufe0f', 7866 'relaxed':'\u263a\ufe0f', 7867 'relieved':'\ud83d\ude0c', 7868 'reminder_ribbon':'\ud83c\udf97', 7869 'repeat':'\ud83d\udd01', 7870 'repeat_one':'\ud83d\udd02', 7871 'rescue_worker_helmet':'\u26d1', 7872 'restroom':'\ud83d\udebb', 7873 'revolving_hearts':'\ud83d\udc9e', 7874 'rewind':'\u23ea', 7875 'rhinoceros':'\ud83e\udd8f', 7876 'ribbon':'\ud83c\udf80', 7877 'rice':'\ud83c\udf5a', 7878 'rice_ball':'\ud83c\udf59', 7879 'rice_cracker':'\ud83c\udf58', 7880 'rice_scene':'\ud83c\udf91', 7881 'right_anger_bubble':'\ud83d\uddef', 7882 'ring':'\ud83d\udc8d', 7883 'robot':'\ud83e\udd16', 7884 'rocket':'\ud83d\ude80', 7885 'rofl':'\ud83e\udd23', 7886 'roll_eyes':'\ud83d\ude44', 7887 'roller_coaster':'\ud83c\udfa2', 7888 'rooster':'\ud83d\udc13', 7889 'rose':'\ud83c\udf39', 7890 'rosette':'\ud83c\udff5', 7891 'rotating_light':'\ud83d\udea8', 7892 'round_pushpin':'\ud83d\udccd', 7893 'rowing_man':'\ud83d\udea3', 7894 'rowing_woman':'\ud83d\udea3‍\u2640\ufe0f', 7895 'rugby_football':'\ud83c\udfc9', 7896 'running_man':'\ud83c\udfc3', 7897 'running_shirt_with_sash':'\ud83c\udfbd', 7898 'running_woman':'\ud83c\udfc3‍\u2640\ufe0f', 7899 'sa':'\ud83c\ude02\ufe0f', 7900 'sagittarius':'\u2650\ufe0f', 7901 'sake':'\ud83c\udf76', 7902 'sandal':'\ud83d\udc61', 7903 'santa':'\ud83c\udf85', 7904 'satellite':'\ud83d\udce1', 7905 'saxophone':'\ud83c\udfb7', 7906 'school':'\ud83c\udfeb', 7907 'school_satchel':'\ud83c\udf92', 7908 'scissors':'\u2702\ufe0f', 7909 'scorpion':'\ud83e\udd82', 7910 'scorpius':'\u264f\ufe0f', 7911 'scream':'\ud83d\ude31', 7912 'scream_cat':'\ud83d\ude40', 7913 'scroll':'\ud83d\udcdc', 7914 'seat':'\ud83d\udcba', 7915 'secret':'\u3299\ufe0f', 7916 'see_no_evil':'\ud83d\ude48', 7917 'seedling':'\ud83c\udf31', 7918 'selfie':'\ud83e\udd33', 7919 'shallow_pan_of_food':'\ud83e\udd58', 7920 'shamrock':'\u2618\ufe0f', 7921 'shark':'\ud83e\udd88', 7922 'shaved_ice':'\ud83c\udf67', 7923 'sheep':'\ud83d\udc11', 7924 'shell':'\ud83d\udc1a', 7925 'shield':'\ud83d\udee1', 7926 'shinto_shrine':'\u26e9', 7927 'ship':'\ud83d\udea2', 7928 'shirt':'\ud83d\udc55', 7929 'shopping':'\ud83d\udecd', 7930 'shopping_cart':'\ud83d\uded2', 7931 'shower':'\ud83d\udebf', 7932 'shrimp':'\ud83e\udd90', 7933 'signal_strength':'\ud83d\udcf6', 7934 'six_pointed_star':'\ud83d\udd2f', 7935 'ski':'\ud83c\udfbf', 7936 'skier':'\u26f7', 7937 'skull':'\ud83d\udc80', 7938 'skull_and_crossbones':'\u2620\ufe0f', 7939 'sleeping':'\ud83d\ude34', 7940 'sleeping_bed':'\ud83d\udecc', 7941 'sleepy':'\ud83d\ude2a', 7942 'slightly_frowning_face':'\ud83d\ude41', 7943 'slightly_smiling_face':'\ud83d\ude42', 7944 'slot_machine':'\ud83c\udfb0', 7945 'small_airplane':'\ud83d\udee9', 7946 'small_blue_diamond':'\ud83d\udd39', 7947 'small_orange_diamond':'\ud83d\udd38', 7948 'small_red_triangle':'\ud83d\udd3a', 7949 'small_red_triangle_down':'\ud83d\udd3b', 7950 'smile':'\ud83d\ude04', 7951 'smile_cat':'\ud83d\ude38', 7952 'smiley':'\ud83d\ude03', 7953 'smiley_cat':'\ud83d\ude3a', 7954 'smiling_imp':'\ud83d\ude08', 7955 'smirk':'\ud83d\ude0f', 7956 'smirk_cat':'\ud83d\ude3c', 7957 'smoking':'\ud83d\udeac', 7958 'snail':'\ud83d\udc0c', 7959 'snake':'\ud83d\udc0d', 7960 'sneezing_face':'\ud83e\udd27', 7961 'snowboarder':'\ud83c\udfc2', 7962 'snowflake':'\u2744\ufe0f', 7963 'snowman':'\u26c4\ufe0f', 7964 'snowman_with_snow':'\u2603\ufe0f', 7965 'sob':'\ud83d\ude2d', 7966 'soccer':'\u26bd\ufe0f', 7967 'soon':'\ud83d\udd1c', 7968 'sos':'\ud83c\udd98', 7969 'sound':'\ud83d\udd09', 7970 'space_invader':'\ud83d\udc7e', 7971 'spades':'\u2660\ufe0f', 7972 'spaghetti':'\ud83c\udf5d', 7973 'sparkle':'\u2747\ufe0f', 7974 'sparkler':'\ud83c\udf87', 7975 'sparkles':'\u2728', 7976 'sparkling_heart':'\ud83d\udc96', 7977 'speak_no_evil':'\ud83d\ude4a', 7978 'speaker':'\ud83d\udd08', 7979 'speaking_head':'\ud83d\udde3', 7980 'speech_balloon':'\ud83d\udcac', 7981 'speedboat':'\ud83d\udea4', 7982 'spider':'\ud83d\udd77', 7983 'spider_web':'\ud83d\udd78', 7984 'spiral_calendar':'\ud83d\uddd3', 7985 'spiral_notepad':'\ud83d\uddd2', 7986 'spoon':'\ud83e\udd44', 7987 'squid':'\ud83e\udd91', 7988 'stadium':'\ud83c\udfdf', 7989 'star':'\u2b50\ufe0f', 7990 'star2':'\ud83c\udf1f', 7991 'star_and_crescent':'\u262a\ufe0f', 7992 'star_of_david':'\u2721\ufe0f', 7993 'stars':'\ud83c\udf20', 7994 'station':'\ud83d\ude89', 7995 'statue_of_liberty':'\ud83d\uddfd', 7996 'steam_locomotive':'\ud83d\ude82', 7997 'stew':'\ud83c\udf72', 7998 'stop_button':'\u23f9', 7999 'stop_sign':'\ud83d\uded1', 8000 'stopwatch':'\u23f1', 8001 'straight_ruler':'\ud83d\udccf', 8002 'strawberry':'\ud83c\udf53', 8003 'stuck_out_tongue':'\ud83d\ude1b', 8004 'stuck_out_tongue_closed_eyes':'\ud83d\ude1d', 8005 'stuck_out_tongue_winking_eye':'\ud83d\ude1c', 8006 'studio_microphone':'\ud83c\udf99', 8007 'stuffed_flatbread':'\ud83e\udd59', 8008 'sun_behind_large_cloud':'\ud83c\udf25', 8009 'sun_behind_rain_cloud':'\ud83c\udf26', 8010 'sun_behind_small_cloud':'\ud83c\udf24', 8011 'sun_with_face':'\ud83c\udf1e', 8012 'sunflower':'\ud83c\udf3b', 8013 'sunglasses':'\ud83d\ude0e', 8014 'sunny':'\u2600\ufe0f', 8015 'sunrise':'\ud83c\udf05', 8016 'sunrise_over_mountains':'\ud83c\udf04', 8017 'surfing_man':'\ud83c\udfc4', 8018 'surfing_woman':'\ud83c\udfc4‍\u2640\ufe0f', 8019 'sushi':'\ud83c\udf63', 8020 'suspension_railway':'\ud83d\ude9f', 8021 'sweat':'\ud83d\ude13', 8022 'sweat_drops':'\ud83d\udca6', 8023 'sweat_smile':'\ud83d\ude05', 8024 'sweet_potato':'\ud83c\udf60', 8025 'swimming_man':'\ud83c\udfca', 8026 'swimming_woman':'\ud83c\udfca‍\u2640\ufe0f', 8027 'symbols':'\ud83d\udd23', 8028 'synagogue':'\ud83d\udd4d', 8029 'syringe':'\ud83d\udc89', 8030 'taco':'\ud83c\udf2e', 8031 'tada':'\ud83c\udf89', 8032 'tanabata_tree':'\ud83c\udf8b', 8033 'taurus':'\u2649\ufe0f', 8034 'taxi':'\ud83d\ude95', 8035 'tea':'\ud83c\udf75', 8036 'telephone_receiver':'\ud83d\udcde', 8037 'telescope':'\ud83d\udd2d', 8038 'tennis':'\ud83c\udfbe', 8039 'tent':'\u26fa\ufe0f', 8040 'thermometer':'\ud83c\udf21', 8041 'thinking':'\ud83e\udd14', 8042 'thought_balloon':'\ud83d\udcad', 8043 'ticket':'\ud83c\udfab', 8044 'tickets':'\ud83c\udf9f', 8045 'tiger':'\ud83d\udc2f', 8046 'tiger2':'\ud83d\udc05', 8047 'timer_clock':'\u23f2', 8048 'tipping_hand_man':'\ud83d\udc81‍\u2642\ufe0f', 8049 'tired_face':'\ud83d\ude2b', 8050 'tm':'\u2122\ufe0f', 8051 'toilet':'\ud83d\udebd', 8052 'tokyo_tower':'\ud83d\uddfc', 8053 'tomato':'\ud83c\udf45', 8054 'tongue':'\ud83d\udc45', 8055 'top':'\ud83d\udd1d', 8056 'tophat':'\ud83c\udfa9', 8057 'tornado':'\ud83c\udf2a', 8058 'trackball':'\ud83d\uddb2', 8059 'tractor':'\ud83d\ude9c', 8060 'traffic_light':'\ud83d\udea5', 8061 'train':'\ud83d\ude8b', 8062 'train2':'\ud83d\ude86', 8063 'tram':'\ud83d\ude8a', 8064 'triangular_flag_on_post':'\ud83d\udea9', 8065 'triangular_ruler':'\ud83d\udcd0', 8066 'trident':'\ud83d\udd31', 8067 'triumph':'\ud83d\ude24', 8068 'trolleybus':'\ud83d\ude8e', 8069 'trophy':'\ud83c\udfc6', 8070 'tropical_drink':'\ud83c\udf79', 8071 'tropical_fish':'\ud83d\udc20', 8072 'truck':'\ud83d\ude9a', 8073 'trumpet':'\ud83c\udfba', 8074 'tulip':'\ud83c\udf37', 8075 'tumbler_glass':'\ud83e\udd43', 8076 'turkey':'\ud83e\udd83', 8077 'turtle':'\ud83d\udc22', 8078 'tv':'\ud83d\udcfa', 8079 'twisted_rightwards_arrows':'\ud83d\udd00', 8080 'two_hearts':'\ud83d\udc95', 8081 'two_men_holding_hands':'\ud83d\udc6c', 8082 'two_women_holding_hands':'\ud83d\udc6d', 8083 'u5272':'\ud83c\ude39', 8084 'u5408':'\ud83c\ude34', 8085 'u55b6':'\ud83c\ude3a', 8086 'u6307':'\ud83c\ude2f\ufe0f', 8087 'u6708':'\ud83c\ude37\ufe0f', 8088 'u6709':'\ud83c\ude36', 8089 'u6e80':'\ud83c\ude35', 8090 'u7121':'\ud83c\ude1a\ufe0f', 8091 'u7533':'\ud83c\ude38', 8092 'u7981':'\ud83c\ude32', 8093 'u7a7a':'\ud83c\ude33', 8094 'umbrella':'\u2614\ufe0f', 8095 'unamused':'\ud83d\ude12', 8096 'underage':'\ud83d\udd1e', 8097 'unicorn':'\ud83e\udd84', 8098 'unlock':'\ud83d\udd13', 8099 'up':'\ud83c\udd99', 8100 'upside_down_face':'\ud83d\ude43', 8101 'v':'\u270c\ufe0f', 8102 'vertical_traffic_light':'\ud83d\udea6', 8103 'vhs':'\ud83d\udcfc', 8104 'vibration_mode':'\ud83d\udcf3', 8105 'video_camera':'\ud83d\udcf9', 8106 'video_game':'\ud83c\udfae', 8107 'violin':'\ud83c\udfbb', 8108 'virgo':'\u264d\ufe0f', 8109 'volcano':'\ud83c\udf0b', 8110 'volleyball':'\ud83c\udfd0', 8111 'vs':'\ud83c\udd9a', 8112 'vulcan_salute':'\ud83d\udd96', 8113 'walking_man':'\ud83d\udeb6', 8114 'walking_woman':'\ud83d\udeb6‍\u2640\ufe0f', 8115 'waning_crescent_moon':'\ud83c\udf18', 8116 'waning_gibbous_moon':'\ud83c\udf16', 8117 'warning':'\u26a0\ufe0f', 8118 'wastebasket':'\ud83d\uddd1', 8119 'watch':'\u231a\ufe0f', 8120 'water_buffalo':'\ud83d\udc03', 8121 'watermelon':'\ud83c\udf49', 8122 'wave':'\ud83d\udc4b', 8123 'wavy_dash':'\u3030\ufe0f', 8124 'waxing_crescent_moon':'\ud83c\udf12', 8125 'wc':'\ud83d\udebe', 8126 'weary':'\ud83d\ude29', 8127 'wedding':'\ud83d\udc92', 8128 'weight_lifting_man':'\ud83c\udfcb\ufe0f', 8129 'weight_lifting_woman':'\ud83c\udfcb\ufe0f‍\u2640\ufe0f', 8130 'whale':'\ud83d\udc33', 8131 'whale2':'\ud83d\udc0b', 8132 'wheel_of_dharma':'\u2638\ufe0f', 8133 'wheelchair':'\u267f\ufe0f', 8134 'white_check_mark':'\u2705', 8135 'white_circle':'\u26aa\ufe0f', 8136 'white_flag':'\ud83c\udff3\ufe0f', 8137 'white_flower':'\ud83d\udcae', 8138 'white_large_square':'\u2b1c\ufe0f', 8139 'white_medium_small_square':'\u25fd\ufe0f', 8140 'white_medium_square':'\u25fb\ufe0f', 8141 'white_small_square':'\u25ab\ufe0f', 8142 'white_square_button':'\ud83d\udd33', 8143 'wilted_flower':'\ud83e\udd40', 8144 'wind_chime':'\ud83c\udf90', 8145 'wind_face':'\ud83c\udf2c', 8146 'wine_glass':'\ud83c\udf77', 8147 'wink':'\ud83d\ude09', 8148 'wolf':'\ud83d\udc3a', 8149 'woman':'\ud83d\udc69', 8150 'woman_artist':'\ud83d\udc69‍\ud83c\udfa8', 8151 'woman_astronaut':'\ud83d\udc69‍\ud83d\ude80', 8152 'woman_cartwheeling':'\ud83e\udd38‍\u2640\ufe0f', 8153 'woman_cook':'\ud83d\udc69‍\ud83c\udf73', 8154 'woman_facepalming':'\ud83e\udd26‍\u2640\ufe0f', 8155 'woman_factory_worker':'\ud83d\udc69‍\ud83c\udfed', 8156 'woman_farmer':'\ud83d\udc69‍\ud83c\udf3e', 8157 'woman_firefighter':'\ud83d\udc69‍\ud83d\ude92', 8158 'woman_health_worker':'\ud83d\udc69‍\u2695\ufe0f', 8159 'woman_judge':'\ud83d\udc69‍\u2696\ufe0f', 8160 'woman_juggling':'\ud83e\udd39‍\u2640\ufe0f', 8161 'woman_mechanic':'\ud83d\udc69‍\ud83d\udd27', 8162 'woman_office_worker':'\ud83d\udc69‍\ud83d\udcbc', 8163 'woman_pilot':'\ud83d\udc69‍\u2708\ufe0f', 8164 'woman_playing_handball':'\ud83e\udd3e‍\u2640\ufe0f', 8165 'woman_playing_water_polo':'\ud83e\udd3d‍\u2640\ufe0f', 8166 'woman_scientist':'\ud83d\udc69‍\ud83d\udd2c', 8167 'woman_shrugging':'\ud83e\udd37‍\u2640\ufe0f', 8168 'woman_singer':'\ud83d\udc69‍\ud83c\udfa4', 8169 'woman_student':'\ud83d\udc69‍\ud83c\udf93', 8170 'woman_teacher':'\ud83d\udc69‍\ud83c\udfeb', 8171 'woman_technologist':'\ud83d\udc69‍\ud83d\udcbb', 8172 'woman_with_turban':'\ud83d\udc73‍\u2640\ufe0f', 8173 'womans_clothes':'\ud83d\udc5a', 8174 'womans_hat':'\ud83d\udc52', 8175 'women_wrestling':'\ud83e\udd3c‍\u2640\ufe0f', 8176 'womens':'\ud83d\udeba', 8177 'world_map':'\ud83d\uddfa', 8178 'worried':'\ud83d\ude1f', 8179 'wrench':'\ud83d\udd27', 8180 'writing_hand':'\u270d\ufe0f', 8181 'x':'\u274c', 8182 'yellow_heart':'\ud83d\udc9b', 8183 'yen':'\ud83d\udcb4', 8184 'yin_yang':'\u262f\ufe0f', 8185 'yum':'\ud83d\ude0b', 8186 'zap':'\u26a1\ufe0f', 8187 'zipper_mouth_face':'\ud83e\udd10', 8188 'zzz':'\ud83d\udca4', 8189 8190 /* special emojis :P */ 8191 'octocat': '<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">', 8192 'showdown': '<span style="font-family: \'Anonymous Pro\', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;">S</span>' 8193 }; 8194 8195 /** 8196 * Created by Estevao on 31-05-2015. 8197 */ 8198 8199 /** 8200 * Showdown Converter class 8201 * @class 8202 * @param {object} [converterOptions] 8203 * @returns {Converter} 8204 */ 8205 showdown.Converter = function (converterOptions) { 8206 'use strict'; 8207 8208 var 8209 /** 8210 * Options used by this converter 8211 * @private 8212 * @type {{}} 8213 */ 8214 options = {}, 8215 8216 /** 8217 * Language extensions used by this converter 8218 * @private 8219 * @type {Array} 8220 */ 8221 langExtensions = [], 8222 8223 /** 8224 * Output modifiers extensions used by this converter 8225 * @private 8226 * @type {Array} 8227 */ 8228 outputModifiers = [], 8229 8230 /** 8231 * Event listeners 8232 * @private 8233 * @type {{}} 8234 */ 8235 listeners = {}, 8236 8237 /** 8238 * The flavor set in this converter 8239 */ 8240 setConvFlavor = setFlavor, 8241 8242 /** 8243 * Metadata of the document 8244 * @type {{parsed: {}, raw: string, format: string}} 8245 */ 8246 metadata = { 8247 parsed: {}, 8248 raw: '', 8249 format: '' 8250 }; 8251 8252 _constructor(); 8253 8254 /** 8255 * Converter constructor 8256 * @private 8257 */ 8258 function _constructor () { 8259 converterOptions = converterOptions || {}; 8260 8261 for (var gOpt in globalOptions) { 8262 if (globalOptions.hasOwnProperty(gOpt)) { 8263 options[gOpt] = globalOptions[gOpt]; 8264 } 8265 } 8266 8267 // Merge options 8268 if (typeof converterOptions === 'object') { 8269 for (var opt in converterOptions) { 8270 if (converterOptions.hasOwnProperty(opt)) { 8271 options[opt] = converterOptions[opt]; 8272 } 8273 } 8274 } else { 8275 throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions + 8276 ' was passed instead.'); 8277 } 8278 8279 if (options.extensions) { 8280 showdown.helper.forEach(options.extensions, _parseExtension); 8281 } 8282 } 8283 8284 /** 8285 * Parse extension 8286 * @param {*} ext 8287 * @param {string} [name=''] 8288 * @private 8289 */ 8290 function _parseExtension (ext, name) { 8291 8292 name = name || null; 8293 // If it's a string, the extension was previously loaded 8294 if (showdown.helper.isString(ext)) { 8295 ext = showdown.helper.stdExtName(ext); 8296 name = ext; 8297 8298 // LEGACY_SUPPORT CODE 8299 if (showdown.extensions[ext]) { 8300 console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' + 8301 'Please inform the developer that the extension should be updated!'); 8302 legacyExtensionLoading(showdown.extensions[ext], ext); 8303 return; 8304 // END LEGACY SUPPORT CODE 8305 8306 } else if (!showdown.helper.isUndefined(extensions[ext])) { 8307 ext = extensions[ext]; 8308 8309 } else { 8310 throw Error('Extension "' + ext + '" could not be loaded. It was either not found or is not a valid extension.'); 8311 } 8312 } 8313 8314 if (typeof ext === 'function') { 8315 ext = ext(); 8316 } 8317 8318 if (!showdown.helper.isArray(ext)) { 8319 ext = [ext]; 8320 } 8321 8322 var validExt = validate(ext, name); 8323 if (!validExt.valid) { 8324 throw Error(validExt.error); 8325 } 8326 8327 for (var i = 0; i < ext.length; ++i) { 8328 switch (ext[i].type) { 8329 8330 case 'lang': 8331 langExtensions.push(ext[i]); 8332 break; 8333 8334 case 'output': 8335 outputModifiers.push(ext[i]); 8336 break; 8337 } 8338 if (ext[i].hasOwnProperty('listeners')) { 8339 for (var ln in ext[i].listeners) { 8340 if (ext[i].listeners.hasOwnProperty(ln)) { 8341 listen(ln, ext[i].listeners[ln]); 8342 } 8343 } 8344 } 8345 } 8346 8347 } 8348 8349 /** 8350 * LEGACY_SUPPORT 8351 * @param {*} ext 8352 * @param {string} name 8353 */ 8354 function legacyExtensionLoading (ext, name) { 8355 if (typeof ext === 'function') { 8356 ext = ext(new showdown.Converter()); 8357 } 8358 if (!showdown.helper.isArray(ext)) { 8359 ext = [ext]; 8360 } 8361 var valid = validate(ext, name); 8362 8363 if (!valid.valid) { 8364 throw Error(valid.error); 8365 } 8366 8367 for (var i = 0; i < ext.length; ++i) { 8368 switch (ext[i].type) { 8369 case 'lang': 8370 langExtensions.push(ext[i]); 8371 break; 8372 case 'output': 8373 outputModifiers.push(ext[i]); 8374 break; 8375 default:// should never reach here 8376 throw Error('Extension loader error: Type unrecognized!!!'); 8377 } 8378 } 8379 } 8380 8381 /** 8382 * Listen to an event 8383 * @param {string} name 8384 * @param {function} callback 8385 */ 8386 function listen (name, callback) { 8387 if (!showdown.helper.isString(name)) { 8388 throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given'); 8389 } 8390 8391 if (typeof callback !== 'function') { 8392 throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given'); 8393 } 8394 8395 if (!listeners.hasOwnProperty(name)) { 8396 listeners[name] = []; 8397 } 8398 listeners[name].push(callback); 8399 } 8400 8401 function rTrimInputText (text) { 8402 var rsp = text.match(/^\s*/)[0].length, 8403 rgx = new RegExp('^\\s{0,' + rsp + '}', 'gm'); 8404 return text.replace(rgx, ''); 8405 } 8406 8407 /** 8408 * Dispatch an event 8409 * @private 8410 * @param {string} evtName Event name 8411 * @param {string} text Text 8412 * @param {{}} options Converter Options 8413 * @param {{}} globals 8414 * @returns {string} 8415 */ 8416 this._dispatch = function dispatch (evtName, text, options, globals) { 8417 if (listeners.hasOwnProperty(evtName)) { 8418 for (var ei = 0; ei < listeners[evtName].length; ++ei) { 8419 var nText = listeners[evtName][ei](evtName, text, this, options, globals); 8420 if (nText && typeof nText !== 'undefined') { 8421 text = nText; 8422 } 8423 } 8424 } 8425 return text; 8426 }; 8427 8428 /** 8429 * Listen to an event 8430 * @param {string} name 8431 * @param {function} callback 8432 * @returns {showdown.Converter} 8433 */ 8434 this.listen = function (name, callback) { 8435 listen(name, callback); 8436 return this; 8437 }; 8438 8439 /** 8440 * Converts a markdown string into HTML 8441 * @param {string} text 8442 * @returns {*} 8443 */ 8444 this.makeHtml = function (text) { 8445 //check if text is not falsy 8446 if (!text) { 8447 return text; 8448 } 8449 8450 var globals = { 8451 gHtmlBlocks: [], 8452 gHtmlMdBlocks: [], 8453 gHtmlSpans: [], 8454 gUrls: {}, 8455 gTitles: {}, 8456 gDimensions: {}, 8457 gListLevel: 0, 8458 hashLinkCounts: {}, 8459 langExtensions: langExtensions, 8460 outputModifiers: outputModifiers, 8461 converter: this, 8462 ghCodeBlocks: [], 8463 metadata: { 8464 parsed: {}, 8465 raw: '', 8466 format: '' 8467 } 8468 }; 8469 8470 // This lets us use ¨ trema as an escape char to avoid md5 hashes 8471 // The choice of character is arbitrary; anything that isn't 8472 // magic in Markdown will work. 8473 text = text.replace(/¨/g, '¨T'); 8474 8475 // Replace $ with ¨D 8476 // RegExp interprets $ as a special character 8477 // when it's in a replacement string 8478 text = text.replace(/\$/g, '¨D'); 8479 8480 // Standardize line endings 8481 text = text.replace(/\r\n/g, '\n'); // DOS to Unix 8482 text = text.replace(/\r/g, '\n'); // Mac to Unix 8483 8484 // Stardardize line spaces 8485 text = text.replace(/\u00A0/g, ' '); 8486 8487 if (options.smartIndentationFix) { 8488 text = rTrimInputText(text); 8489 } 8490 8491 // Make sure text begins and ends with a couple of newlines: 8492 text = '\n\n' + text + '\n\n'; 8493 8494 // detab 8495 text = showdown.subParser('detab')(text, options, globals); 8496 8497 /** 8498 * Strip any lines consisting only of spaces and tabs. 8499 * This makes subsequent regexs easier to write, because we can 8500 * match consecutive blank lines with /\n+/ instead of something 8501 * contorted like /[ \t]*\n+/ 8502 */ 8503 text = text.replace(/^[ \t]+$/mg, ''); 8504 8505 //run languageExtensions 8506 showdown.helper.forEach(langExtensions, function (ext) { 8507 text = showdown.subParser('runExtension')(ext, text, options, globals); 8508 }); 8509 8510 // run the sub parsers 8511 text = showdown.subParser('metadata')(text, options, globals); 8512 text = showdown.subParser('hashPreCodeTags')(text, options, globals); 8513 text = showdown.subParser('githubCodeBlocks')(text, options, globals); 8514 text = showdown.subParser('hashHTMLBlocks')(text, options, globals); 8515 text = showdown.subParser('hashCodeTags')(text, options, globals); 8516 text = showdown.subParser('stripLinkDefinitions')(text, options, globals); 8517 text = showdown.subParser('blockGamut')(text, options, globals); 8518 text = showdown.subParser('unhashHTMLSpans')(text, options, globals); 8519 text = showdown.subParser('unescapeSpecialChars')(text, options, globals); 8520 8521 // attacklab: Restore dollar signs 8522 text = text.replace(/¨D/g, '$$'); 8523 8524 // attacklab: Restore tremas 8525 text = text.replace(/¨T/g, '¨'); 8526 8527 // render a complete html document instead of a partial if the option is enabled 8528 text = showdown.subParser('completeHTMLDocument')(text, options, globals); 8529 8530 // Run output modifiers 8531 showdown.helper.forEach(outputModifiers, function (ext) { 8532 text = showdown.subParser('runExtension')(ext, text, options, globals); 8533 }); 8534 8535 // update metadata 8536 metadata = globals.metadata; 8537 return text; 8538 }; 8539 8540 /** 8541 * Converts an HTML string into a markdown string 8542 * @param src 8543 * @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used. 8544 * @returns {string} 8545 */ 8546 this.makeMarkdown = this.makeMd = function (src, HTMLParser) { 8547 8548 // replace \r\n with \n 8549 src = src.replace(/\r\n/g, '\n'); 8550 src = src.replace(/\r/g, '\n'); // old macs 8551 8552 // due to an edge case, we need to find this: > < 8553 // to prevent removing of non silent white spaces 8554 // ex: <em>this is</em> <strong>sparta</strong> 8555 src = src.replace(/>[ \t]+</, '>¨NBSP;<'); 8556 8557 if (!HTMLParser) { 8558 if (window && window.document) { 8559 HTMLParser = window.document; 8560 } else { 8561 throw new Error('HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM'); 8562 } 8563 } 8564 8565 var doc = HTMLParser.createElement('div'); 8566 doc.innerHTML = src; 8567 8568 var globals = { 8569 preList: substitutePreCodeTags(doc) 8570 }; 8571 8572 // remove all newlines and collapse spaces 8573 clean(doc); 8574 8575 // some stuff, like accidental reference links must now be escaped 8576 // TODO 8577 // doc.innerHTML = doc.innerHTML.replace(/\[[\S\t ]]/); 8578 8579 var nodes = doc.childNodes, 8580 mdDoc = ''; 8581 8582 for (var i = 0; i < nodes.length; i++) { 8583 mdDoc += showdown.subParser('makeMarkdown.node')(nodes[i], globals); 8584 } 8585 8586 function clean (node) { 8587 for (var n = 0; n < node.childNodes.length; ++n) { 8588 var child = node.childNodes[n]; 8589 if (child.nodeType === 3) { 8590 if (!/\S/.test(child.nodeValue)) { 8591 node.removeChild(child); 8592 --n; 8593 } else { 8594 child.nodeValue = child.nodeValue.split('\n').join(' '); 8595 child.nodeValue = child.nodeValue.replace(/(\s)+/g, '$1'); 8596 } 8597 } else if (child.nodeType === 1) { 8598 clean(child); 8599 } 8600 } 8601 } 8602 8603 // find all pre tags and replace contents with placeholder 8604 // we need this so that we can remove all indentation from html 8605 // to ease up parsing 8606 function substitutePreCodeTags (doc) { 8607 8608 var pres = doc.querySelectorAll('pre'), 8609 presPH = []; 8610 8611 for (var i = 0; i < pres.length; ++i) { 8612 8613 if (pres[i].childElementCount === 1 && pres[i].firstChild.tagName.toLowerCase() === 'code') { 8614 var content = pres[i].firstChild.innerHTML.trim(), 8615 language = pres[i].firstChild.getAttribute('data-language') || ''; 8616 8617 // if data-language attribute is not defined, then we look for class language-* 8618 if (language === '') { 8619 var classes = pres[i].firstChild.className.split(' '); 8620 for (var c = 0; c < classes.length; ++c) { 8621 var matches = classes[c].match(/^language-(.+)$/); 8622 if (matches !== null) { 8623 language = matches[1]; 8624 break; 8625 } 8626 } 8627 } 8628 8629 // unescape html entities in content 8630 content = showdown.helper.unescapeHTMLEntities(content); 8631 8632 presPH.push(content); 8633 pres[i].outerHTML = '<precode language="' + language + '" precodenum="' + i.toString() + '"></precode>'; 8634 } else { 8635 presPH.push(pres[i].innerHTML); 8636 pres[i].innerHTML = ''; 8637 pres[i].setAttribute('prenum', i.toString()); 8638 } 8639 } 8640 return presPH; 8641 } 8642 8643 return mdDoc; 8644 }; 8645 8646 /** 8647 * Set an option of this Converter instance 8648 * @param {string} key 8649 * @param {*} value 8650 */ 8651 this.setOption = function (key, value) { 8652 options[key] = value; 8653 }; 8654 8655 /** 8656 * Get the option of this Converter instance 8657 * @param {string} key 8658 * @returns {*} 8659 */ 8660 this.getOption = function (key) { 8661 return options[key]; 8662 }; 8663 8664 /** 8665 * Get the options of this Converter instance 8666 * @returns {{}} 8667 */ 8668 this.getOptions = function () { 8669 return options; 8670 }; 8671 8672 /** 8673 * Add extension to THIS converter 8674 * @param {{}} extension 8675 * @param {string} [name=null] 8676 */ 8677 this.addExtension = function (extension, name) { 8678 name = name || null; 8679 _parseExtension(extension, name); 8680 }; 8681 8682 /** 8683 * Use a global registered extension with THIS converter 8684 * @param {string} extensionName Name of the previously registered extension 8685 */ 8686 this.useExtension = function (extensionName) { 8687 _parseExtension(extensionName); 8688 }; 8689 8690 /** 8691 * Set the flavor THIS converter should use 8692 * @param {string} name 8693 */ 8694 this.setFlavor = function (name) { 8695 if (!flavor.hasOwnProperty(name)) { 8696 throw Error(name + ' flavor was not found'); 8697 } 8698 var preset = flavor[name]; 8699 setConvFlavor = name; 8700 for (var option in preset) { 8701 if (preset.hasOwnProperty(option)) { 8702 options[option] = preset[option]; 8703 } 8704 } 8705 }; 8706 8707 /** 8708 * Get the currently set flavor of this converter 8709 * @returns {string} 8710 */ 8711 this.getFlavor = function () { 8712 return setConvFlavor; 8713 }; 8714 8715 /** 8716 * Remove an extension from THIS converter. 8717 * Note: This is a costly operation. It's better to initialize a new converter 8718 * and specify the extensions you wish to use 8719 * @param {Array} extension 8720 */ 8721 this.removeExtension = function (extension) { 8722 if (!showdown.helper.isArray(extension)) { 8723 extension = [extension]; 8724 } 8725 for (var a = 0; a < extension.length; ++a) { 8726 var ext = extension[a]; 8727 for (var i = 0; i < langExtensions.length; ++i) { 8728 if (langExtensions[i] === ext) { 8729 langExtensions[i].splice(i, 1); 8730 } 8731 } 8732 for (var ii = 0; ii < outputModifiers.length; ++i) { 8733 if (outputModifiers[ii] === ext) { 8734 outputModifiers[ii].splice(i, 1); 8735 } 8736 } 8737 } 8738 }; 8739 8740 /** 8741 * Get all extension of THIS converter 8742 * @returns {{language: Array, output: Array}} 8743 */ 8744 this.getAllExtensions = function () { 8745 return { 8746 language: langExtensions, 8747 output: outputModifiers 8748 }; 8749 }; 8750 8751 /** 8752 * Get the metadata of the previously parsed document 8753 * @param raw 8754 * @returns {string|{}} 8755 */ 8756 this.getMetadata = function (raw) { 8757 if (raw) { 8758 return metadata.raw; 8759 } else { 8760 return metadata.parsed; 8761 } 8762 }; 8763 8764 /** 8765 * Get the metadata format of the previously parsed document 8766 * @returns {string} 8767 */ 8768 this.getMetadataFormat = function () { 8769 return metadata.format; 8770 }; 8771 8772 /** 8773 * Private: set a single key, value metadata pair 8774 * @param {string} key 8775 * @param {string} value 8776 */ 8777 this._setMetadataPair = function (key, value) { 8778 metadata.parsed[key] = value; 8779 }; 8780 8781 /** 8782 * Private: set metadata format 8783 * @param {string} format 8784 */ 8785 this._setMetadataFormat = function (format) { 8786 metadata.format = format; 8787 }; 8788 8789 /** 8790 * Private: set metadata raw text 8791 * @param {string} raw 8792 */ 8793 this._setMetadataRaw = function (raw) { 8794 metadata.raw = raw; 8795 }; 8796 }; 8797 8798 /** 8799 * Turn Markdown link shortcuts into XHTML <a> tags. 8800 */ 8801 showdown.subParser('anchors', function (text, options, globals) { 8802 'use strict'; 8803 8804 text = globals.converter._dispatch('anchors.before', text, options, globals); 8805 8806 var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) { 8807 if (showdown.helper.isUndefined(title)) { 8808 title = ''; 8809 } 8810 linkId = linkId.toLowerCase(); 8811 8812 // Special case for explicit empty url 8813 if (wholeMatch.search(/\(<?\s*>? ?(['"].*['"])?\)$/m) > -1) { 8814 url = ''; 8815 } else if (!url) { 8816 if (!linkId) { 8817 // lower-case and turn embedded newlines into spaces 8818 linkId = linkText.toLowerCase().replace(/ ?\n/g, ' '); 8819 } 8820 url = '#' + linkId; 8821 8822 if (!showdown.helper.isUndefined(globals.gUrls[linkId])) { 8823 url = globals.gUrls[linkId]; 8824 if (!showdown.helper.isUndefined(globals.gTitles[linkId])) { 8825 title = globals.gTitles[linkId]; 8826 } 8827 } else { 8828 return wholeMatch; 8829 } 8830 } 8831 8832 //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance 8833 url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); 8834 8835 var result = '<a href="' + url + '"'; 8836 8837 if (title !== '' && title !== null) { 8838 title = title.replace(/"/g, '"'); 8839 //title = showdown.helper.escapeCharacters(title, '*_', false); // replaced line to improve performance 8840 title = title.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); 8841 result += ' title="' + title + '"'; 8842 } 8843 8844 // optionLinksInNewWindow only applies 8845 // to external links. Hash links (#) open in same page 8846 if (options.openLinksInNewWindow && !/^#/.test(url)) { 8847 // escaped _ 8848 result += ' target="¨E95Eblank"'; 8849 } 8850 8851 result += '>' + linkText + '</a>'; 8852 8853 return result; 8854 }; 8855 8856 // First, handle reference-style links: [link text] [id] 8857 text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g, writeAnchorTag); 8858 8859 // Next, inline-style links: [link text](url "optional title") 8860 // cases with crazy urls like ./image/cat1).png 8861 text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g, 8862 writeAnchorTag); 8863 8864 // normal cases 8865 text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g, 8866 writeAnchorTag); 8867 8868 // handle reference-style shortcuts: [link text] 8869 // These must come last in case you've also got [link test][1] 8870 // or [link test](/foo) 8871 text = text.replace(/\[([^\[\]]+)]()()()()()/g, writeAnchorTag); 8872 8873 // Lastly handle GithubMentions if option is enabled 8874 if (options.ghMentions) { 8875 text = text.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gmi, function (wm, st, escape, mentions, username) { 8876 if (escape === '\\') { 8877 return st + mentions; 8878 } 8879 8880 //check if options.ghMentionsLink is a string 8881 if (!showdown.helper.isString(options.ghMentionsLink)) { 8882 throw new Error('ghMentionsLink option must be a string'); 8883 } 8884 var lnk = options.ghMentionsLink.replace(/\{u}/g, username), 8885 target = ''; 8886 if (options.openLinksInNewWindow) { 8887 target = ' target="¨E95Eblank"'; 8888 } 8889 return st + '<a href="' + lnk + '"' + target + '>' + mentions + '</a>'; 8890 }); 8891 } 8892 8893 text = globals.converter._dispatch('anchors.after', text, options, globals); 8894 return text; 8895 }); 8896 8897 // url allowed chars [a-z\d_.~:/?#[]@!$&'()*+,;=-] 8898 8899 var simpleURLRegex = /([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi, 8900 simpleURLRegex2 = /([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi, 8901 delimUrlRegex = /()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi, 8902 simpleMailRegex = /(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gmi, 8903 delimMailRegex = /<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi, 8904 8905 replaceLink = function (options) { 8906 'use strict'; 8907 return function (wm, leadingMagicChars, link, m2, m3, trailingPunctuation, trailingMagicChars) { 8908 link = link.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); 8909 var lnkTxt = link, 8910 append = '', 8911 target = '', 8912 lmc = leadingMagicChars || '', 8913 tmc = trailingMagicChars || ''; 8914 if (/^www\./i.test(link)) { 8915 link = link.replace(/^www\./i, 'http://www.'); 8916 } 8917 if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) { 8918 append = trailingPunctuation; 8919 } 8920 if (options.openLinksInNewWindow) { 8921 target = ' target="¨E95Eblank"'; 8922 } 8923 return lmc + '<a href="' + link + '"' + target + '>' + lnkTxt + '</a>' + append + tmc; 8924 }; 8925 }, 8926 8927 replaceMail = function (options, globals) { 8928 'use strict'; 8929 return function (wholeMatch, b, mail) { 8930 var href = 'mailto:'; 8931 b = b || ''; 8932 mail = showdown.subParser('unescapeSpecialChars')(mail, options, globals); 8933 if (options.encodeEmails) { 8934 href = showdown.helper.encodeEmailAddress(href + mail); 8935 mail = showdown.helper.encodeEmailAddress(mail); 8936 } else { 8937 href = href + mail; 8938 } 8939 return b + '<a href="' + href + '">' + mail + '</a>'; 8940 }; 8941 }; 8942 8943 showdown.subParser('autoLinks', function (text, options, globals) { 8944 'use strict'; 8945 8946 text = globals.converter._dispatch('autoLinks.before', text, options, globals); 8947 8948 text = text.replace(delimUrlRegex, replaceLink(options)); 8949 text = text.replace(delimMailRegex, replaceMail(options, globals)); 8950 8951 text = globals.converter._dispatch('autoLinks.after', text, options, globals); 8952 8953 return text; 8954 }); 8955 8956 showdown.subParser('simplifiedAutoLinks', function (text, options, globals) { 8957 'use strict'; 8958 8959 if (!options.simplifiedAutoLink) { 8960 return text; 8961 } 8962 8963 text = globals.converter._dispatch('simplifiedAutoLinks.before', text, options, globals); 8964 8965 if (options.excludeTrailingPunctuationFromURLs) { 8966 text = text.replace(simpleURLRegex2, replaceLink(options)); 8967 } else { 8968 text = text.replace(simpleURLRegex, replaceLink(options)); 8969 } 8970 text = text.replace(simpleMailRegex, replaceMail(options, globals)); 8971 8972 text = globals.converter._dispatch('simplifiedAutoLinks.after', text, options, globals); 8973 8974 return text; 8975 }); 8976 8977 /** 8978 * These are all the transformations that form block-level 8979 * tags like paragraphs, headers, and list items. 8980 */ 8981 showdown.subParser('blockGamut', function (text, options, globals) { 8982 'use strict'; 8983 8984 text = globals.converter._dispatch('blockGamut.before', text, options, globals); 8985 8986 // we parse blockquotes first so that we can have headings and hrs 8987 // inside blockquotes 8988 text = showdown.subParser('blockQuotes')(text, options, globals); 8989 text = showdown.subParser('headers')(text, options, globals); 8990 8991 // Do Horizontal Rules: 8992 text = showdown.subParser('horizontalRule')(text, options, globals); 8993 8994 text = showdown.subParser('lists')(text, options, globals); 8995 text = showdown.subParser('codeBlocks')(text, options, globals); 8996 text = showdown.subParser('tables')(text, options, globals); 8997 8998 // We already ran _HashHTMLBlocks() before, in Markdown(), but that 8999 // was to escape raw HTML in the original Markdown source. This time, 9000 // we're escaping the markup we've just created, so that we don't wrap 9001 // <p> tags around block-level tags. 9002 text = showdown.subParser('hashHTMLBlocks')(text, options, globals); 9003 text = showdown.subParser('paragraphs')(text, options, globals); 9004 9005 text = globals.converter._dispatch('blockGamut.after', text, options, globals); 9006 9007 return text; 9008 }); 9009 9010 showdown.subParser('blockQuotes', function (text, options, globals) { 9011 'use strict'; 9012 9013 text = globals.converter._dispatch('blockQuotes.before', text, options, globals); 9014 9015 // add a couple extra lines after the text and endtext mark 9016 text = text + '\n\n'; 9017 9018 var rgx = /(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm; 9019 9020 if (options.splitAdjacentBlockquotes) { 9021 rgx = /^ {0,3}>[\s\S]*?(?:\n\n)/gm; 9022 } 9023 9024 text = text.replace(rgx, function (bq) { 9025 // attacklab: hack around Konqueror 3.5.4 bug: 9026 // "----------bug".replace(/^-/g,"") == "bug" 9027 bq = bq.replace(/^[ \t]*>[ \t]?/gm, ''); // trim one level of quoting 9028 9029 // attacklab: clean up hack 9030 bq = bq.replace(/¨0/g, ''); 9031 9032 bq = bq.replace(/^[ \t]+$/gm, ''); // trim whitespace-only lines 9033 bq = showdown.subParser('githubCodeBlocks')(bq, options, globals); 9034 bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse 9035 9036 bq = bq.replace(/(^|\n)/g, '$1 '); 9037 // These leading spaces screw with <pre> content, so we need to fix that: 9038 bq = bq.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm, function (wholeMatch, m1) { 9039 var pre = m1; 9040 // attacklab: hack around Konqueror 3.5.4 bug: 9041 pre = pre.replace(/^ /mg, '¨0'); 9042 pre = pre.replace(/¨0/g, ''); 9043 return pre; 9044 }); 9045 9046 return showdown.subParser('hashBlock')('<blockquote>\n' + bq + '\n</blockquote>', options, globals); 9047 }); 9048 9049 text = globals.converter._dispatch('blockQuotes.after', text, options, globals); 9050 return text; 9051 }); 9052 9053 /** 9054 * Process Markdown `<pre><code>` blocks. 9055 */ 9056 showdown.subParser('codeBlocks', function (text, options, globals) { 9057 'use strict'; 9058 9059 text = globals.converter._dispatch('codeBlocks.before', text, options, globals); 9060 9061 // sentinel workarounds for lack of \A and \Z, safari\khtml bug 9062 text += '¨0'; 9063 9064 var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g; 9065 text = text.replace(pattern, function (wholeMatch, m1, m2) { 9066 var codeblock = m1, 9067 nextChar = m2, 9068 end = '\n'; 9069 9070 codeblock = showdown.subParser('outdent')(codeblock, options, globals); 9071 codeblock = showdown.subParser('encodeCode')(codeblock, options, globals); 9072 codeblock = showdown.subParser('detab')(codeblock, options, globals); 9073 codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines 9074 codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines 9075 9076 if (options.omitExtraWLInCodeBlocks) { 9077 end = ''; 9078 } 9079 9080 codeblock = '<pre><code>' + codeblock + end + '</code></pre>'; 9081 9082 return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar; 9083 }); 9084 9085 // strip sentinel 9086 text = text.replace(/¨0/, ''); 9087 9088 text = globals.converter._dispatch('codeBlocks.after', text, options, globals); 9089 return text; 9090 }); 9091 9092 /** 9093 * 9094 * * Backtick quotes are used for <code></code> spans. 9095 * 9096 * * You can use multiple backticks as the delimiters if you want to 9097 * include literal backticks in the code span. So, this input: 9098 * 9099 * Just type ``foo `bar` baz`` at the prompt. 9100 * 9101 * Will translate to: 9102 * 9103 * <p>Just type <code>foo `bar` baz</code> at the prompt.</p> 9104 * 9105 * There's no arbitrary limit to the number of backticks you 9106 * can use as delimters. If you need three consecutive backticks 9107 * in your code, use four for delimiters, etc. 9108 * 9109 * * You can use spaces to get literal backticks at the edges: 9110 * 9111 * ... type `` `bar` `` ... 9112 * 9113 * Turns to: 9114 * 9115 * ... type <code>`bar`</code> ... 9116 */ 9117 showdown.subParser('codeSpans', function (text, options, globals) { 9118 'use strict'; 9119 9120 text = globals.converter._dispatch('codeSpans.before', text, options, globals); 9121 9122 if (typeof(text) === 'undefined') { 9123 text = ''; 9124 } 9125 text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm, 9126 function (wholeMatch, m1, m2, m3) { 9127 var c = m3; 9128 c = c.replace(/^([ \t]*)/g, ''); // leading whitespace 9129 c = c.replace(/[ \t]*$/g, ''); // trailing whitespace 9130 c = showdown.subParser('encodeCode')(c, options, globals); 9131 c = m1 + '<code>' + c + '</code>'; 9132 c = showdown.subParser('hashHTMLSpans')(c, options, globals); 9133 return c; 9134 } 9135 ); 9136 9137 text = globals.converter._dispatch('codeSpans.after', text, options, globals); 9138 return text; 9139 }); 9140 9141 /** 9142 * Create a full HTML document from the processed markdown 9143 */ 9144 showdown.subParser('completeHTMLDocument', function (text, options, globals) { 9145 'use strict'; 9146 9147 if (!options.completeHTMLDocument) { 9148 return text; 9149 } 9150 9151 text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals); 9152 9153 var doctype = 'html', 9154 doctypeParsed = '<!DOCTYPE HTML>\n', 9155 title = '', 9156 charset = '<meta charset="utf-8">\n', 9157 lang = '', 9158 metadata = ''; 9159 9160 if (typeof globals.metadata.parsed.doctype !== 'undefined') { 9161 doctypeParsed = '<!DOCTYPE ' + globals.metadata.parsed.doctype + '>\n'; 9162 doctype = globals.metadata.parsed.doctype.toString().toLowerCase(); 9163 if (doctype === 'html' || doctype === 'html5') { 9164 charset = '<meta charset="utf-8">'; 9165 } 9166 } 9167 9168 for (var meta in globals.metadata.parsed) { 9169 if (globals.metadata.parsed.hasOwnProperty(meta)) { 9170 switch (meta.toLowerCase()) { 9171 case 'doctype': 9172 break; 9173 9174 case 'title': 9175 title = '<title>' + globals.metadata.parsed.title + '</title>\n'; 9176 break; 9177 9178 case 'charset': 9179 if (doctype === 'html' || doctype === 'html5') { 9180 charset = '<meta charset="' + globals.metadata.parsed.charset + '">\n'; 9181 } else { 9182 charset = '<meta name="charset" content="' + globals.metadata.parsed.charset + '">\n'; 9183 } 9184 break; 9185 9186 case 'language': 9187 case 'lang': 9188 lang = ' lang="' + globals.metadata.parsed[meta] + '"'; 9189 metadata += '<meta name="' + meta + '" content="' + globals.metadata.parsed[meta] + '">\n'; 9190 break; 9191 9192 default: 9193 metadata += '<meta name="' + meta + '" content="' + globals.metadata.parsed[meta] + '">\n'; 9194 } 9195 } 9196 } 9197 9198 text = doctypeParsed + '<html' + lang + '>\n<head>\n' + title + charset + metadata + '</head>\n<body>\n' + text.trim() + '\n</body>\n</html>'; 9199 9200 text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals); 9201 return text; 9202 }); 9203 9204 /** 9205 * Convert all tabs to spaces 9206 */ 9207 showdown.subParser('detab', function (text, options, globals) { 9208 'use strict'; 9209 text = globals.converter._dispatch('detab.before', text, options, globals); 9210 9211 // expand first n-1 tabs 9212 text = text.replace(/\t(?=\t)/g, ' '); // g_tab_width 9213 9214 // replace the nth with two sentinels 9215 text = text.replace(/\t/g, '¨A¨B'); 9216 9217 // use the sentinel to anchor our regex so it doesn't explode 9218 text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) { 9219 var leadingText = m1, 9220 numSpaces = 4 - leadingText.length % 4; // g_tab_width 9221 9222 // there *must* be a better way to do this: 9223 for (var i = 0; i < numSpaces; i++) { 9224 leadingText += ' '; 9225 } 9226 9227 return leadingText; 9228 }); 9229 9230 // clean up sentinels 9231 text = text.replace(/¨A/g, ' '); // g_tab_width 9232 text = text.replace(/¨B/g, ''); 9233 9234 text = globals.converter._dispatch('detab.after', text, options, globals); 9235 return text; 9236 }); 9237 9238 showdown.subParser('ellipsis', function (text, options, globals) { 9239 'use strict'; 9240 9241 text = globals.converter._dispatch('ellipsis.before', text, options, globals); 9242 9243 text = text.replace(/\.\.\./g, '…'); 9244 9245 text = globals.converter._dispatch('ellipsis.after', text, options, globals); 9246 9247 return text; 9248 }); 9249 9250 /** 9251 * Turn emoji codes into emojis 9252 * 9253 * List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis 9254 */ 9255 showdown.subParser('emoji', function (text, options, globals) { 9256 'use strict'; 9257 9258 if (!options.emoji) { 9259 return text; 9260 } 9261 9262 text = globals.converter._dispatch('emoji.before', text, options, globals); 9263 9264 var emojiRgx = /:([\S]+?):/g; 9265 9266 text = text.replace(emojiRgx, function (wm, emojiCode) { 9267 if (showdown.helper.emojis.hasOwnProperty(emojiCode)) { 9268 return showdown.helper.emojis[emojiCode]; 9269 } 9270 return wm; 9271 }); 9272 9273 text = globals.converter._dispatch('emoji.after', text, options, globals); 9274 9275 return text; 9276 }); 9277 9278 /** 9279 * Smart processing for ampersands and angle brackets that need to be encoded. 9280 */ 9281 showdown.subParser('encodeAmpsAndAngles', function (text, options, globals) { 9282 'use strict'; 9283 text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals); 9284 9285 // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: 9286 // http://bumppo.net/projects/amputator/ 9287 text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, '&'); 9288 9289 // Encode naked <'s 9290 text = text.replace(/<(?![a-z\/?$!])/gi, '<'); 9291 9292 // Encode < 9293 text = text.replace(/</g, '<'); 9294 9295 // Encode > 9296 text = text.replace(/>/g, '>'); 9297 9298 text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals); 9299 return text; 9300 }); 9301 9302 /** 9303 * Returns the string, with after processing the following backslash escape sequences. 9304 * 9305 * attacklab: The polite way to do this is with the new escapeCharacters() function: 9306 * 9307 * text = escapeCharacters(text,"\\",true); 9308 * text = escapeCharacters(text,"`*_{}[]()>#+-.!",true); 9309 * 9310 * ...but we're sidestepping its use of the (slow) RegExp constructor 9311 * as an optimization for Firefox. This function gets called a LOT. 9312 */ 9313 showdown.subParser('encodeBackslashEscapes', function (text, options, globals) { 9314 'use strict'; 9315 text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals); 9316 9317 text = text.replace(/\\(\\)/g, showdown.helper.escapeCharactersCallback); 9318 text = text.replace(/\\([`*_{}\[\]()>#+.!~=|-])/g, showdown.helper.escapeCharactersCallback); 9319 9320 text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals); 9321 return text; 9322 }); 9323 9324 /** 9325 * Encode/escape certain characters inside Markdown code runs. 9326 * The point is that in code, these characters are literals, 9327 * and lose their special Markdown meanings. 9328 */ 9329 showdown.subParser('encodeCode', function (text, options, globals) { 9330 'use strict'; 9331 9332 text = globals.converter._dispatch('encodeCode.before', text, options, globals); 9333 9334 // Encode all ampersands; HTML entities are not 9335 // entities within a Markdown code span. 9336 text = text 9337 .replace(/&/g, '&') 9338 // Do the angle bracket song and dance: 9339 .replace(/</g, '<') 9340 .replace(/>/g, '>') 9341 // Now, escape characters that are magic in Markdown: 9342 .replace(/([*_{}\[\]\\=~-])/g, showdown.helper.escapeCharactersCallback); 9343 9344 text = globals.converter._dispatch('encodeCode.after', text, options, globals); 9345 return text; 9346 }); 9347 9348 /** 9349 * Within tags -- meaning between < and > -- encode [\ ` * _ ~ =] so they 9350 * don't conflict with their use in Markdown for code, italics and strong. 9351 */ 9352 showdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) { 9353 'use strict'; 9354 text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals); 9355 9356 // Build a regex to find HTML tags. 9357 var tags = /<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi, 9358 comments = /<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi; 9359 9360 text = text.replace(tags, function (wholeMatch) { 9361 return wholeMatch 9362 .replace(/(.)<\/?code>(?=.)/g, '$1`') 9363 .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback); 9364 }); 9365 9366 text = text.replace(comments, function (wholeMatch) { 9367 return wholeMatch 9368 .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback); 9369 }); 9370 9371 text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals); 9372 return text; 9373 }); 9374 9375 /** 9376 * Handle github codeblocks prior to running HashHTML so that 9377 * HTML contained within the codeblock gets escaped properly 9378 * Example: 9379 * ```ruby 9380 * def hello_world(x) 9381 * puts "Hello, #{x}" 9382 * end 9383 * ``` 9384 */ 9385 showdown.subParser('githubCodeBlocks', function (text, options, globals) { 9386 'use strict'; 9387 9388 // early exit if option is not enabled 9389 if (!options.ghCodeBlocks) { 9390 return text; 9391 } 9392 9393 text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals); 9394 9395 text += '¨0'; 9396 9397 text = text.replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g, function (wholeMatch, delim, language, codeblock) { 9398 var end = (options.omitExtraWLInCodeBlocks) ? '' : '\n'; 9399 9400 // First parse the github code block 9401 codeblock = showdown.subParser('encodeCode')(codeblock, options, globals); 9402 codeblock = showdown.subParser('detab')(codeblock, options, globals); 9403 codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines 9404 codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing whitespace 9405 9406 codeblock = '<pre><code' + (language ? ' class="' + language + ' language-' + language + '"' : '') + '>' + codeblock + end + '</code></pre>'; 9407 9408 codeblock = showdown.subParser('hashBlock')(codeblock, options, globals); 9409 9410 // Since GHCodeblocks can be false positives, we need to 9411 // store the primitive text and the parsed text in a global var, 9412 // and then return a token 9413 return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n'; 9414 }); 9415 9416 // attacklab: strip sentinel 9417 text = text.replace(/¨0/, ''); 9418 9419 return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals); 9420 }); 9421 9422 showdown.subParser('hashBlock', function (text, options, globals) { 9423 'use strict'; 9424 text = globals.converter._dispatch('hashBlock.before', text, options, globals); 9425 text = text.replace(/(^\n+|\n+$)/g, ''); 9426 text = '\n\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n'; 9427 text = globals.converter._dispatch('hashBlock.after', text, options, globals); 9428 return text; 9429 }); 9430 9431 /** 9432 * Hash and escape <code> elements that should not be parsed as markdown 9433 */ 9434 showdown.subParser('hashCodeTags', function (text, options, globals) { 9435 'use strict'; 9436 text = globals.converter._dispatch('hashCodeTags.before', text, options, globals); 9437 9438 var repFunc = function (wholeMatch, match, left, right) { 9439 var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right; 9440 return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C'; 9441 }; 9442 9443 // Hash naked <code> 9444 text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '<code\\b[^>]*>', '</code>', 'gim'); 9445 9446 text = globals.converter._dispatch('hashCodeTags.after', text, options, globals); 9447 return text; 9448 }); 9449 9450 showdown.subParser('hashElement', function (text, options, globals) { 9451 'use strict'; 9452 9453 return function (wholeMatch, m1) { 9454 var blockText = m1; 9455 9456 // Undo double lines 9457 blockText = blockText.replace(/\n\n/g, '\n'); 9458 blockText = blockText.replace(/^\n/, ''); 9459 9460 // strip trailing blank lines 9461 blockText = blockText.replace(/\n+$/g, ''); 9462 9463 // Replace the element text with a marker ("¨KxK" where x is its key) 9464 blockText = '\n\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\n\n'; 9465 9466 return blockText; 9467 }; 9468 }); 9469 9470 showdown.subParser('hashHTMLBlocks', function (text, options, globals) { 9471 'use strict'; 9472 text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals); 9473 9474 var blockTags = [ 9475 'pre', 9476 'div', 9477 'h1', 9478 'h2', 9479 'h3', 9480 'h4', 9481 'h5', 9482 'h6', 9483 'blockquote', 9484 'table', 9485 'dl', 9486 'ol', 9487 'ul', 9488 'script', 9489 'noscript', 9490 'form', 9491 'fieldset', 9492 'iframe', 9493 'math', 9494 'style', 9495 'section', 9496 'header', 9497 'footer', 9498 'nav', 9499 'article', 9500 'aside', 9501 'address', 9502 'audio', 9503 'canvas', 9504 'figure', 9505 'hgroup', 9506 'output', 9507 'video', 9508 'p' 9509 ], 9510 repFunc = function (wholeMatch, match, left, right) { 9511 var txt = wholeMatch; 9512 // check if this html element is marked as markdown 9513 // if so, it's contents should be parsed as markdown 9514 if (left.search(/\bmarkdown\b/) !== -1) { 9515 txt = left + globals.converter.makeHtml(match) + right; 9516 } 9517 return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n'; 9518 }; 9519 9520 if (options.backslashEscapesHTMLTags) { 9521 // encode backslash escaped HTML tags 9522 text = text.replace(/\\<(\/?[^>]+?)>/g, function (wm, inside) { 9523 return '<' + inside + '>'; 9524 }); 9525 } 9526 9527 // hash HTML Blocks 9528 for (var i = 0; i < blockTags.length; ++i) { 9529 9530 var opTagPos, 9531 rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\b[^>]*>)', 'im'), 9532 patLeft = '<' + blockTags[i] + '\\b[^>]*>', 9533 patRight = '</' + blockTags[i] + '>'; 9534 // 1. Look for the first position of the first opening HTML tag in the text 9535 while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) { 9536 9537 // if the HTML tag is \ escaped, we need to escape it and break 9538 9539 9540 //2. Split the text in that position 9541 var subTexts = showdown.helper.splitAtIndex(text, opTagPos), 9542 //3. Match recursively 9543 newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im'); 9544 9545 // prevent an infinite loop 9546 if (newSubText1 === subTexts[1]) { 9547 break; 9548 } 9549 text = subTexts[0].concat(newSubText1); 9550 } 9551 } 9552 // HR SPECIAL CASE 9553 text = text.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g, 9554 showdown.subParser('hashElement')(text, options, globals)); 9555 9556 // Special case for standalone HTML comments 9557 text = showdown.helper.replaceRecursiveRegExp(text, function (txt) { 9558 return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n'; 9559 }, '^ {0,3}<!--', '-->', 'gm'); 9560 9561 // PHP and ASP-style processor instructions (<?...?> and <%...%>) 9562 text = text.replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g, 9563 showdown.subParser('hashElement')(text, options, globals)); 9564 9565 text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals); 9566 return text; 9567 }); 9568 9569 /** 9570 * Hash span elements that should not be parsed as markdown 9571 */ 9572 showdown.subParser('hashHTMLSpans', function (text, options, globals) { 9573 'use strict'; 9574 text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals); 9575 9576 function hashHTMLSpan (html) { 9577 return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C'; 9578 } 9579 9580 // Hash Self Closing tags 9581 text = text.replace(/<[^>]+?\/>/gi, function (wm) { 9582 return hashHTMLSpan(wm); 9583 }); 9584 9585 // Hash tags without properties 9586 text = text.replace(/<([^>]+?)>[\s\S]*?<\/\1>/g, function (wm) { 9587 return hashHTMLSpan(wm); 9588 }); 9589 9590 // Hash tags with properties 9591 text = text.replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g, function (wm) { 9592 return hashHTMLSpan(wm); 9593 }); 9594 9595 // Hash self closing tags without /> 9596 text = text.replace(/<[^>]+?>/gi, function (wm) { 9597 return hashHTMLSpan(wm); 9598 }); 9599 9600 /*showdown.helper.matchRecursiveRegExp(text, '<code\\b[^>]*>', '</code>', 'gi');*/ 9601 9602 text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals); 9603 return text; 9604 }); 9605 9606 /** 9607 * Unhash HTML spans 9608 */ 9609 showdown.subParser('unhashHTMLSpans', function (text, options, globals) { 9610 'use strict'; 9611 text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals); 9612 9613 for (var i = 0; i < globals.gHtmlSpans.length; ++i) { 9614 var repText = globals.gHtmlSpans[i], 9615 // limiter to prevent infinite loop (assume 10 as limit for recurse) 9616 limit = 0; 9617 9618 while (/¨C(\d+)C/.test(repText)) { 9619 var num = RegExp.$1; 9620 repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]); 9621 if (limit === 10) { 9622 console.error('maximum nesting of 10 spans reached!!!'); 9623 break; 9624 } 9625 ++limit; 9626 } 9627 text = text.replace('¨C' + i + 'C', repText); 9628 } 9629 9630 text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals); 9631 return text; 9632 }); 9633 9634 /** 9635 * Hash and escape <pre><code> elements that should not be parsed as markdown 9636 */ 9637 showdown.subParser('hashPreCodeTags', function (text, options, globals) { 9638 'use strict'; 9639 text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals); 9640 9641 var repFunc = function (wholeMatch, match, left, right) { 9642 // encode html entities 9643 var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right; 9644 return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n'; 9645 }; 9646 9647 // Hash <pre><code> 9648 text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>', '^ {0,3}</code>\\s*</pre>', 'gim'); 9649 9650 text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals); 9651 return text; 9652 }); 9653 9654 showdown.subParser('headers', function (text, options, globals) { 9655 'use strict'; 9656 9657 text = globals.converter._dispatch('headers.before', text, options, globals); 9658 9659 var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart), 9660 9661 // Set text-style headers: 9662 // Header 1 9663 // ======== 9664 // 9665 // Header 2 9666 // -------- 9667 // 9668 setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm, 9669 setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm; 9670 9671 text = text.replace(setextRegexH1, function (wholeMatch, m1) { 9672 9673 var spanGamut = showdown.subParser('spanGamut')(m1, options, globals), 9674 hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"', 9675 hLevel = headerLevelStart, 9676 hashBlock = '<h' + hLevel + hID + '>' + spanGamut + '</h' + hLevel + '>'; 9677 return showdown.subParser('hashBlock')(hashBlock, options, globals); 9678 }); 9679 9680 text = text.replace(setextRegexH2, function (matchFound, m1) { 9681 var spanGamut = showdown.subParser('spanGamut')(m1, options, globals), 9682 hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"', 9683 hLevel = headerLevelStart + 1, 9684 hashBlock = '<h' + hLevel + hID + '>' + spanGamut + '</h' + hLevel + '>'; 9685 return showdown.subParser('hashBlock')(hashBlock, options, globals); 9686 }); 9687 9688 // atx-style headers: 9689 // # Header 1 9690 // ## Header 2 9691 // ## Header 2 with closing hashes ## 9692 // ... 9693 // ###### Header 6 9694 // 9695 var atxStyle = (options.requireSpaceBeforeHeadingText) ? /^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm : /^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm; 9696 9697 text = text.replace(atxStyle, function (wholeMatch, m1, m2) { 9698 var hText = m2; 9699 if (options.customizedHeaderId) { 9700 hText = m2.replace(/\s?\{([^{]+?)}\s*$/, ''); 9701 } 9702 9703 var span = showdown.subParser('spanGamut')(hText, options, globals), 9704 hID = (options.noHeaderId) ? '' : ' id="' + headerId(m2) + '"', 9705 hLevel = headerLevelStart - 1 + m1.length, 9706 header = '<h' + hLevel + hID + '>' + span + '</h' + hLevel + '>'; 9707 9708 return showdown.subParser('hashBlock')(header, options, globals); 9709 }); 9710 9711 function headerId (m) { 9712 var title, 9713 prefix; 9714 9715 // It is separate from other options to allow combining prefix and customized 9716 if (options.customizedHeaderId) { 9717 var match = m.match(/\{([^{]+?)}\s*$/); 9718 if (match && match[1]) { 9719 m = match[1]; 9720 } 9721 } 9722 9723 title = m; 9724 9725 // Prefix id to prevent causing inadvertent pre-existing style matches. 9726 if (showdown.helper.isString(options.prefixHeaderId)) { 9727 prefix = options.prefixHeaderId; 9728 } else if (options.prefixHeaderId === true) { 9729 prefix = 'section-'; 9730 } else { 9731 prefix = ''; 9732 } 9733 9734 if (!options.rawPrefixHeaderId) { 9735 title = prefix + title; 9736 } 9737 9738 if (options.ghCompatibleHeaderId) { 9739 title = title 9740 .replace(/ /g, '-') 9741 // replace previously escaped chars (&, ¨ and $) 9742 .replace(/&/g, '') 9743 .replace(/¨T/g, '') 9744 .replace(/¨D/g, '') 9745 // replace rest of the chars (&~$ are repeated as they might have been escaped) 9746 // borrowed from github's redcarpet (some they should produce similar results) 9747 .replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g, '') 9748 .toLowerCase(); 9749 } else if (options.rawHeaderId) { 9750 title = title 9751 .replace(/ /g, '-') 9752 // replace previously escaped chars (&, ¨ and $) 9753 .replace(/&/g, '&') 9754 .replace(/¨T/g, '¨') 9755 .replace(/¨D/g, '$') 9756 // replace " and ' 9757 .replace(/["']/g, '-') 9758 .toLowerCase(); 9759 } else { 9760 title = title 9761 .replace(/[^\w]/g, '') 9762 .toLowerCase(); 9763 } 9764 9765 if (options.rawPrefixHeaderId) { 9766 title = prefix + title; 9767 } 9768 9769 if (globals.hashLinkCounts[title]) { 9770 title = title + '-' + (globals.hashLinkCounts[title]++); 9771 } else { 9772 globals.hashLinkCounts[title] = 1; 9773 } 9774 return title; 9775 } 9776 9777 text = globals.converter._dispatch('headers.after', text, options, globals); 9778 return text; 9779 }); 9780 9781 /** 9782 * Turn Markdown link shortcuts into XHTML <a> tags. 9783 */ 9784 showdown.subParser('horizontalRule', function (text, options, globals) { 9785 'use strict'; 9786 text = globals.converter._dispatch('horizontalRule.before', text, options, globals); 9787 9788 var key = showdown.subParser('hashBlock')('<hr />', options, globals); 9789 text = text.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm, key); 9790 text = text.replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm, key); 9791 text = text.replace(/^ {0,2}( ?_){3,}[ \t]*$/gm, key); 9792 9793 text = globals.converter._dispatch('horizontalRule.after', text, options, globals); 9794 return text; 9795 }); 9796 9797 /** 9798 * Turn Markdown image shortcuts into <img> tags. 9799 */ 9800 showdown.subParser('images', function (text, options, globals) { 9801 'use strict'; 9802 9803 text = globals.converter._dispatch('images.before', text, options, globals); 9804 9805 var inlineRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g, 9806 crazyRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g, 9807 base64RegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g, 9808 referenceRegExp = /!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g, 9809 refShortcutRegExp = /!\[([^\[\]]+)]()()()()()/g; 9810 9811 function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) { 9812 url = url.replace(/\s/g, ''); 9813 return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title); 9814 } 9815 9816 function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) { 9817 9818 var gUrls = globals.gUrls, 9819 gTitles = globals.gTitles, 9820 gDims = globals.gDimensions; 9821 9822 linkId = linkId.toLowerCase(); 9823 9824 if (!title) { 9825 title = ''; 9826 } 9827 // Special case for explicit empty url 9828 if (wholeMatch.search(/\(<?\s*>? ?(['"].*['"])?\)$/m) > -1) { 9829 url = ''; 9830 9831 } else if (url === '' || url === null) { 9832 if (linkId === '' || linkId === null) { 9833 // lower-case and turn embedded newlines into spaces 9834 linkId = altText.toLowerCase().replace(/ ?\n/g, ' '); 9835 } 9836 url = '#' + linkId; 9837 9838 if (!showdown.helper.isUndefined(gUrls[linkId])) { 9839 url = gUrls[linkId]; 9840 if (!showdown.helper.isUndefined(gTitles[linkId])) { 9841 title = gTitles[linkId]; 9842 } 9843 if (!showdown.helper.isUndefined(gDims[linkId])) { 9844 width = gDims[linkId].width; 9845 height = gDims[linkId].height; 9846 } 9847 } else { 9848 return wholeMatch; 9849 } 9850 } 9851 9852 altText = altText 9853 .replace(/"/g, '"') 9854 //altText = showdown.helper.escapeCharacters(altText, '*_', false); 9855 .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); 9856 //url = showdown.helper.escapeCharacters(url, '*_', false); 9857 url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); 9858 var result = '<img src="' + url + '" alt="' + altText + '"'; 9859 9860 if (title && showdown.helper.isString(title)) { 9861 title = title 9862 .replace(/"/g, '"') 9863 //title = showdown.helper.escapeCharacters(title, '*_', false); 9864 .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); 9865 result += ' title="' + title + '"'; 9866 } 9867 9868 if (width && height) { 9869 width = (width === '*') ? 'auto' : width; 9870 height = (height === '*') ? 'auto' : height; 9871 9872 result += ' width="' + width + '"'; 9873 result += ' height="' + height + '"'; 9874 } 9875 9876 result += ' />'; 9877 9878 return result; 9879 } 9880 9881 // First, handle reference-style labeled images: ![alt text][id] 9882 text = text.replace(referenceRegExp, writeImageTag); 9883 9884 // Next, handle inline images: ![alt text](url =<width>x<height> "optional title") 9885 9886 // base64 encoded images 9887 text = text.replace(base64RegExp, writeImageTagBase64); 9888 9889 // cases with crazy urls like ./image/cat1).png 9890 text = text.replace(crazyRegExp, writeImageTag); 9891 9892 // normal cases 9893 text = text.replace(inlineRegExp, writeImageTag); 9894 9895 // handle reference-style shortcuts: ![img text] 9896 text = text.replace(refShortcutRegExp, writeImageTag); 9897 9898 text = globals.converter._dispatch('images.after', text, options, globals); 9899 return text; 9900 }); 9901 9902 showdown.subParser('italicsAndBold', function (text, options, globals) { 9903 'use strict'; 9904 9905 text = globals.converter._dispatch('italicsAndBold.before', text, options, globals); 9906 9907 // it's faster to have 3 separate regexes for each case than have just one 9908 // because of backtracing, in some cases, it could lead to an exponential effect 9909 // called "catastrophic backtrace". Ominous! 9910 9911 function parseInside (txt, left, right) { 9912 /* 9913 if (options.simplifiedAutoLink) { 9914 txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals); 9915 } 9916 */ 9917 return left + txt + right; 9918 } 9919 9920 // Parse underscores 9921 if (options.literalMidWordUnderscores) { 9922 text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) { 9923 return parseInside (txt, '<strong><em>', '</em></strong>'); 9924 }); 9925 text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) { 9926 return parseInside (txt, '<strong>', '</strong>'); 9927 }); 9928 text = text.replace(/\b_(\S[\s\S]*?)_\b/g, function (wm, txt) { 9929 return parseInside (txt, '<em>', '</em>'); 9930 }); 9931 } else { 9932 text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) { 9933 return (/\S$/.test(m)) ? parseInside (m, '<strong><em>', '</em></strong>') : wm; 9934 }); 9935 text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) { 9936 return (/\S$/.test(m)) ? parseInside (m, '<strong>', '</strong>') : wm; 9937 }); 9938 text = text.replace(/_([^\s_][\s\S]*?)_/g, function (wm, m) { 9939 // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it) 9940 return (/\S$/.test(m)) ? parseInside (m, '<em>', '</em>') : wm; 9941 }); 9942 } 9943 9944 // Now parse asterisks 9945 if (options.literalMidWordAsterisks) { 9946 text = text.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g, function (wm, lead, txt) { 9947 return parseInside (txt, lead + '<strong><em>', '</em></strong>'); 9948 }); 9949 text = text.replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g, function (wm, lead, txt) { 9950 return parseInside (txt, lead + '<strong>', '</strong>'); 9951 }); 9952 text = text.replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g, function (wm, lead, txt) { 9953 return parseInside (txt, lead + '<em>', '</em>'); 9954 }); 9955 } else { 9956 text = text.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g, function (wm, m) { 9957 return (/\S$/.test(m)) ? parseInside (m, '<strong><em>', '</em></strong>') : wm; 9958 }); 9959 text = text.replace(/\*\*(\S[\s\S]*?)\*\*/g, function (wm, m) { 9960 return (/\S$/.test(m)) ? parseInside (m, '<strong>', '</strong>') : wm; 9961 }); 9962 text = text.replace(/\*([^\s*][\s\S]*?)\*/g, function (wm, m) { 9963 // !/^\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it) 9964 return (/\S$/.test(m)) ? parseInside (m, '<em>', '</em>') : wm; 9965 }); 9966 } 9967 9968 9969 text = globals.converter._dispatch('italicsAndBold.after', text, options, globals); 9970 return text; 9971 }); 9972 9973 /** 9974 * Form HTML ordered (numbered) and unordered (bulleted) lists. 9975 */ 9976 showdown.subParser('lists', function (text, options, globals) { 9977 'use strict'; 9978 9979 /** 9980 * Process the contents of a single ordered or unordered list, splitting it 9981 * into individual list items. 9982 * @param {string} listStr 9983 * @param {boolean} trimTrailing 9984 * @returns {string} 9985 */ 9986 function processListItems (listStr, trimTrailing) { 9987 // The $g_list_level global keeps track of when we're inside a list. 9988 // Each time we enter a list, we increment it; when we leave a list, 9989 // we decrement. If it's zero, we're not in a list anymore. 9990 // 9991 // We do this because when we're not inside a list, we want to treat 9992 // something like this: 9993 // 9994 // I recommend upgrading to version 9995 // 8. Oops, now this line is treated 9996 // as a sub-list. 9997 // 9998 // As a single paragraph, despite the fact that the second line starts 9999 // with a digit-period-space sequence. 10000 // 10001 // Whereas when we're inside a list (or sub-list), that line will be 10002 // treated as the start of a sub-list. What a kludge, huh? This is 10003 // an aspect of Markdown's syntax that's hard to parse perfectly 10004 // without resorting to mind-reading. Perhaps the solution is to 10005 // change the syntax rules such that sub-lists must start with a 10006 // starting cardinal number; e.g. "1." or "a.". 10007 globals.gListLevel++; 10008 10009 // trim trailing blank lines: 10010 listStr = listStr.replace(/\n{2,}$/, '\n'); 10011 10012 // attacklab: add sentinel to emulate \z 10013 listStr += '¨0'; 10014 10015 var rgx = /(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm, 10016 isParagraphed = (/\n[ \t]*\n(?!¨0)/.test(listStr)); 10017 10018 // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation, 10019 // which is a syntax breaking change 10020 // activating this option reverts to old behavior 10021 if (options.disableForced4SpacesIndentedSublists) { 10022 rgx = /(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm; 10023 } 10024 10025 listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) { 10026 checked = (checked && checked.trim() !== ''); 10027 10028 var item = showdown.subParser('outdent')(m4, options, globals), 10029 bulletStyle = ''; 10030 10031 // Support for github tasklists 10032 if (taskbtn && options.tasklists) { 10033 bulletStyle = ' class="task-list-item" style="list-style-type: none;"'; 10034 item = item.replace(/^[ \t]*\[(x|X| )?]/m, function () { 10035 var otp = '<input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"'; 10036 if (checked) { 10037 otp += ' checked'; 10038 } 10039 otp += '>'; 10040 return otp; 10041 }); 10042 } 10043 10044 // ISSUE #312 10045 // This input: - - - a 10046 // causes trouble to the parser, since it interprets it as: 10047 // <ul><li><li><li>a</li></li></li></ul> 10048 // instead of: 10049 // <ul><li>- - a</li></ul> 10050 // So, to prevent it, we will put a marker (¨A)in the beginning of the line 10051 // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser 10052 item = item.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g, function (wm2) { 10053 return '¨A' + wm2; 10054 }); 10055 10056 // m1 - Leading line or 10057 // Has a double return (multi paragraph) or 10058 // Has sublist 10059 if (m1 || (item.search(/\n{2,}/) > -1)) { 10060 item = showdown.subParser('githubCodeBlocks')(item, options, globals); 10061 item = showdown.subParser('blockGamut')(item, options, globals); 10062 } else { 10063 // Recursion for sub-lists: 10064 item = showdown.subParser('lists')(item, options, globals); 10065 item = item.replace(/\n$/, ''); // chomp(item) 10066 item = showdown.subParser('hashHTMLBlocks')(item, options, globals); 10067 10068 // Colapse double linebreaks 10069 item = item.replace(/\n\n+/g, '\n\n'); 10070 if (isParagraphed) { 10071 item = showdown.subParser('paragraphs')(item, options, globals); 10072 } else { 10073 item = showdown.subParser('spanGamut')(item, options, globals); 10074 } 10075 } 10076 10077 // now we need to remove the marker (¨A) 10078 item = item.replace('¨A', ''); 10079 // we can finally wrap the line in list item tags 10080 item = '<li' + bulletStyle + '>' + item + '</li>\n'; 10081 10082 return item; 10083 }); 10084 10085 // attacklab: strip sentinel 10086 listStr = listStr.replace(/¨0/g, ''); 10087 10088 globals.gListLevel--; 10089 10090 if (trimTrailing) { 10091 listStr = listStr.replace(/\s+$/, ''); 10092 } 10093 10094 return listStr; 10095 } 10096 10097 function styleStartNumber (list, listType) { 10098 // check if ol and starts by a number different than 1 10099 if (listType === 'ol') { 10100 var res = list.match(/^ *(\d+)\./); 10101 if (res && res[1] !== '1') { 10102 return ' start="' + res[1] + '"'; 10103 } 10104 } 10105 return ''; 10106 } 10107 10108 /** 10109 * Check and parse consecutive lists (better fix for issue #142) 10110 * @param {string} list 10111 * @param {string} listType 10112 * @param {boolean} trimTrailing 10113 * @returns {string} 10114 */ 10115 function parseConsecutiveLists (list, listType, trimTrailing) { 10116 // check if we caught 2 or more consecutive lists by mistake 10117 // we use the counterRgx, meaning if listType is UL we look for OL and vice versa 10118 var olRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?\d+\.[ \t]/gm : /^ {0,3}\d+\.[ \t]/gm, 10119 ulRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?[*+-][ \t]/gm : /^ {0,3}[*+-][ \t]/gm, 10120 counterRxg = (listType === 'ul') ? olRgx : ulRgx, 10121 result = ''; 10122 10123 if (list.search(counterRxg) !== -1) { 10124 (function parseCL (txt) { 10125 var pos = txt.search(counterRxg), 10126 style = styleStartNumber(list, listType); 10127 if (pos !== -1) { 10128 // slice 10129 result += '\n\n<' + listType + style + '>\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '</' + listType + '>\n'; 10130 10131 // invert counterType and listType 10132 listType = (listType === 'ul') ? 'ol' : 'ul'; 10133 counterRxg = (listType === 'ul') ? olRgx : ulRgx; 10134 10135 //recurse 10136 parseCL(txt.slice(pos)); 10137 } else { 10138 result += '\n\n<' + listType + style + '>\n' + processListItems(txt, !!trimTrailing) + '</' + listType + '>\n'; 10139 } 10140 })(list); 10141 } else { 10142 var style = styleStartNumber(list, listType); 10143 result = '\n\n<' + listType + style + '>\n' + processListItems(list, !!trimTrailing) + '</' + listType + '>\n'; 10144 } 10145 10146 return result; 10147 } 10148 10149 /** Start of list parsing **/ 10150 text = globals.converter._dispatch('lists.before', text, options, globals); 10151 // add sentinel to hack around khtml/safari bug: 10152 // http://bugs.webkit.org/show_bug.cgi?id=11231 10153 text += '¨0'; 10154 10155 if (globals.gListLevel) { 10156 text = text.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm, 10157 function (wholeMatch, list, m2) { 10158 var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol'; 10159 return parseConsecutiveLists(list, listType, true); 10160 } 10161 ); 10162 } else { 10163 text = text.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm, 10164 function (wholeMatch, m1, list, m3) { 10165 var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol'; 10166 return parseConsecutiveLists(list, listType, false); 10167 } 10168 ); 10169 } 10170 10171 // strip sentinel 10172 text = text.replace(/¨0/, ''); 10173 text = globals.converter._dispatch('lists.after', text, options, globals); 10174 return text; 10175 }); 10176 10177 /** 10178 * Parse metadata at the top of the document 10179 */ 10180 showdown.subParser('metadata', function (text, options, globals) { 10181 'use strict'; 10182 10183 if (!options.metadata) { 10184 return text; 10185 } 10186 10187 text = globals.converter._dispatch('metadata.before', text, options, globals); 10188 10189 function parseMetadataContents (content) { 10190 // raw is raw so it's not changed in any way 10191 globals.metadata.raw = content; 10192 10193 // escape chars forbidden in html attributes 10194 // double quotes 10195 content = content 10196 // ampersand first 10197 .replace(/&/g, '&') 10198 // double quotes 10199 .replace(/"/g, '"'); 10200 10201 content = content.replace(/\n {4}/g, ' '); 10202 content.replace(/^([\S ]+): +([\s\S]+?)$/gm, function (wm, key, value) { 10203 globals.metadata.parsed[key] = value; 10204 return ''; 10205 }); 10206 } 10207 10208 text = text.replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/, function (wholematch, format, content) { 10209 parseMetadataContents(content); 10210 return '¨M'; 10211 }); 10212 10213 text = text.replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/, function (wholematch, format, content) { 10214 if (format) { 10215 globals.metadata.format = format; 10216 } 10217 parseMetadataContents(content); 10218 return '¨M'; 10219 }); 10220 10221 text = text.replace(/¨M/g, ''); 10222 10223 text = globals.converter._dispatch('metadata.after', text, options, globals); 10224 return text; 10225 }); 10226 10227 /** 10228 * Remove one level of line-leading tabs or spaces 10229 */ 10230 showdown.subParser('outdent', function (text, options, globals) { 10231 'use strict'; 10232 text = globals.converter._dispatch('outdent.before', text, options, globals); 10233 10234 // attacklab: hack around Konqueror 3.5.4 bug: 10235 // "----------bug".replace(/^-/g,"") == "bug" 10236 text = text.replace(/^(\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width 10237 10238 // attacklab: clean up hack 10239 text = text.replace(/¨0/g, ''); 10240 10241 text = globals.converter._dispatch('outdent.after', text, options, globals); 10242 return text; 10243 }); 10244 10245 /** 10246 * 10247 */ 10248 showdown.subParser('paragraphs', function (text, options, globals) { 10249 'use strict'; 10250 10251 text = globals.converter._dispatch('paragraphs.before', text, options, globals); 10252 // Strip leading and trailing lines: 10253 text = text.replace(/^\n+/g, ''); 10254 text = text.replace(/\n+$/g, ''); 10255 10256 var grafs = text.split(/\n{2,}/g), 10257 grafsOut = [], 10258 end = grafs.length; // Wrap <p> tags 10259 10260 for (var i = 0; i < end; i++) { 10261 var str = grafs[i]; 10262 // if this is an HTML marker, copy it 10263 if (str.search(/¨(K|G)(\d+)\1/g) >= 0) { 10264 grafsOut.push(str); 10265 10266 // test for presence of characters to prevent empty lines being parsed 10267 // as paragraphs (resulting in undesired extra empty paragraphs) 10268 } else if (str.search(/\S/) >= 0) { 10269 str = showdown.subParser('spanGamut')(str, options, globals); 10270 str = str.replace(/^([ \t]*)/g, '<p>'); 10271 str += '</p>'; 10272 grafsOut.push(str); 10273 } 10274 } 10275 10276 /** Unhashify HTML blocks */ 10277 end = grafsOut.length; 10278 for (i = 0; i < end; i++) { 10279 var blockText = '', 10280 grafsOutIt = grafsOut[i], 10281 codeFlag = false; 10282 // if this is a marker for an html block... 10283 // use RegExp.test instead of string.search because of QML bug 10284 while (/¨(K|G)(\d+)\1/.test(grafsOutIt)) { 10285 var delim = RegExp.$1, 10286 num = RegExp.$2; 10287 10288 if (delim === 'K') { 10289 blockText = globals.gHtmlBlocks[num]; 10290 } else { 10291 // we need to check if ghBlock is a false positive 10292 if (codeFlag) { 10293 // use encoded version of all text 10294 blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals); 10295 } else { 10296 blockText = globals.ghCodeBlocks[num].codeblock; 10297 } 10298 } 10299 blockText = blockText.replace(/\$/g, '$$$$'); // Escape any dollar signs 10300 10301 grafsOutIt = grafsOutIt.replace(/(\n\n)?¨(K|G)\d+\2(\n\n)?/, blockText); 10302 // Check if grafsOutIt is a pre->code 10303 if (/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(grafsOutIt)) { 10304 codeFlag = true; 10305 } 10306 } 10307 grafsOut[i] = grafsOutIt; 10308 } 10309 text = grafsOut.join('\n'); 10310 // Strip leading and trailing lines: 10311 text = text.replace(/^\n+/g, ''); 10312 text = text.replace(/\n+$/g, ''); 10313 return globals.converter._dispatch('paragraphs.after', text, options, globals); 10314 }); 10315 10316 /** 10317 * Run extension 10318 */ 10319 showdown.subParser('runExtension', function (ext, text, options, globals) { 10320 'use strict'; 10321 10322 if (ext.filter) { 10323 text = ext.filter(text, globals.converter, options); 10324 10325 } else if (ext.regex) { 10326 // TODO remove this when old extension loading mechanism is deprecated 10327 var re = ext.regex; 10328 if (!(re instanceof RegExp)) { 10329 re = new RegExp(re, 'g'); 10330 } 10331 text = text.replace(re, ext.replace); 10332 } 10333 10334 return text; 10335 }); 10336 10337 /** 10338 * These are all the transformations that occur *within* block-level 10339 * tags like paragraphs, headers, and list items. 10340 */ 10341 showdown.subParser('spanGamut', function (text, options, globals) { 10342 'use strict'; 10343 10344 text = globals.converter._dispatch('spanGamut.before', text, options, globals); 10345 text = showdown.subParser('codeSpans')(text, options, globals); 10346 text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals); 10347 text = showdown.subParser('encodeBackslashEscapes')(text, options, globals); 10348 10349 // Process anchor and image tags. Images must come first, 10350 // because ![foo][f] looks like an anchor. 10351 text = showdown.subParser('images')(text, options, globals); 10352 text = showdown.subParser('anchors')(text, options, globals); 10353 10354 // Make links out of things like `<http://example.com/>` 10355 // Must come after anchors, because you can use < and > 10356 // delimiters in inline links like [this](<url>). 10357 text = showdown.subParser('autoLinks')(text, options, globals); 10358 text = showdown.subParser('simplifiedAutoLinks')(text, options, globals); 10359 text = showdown.subParser('emoji')(text, options, globals); 10360 text = showdown.subParser('underline')(text, options, globals); 10361 text = showdown.subParser('italicsAndBold')(text, options, globals); 10362 text = showdown.subParser('strikethrough')(text, options, globals); 10363 text = showdown.subParser('ellipsis')(text, options, globals); 10364 10365 // we need to hash HTML tags inside spans 10366 text = showdown.subParser('hashHTMLSpans')(text, options, globals); 10367 10368 // now we encode amps and angles 10369 text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals); 10370 10371 // Do hard breaks 10372 if (options.simpleLineBreaks) { 10373 // GFM style hard breaks 10374 // only add line breaks if the text does not contain a block (special case for lists) 10375 if (!/\n\n¨K/.test(text)) { 10376 text = text.replace(/\n+/g, '<br />\n'); 10377 } 10378 } else { 10379 // Vanilla hard breaks 10380 text = text.replace(/ +\n/g, '<br />\n'); 10381 } 10382 10383 text = globals.converter._dispatch('spanGamut.after', text, options, globals); 10384 return text; 10385 }); 10386 10387 showdown.subParser('strikethrough', function (text, options, globals) { 10388 'use strict'; 10389 10390 function parseInside (txt) { 10391 if (options.simplifiedAutoLink) { 10392 txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals); 10393 } 10394 return '<del>' + txt + '</del>'; 10395 } 10396 10397 if (options.strikethrough) { 10398 text = globals.converter._dispatch('strikethrough.before', text, options, globals); 10399 text = text.replace(/(?:~){2}([\s\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); }); 10400 text = globals.converter._dispatch('strikethrough.after', text, options, globals); 10401 } 10402 10403 return text; 10404 }); 10405 10406 /** 10407 * Strips link definitions from text, stores the URLs and titles in 10408 * hash references. 10409 * Link defs are in the form: ^[id]: url "optional title" 10410 */ 10411 showdown.subParser('stripLinkDefinitions', function (text, options, globals) { 10412 'use strict'; 10413 10414 var regex = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm, 10415 base64Regex = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm; 10416 10417 // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug 10418 text += '¨0'; 10419 10420 var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) { 10421 linkId = linkId.toLowerCase(); 10422 if (url.match(/^data:.+?\/.+?;base64,/)) { 10423 // remove newlines 10424 globals.gUrls[linkId] = url.replace(/\s/g, ''); 10425 } else { 10426 globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive 10427 } 10428 10429 if (blankLines) { 10430 // Oops, found blank lines, so it's not a title. 10431 // Put back the parenthetical statement we stole. 10432 return blankLines + title; 10433 10434 } else { 10435 if (title) { 10436 globals.gTitles[linkId] = title.replace(/"|'/g, '"'); 10437 } 10438 if (options.parseImgDimensions && width && height) { 10439 globals.gDimensions[linkId] = { 10440 width: width, 10441 height: height 10442 }; 10443 } 10444 } 10445 // Completely remove the definition from the text 10446 return ''; 10447 }; 10448 10449 // first we try to find base64 link references 10450 text = text.replace(base64Regex, replaceFunc); 10451 10452 text = text.replace(regex, replaceFunc); 10453 10454 // attacklab: strip sentinel 10455 text = text.replace(/¨0/, ''); 10456 10457 return text; 10458 }); 10459 10460 showdown.subParser('tables', function (text, options, globals) { 10461 'use strict'; 10462 10463 if (!options.tables) { 10464 return text; 10465 } 10466 10467 var tableRgx = /^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm, 10468 //singeColTblRgx = /^ {0,3}\|.+\|\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n(?: {0,3}\|.+\|\n)+(?:\n\n|¨0)/gm; 10469 singeColTblRgx = /^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm; 10470 10471 function parseStyles (sLine) { 10472 if (/^:[ \t]*--*$/.test(sLine)) { 10473 return ' style="text-align:left;"'; 10474 } else if (/^--*[ \t]*:[ \t]*$/.test(sLine)) { 10475 return ' style="text-align:right;"'; 10476 } else if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) { 10477 return ' style="text-align:center;"'; 10478 } else { 10479 return ''; 10480 } 10481 } 10482 10483 function parseHeaders (header, style) { 10484 var id = ''; 10485 header = header.trim(); 10486 // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility 10487 if (options.tablesHeaderId || options.tableHeaderId) { 10488 id = ' id="' + header.replace(/ /g, '_').toLowerCase() + '"'; 10489 } 10490 header = showdown.subParser('spanGamut')(header, options, globals); 10491 10492 return '<th' + id + style + '>' + header + '</th>\n'; 10493 } 10494 10495 function parseCells (cell, style) { 10496 var subText = showdown.subParser('spanGamut')(cell, options, globals); 10497 return '<td' + style + '>' + subText + '</td>\n'; 10498 } 10499 10500 function buildTable (headers, cells) { 10501 var tb = '<table>\n<thead>\n<tr>\n', 10502 tblLgn = headers.length; 10503 10504 for (var i = 0; i < tblLgn; ++i) { 10505 tb += headers[i]; 10506 } 10507 tb += '</tr>\n</thead>\n<tbody>\n'; 10508 10509 for (i = 0; i < cells.length; ++i) { 10510 tb += '<tr>\n'; 10511 for (var ii = 0; ii < tblLgn; ++ii) { 10512 tb += cells[i][ii]; 10513 } 10514 tb += '</tr>\n'; 10515 } 10516 tb += '</tbody>\n</table>\n'; 10517 return tb; 10518 } 10519 10520 function parseTable (rawTable) { 10521 var i, tableLines = rawTable.split('\n'); 10522 10523 for (i = 0; i < tableLines.length; ++i) { 10524 // strip wrong first and last column if wrapped tables are used 10525 if (/^ {0,3}\|/.test(tableLines[i])) { 10526 tableLines[i] = tableLines[i].replace(/^ {0,3}\|/, ''); 10527 } 10528 if (/\|[ \t]*$/.test(tableLines[i])) { 10529 tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, ''); 10530 } 10531 // parse code spans first, but we only support one line code spans 10532 tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals); 10533 } 10534 10535 var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}), 10536 rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}), 10537 rawCells = [], 10538 headers = [], 10539 styles = [], 10540 cells = []; 10541 10542 tableLines.shift(); 10543 tableLines.shift(); 10544 10545 for (i = 0; i < tableLines.length; ++i) { 10546 if (tableLines[i].trim() === '') { 10547 continue; 10548 } 10549 rawCells.push( 10550 tableLines[i] 10551 .split('|') 10552 .map(function (s) { 10553 return s.trim(); 10554 }) 10555 ); 10556 } 10557 10558 if (rawHeaders.length < rawStyles.length) { 10559 return rawTable; 10560 } 10561 10562 for (i = 0; i < rawStyles.length; ++i) { 10563 styles.push(parseStyles(rawStyles[i])); 10564 } 10565 10566 for (i = 0; i < rawHeaders.length; ++i) { 10567 if (showdown.helper.isUndefined(styles[i])) { 10568 styles[i] = ''; 10569 } 10570 headers.push(parseHeaders(rawHeaders[i], styles[i])); 10571 } 10572 10573 for (i = 0; i < rawCells.length; ++i) { 10574 var row = []; 10575 for (var ii = 0; ii < headers.length; ++ii) { 10576 if (showdown.helper.isUndefined(rawCells[i][ii])) { 10577 10578 } 10579 row.push(parseCells(rawCells[i][ii], styles[ii])); 10580 } 10581 cells.push(row); 10582 } 10583 10584 return buildTable(headers, cells); 10585 } 10586 10587 text = globals.converter._dispatch('tables.before', text, options, globals); 10588 10589 // find escaped pipe characters 10590 text = text.replace(/\\(\|)/g, showdown.helper.escapeCharactersCallback); 10591 10592 // parse multi column tables 10593 text = text.replace(tableRgx, parseTable); 10594 10595 // parse one column tables 10596 text = text.replace(singeColTblRgx, parseTable); 10597 10598 text = globals.converter._dispatch('tables.after', text, options, globals); 10599 10600 return text; 10601 }); 10602 10603 showdown.subParser('underline', function (text, options, globals) { 10604 'use strict'; 10605 10606 if (!options.underline) { 10607 return text; 10608 } 10609 10610 text = globals.converter._dispatch('underline.before', text, options, globals); 10611 10612 if (options.literalMidWordUnderscores) { 10613 text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) { 10614 return '<u>' + txt + '</u>'; 10615 }); 10616 text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) { 10617 return '<u>' + txt + '</u>'; 10618 }); 10619 } else { 10620 text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) { 10621 return (/\S$/.test(m)) ? '<u>' + m + '</u>' : wm; 10622 }); 10623 text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) { 10624 return (/\S$/.test(m)) ? '<u>' + m + '</u>' : wm; 10625 }); 10626 } 10627 10628 // escape remaining underscores to prevent them being parsed by italic and bold 10629 text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback); 10630 10631 text = globals.converter._dispatch('underline.after', text, options, globals); 10632 10633 return text; 10634 }); 10635 10636 /** 10637 * Swap back in all the special characters we've hidden. 10638 */ 10639 showdown.subParser('unescapeSpecialChars', function (text, options, globals) { 10640 'use strict'; 10641 text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals); 10642 10643 text = text.replace(/¨E(\d+)E/g, function (wholeMatch, m1) { 10644 var charCodeToReplace = parseInt(m1); 10645 return String.fromCharCode(charCodeToReplace); 10646 }); 10647 10648 text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals); 10649 return text; 10650 }); 10651 10652 showdown.subParser('makeMarkdown.blockquote', function (node, globals) { 10653 'use strict'; 10654 10655 var txt = ''; 10656 if (node.hasChildNodes()) { 10657 var children = node.childNodes, 10658 childrenLength = children.length; 10659 10660 for (var i = 0; i < childrenLength; ++i) { 10661 var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals); 10662 10663 if (innerTxt === '') { 10664 continue; 10665 } 10666 txt += innerTxt; 10667 } 10668 } 10669 // cleanup 10670 txt = txt.trim(); 10671 txt = '> ' + txt.split('\n').join('\n> '); 10672 return txt; 10673 }); 10674 10675 showdown.subParser('makeMarkdown.codeBlock', function (node, globals) { 10676 'use strict'; 10677 10678 var lang = node.getAttribute('language'), 10679 num = node.getAttribute('precodenum'); 10680 return '```' + lang + '\n' + globals.preList[num] + '\n```'; 10681 }); 10682 10683 showdown.subParser('makeMarkdown.codeSpan', function (node) { 10684 'use strict'; 10685 10686 return '`' + node.innerHTML + '`'; 10687 }); 10688 10689 showdown.subParser('makeMarkdown.emphasis', function (node, globals) { 10690 'use strict'; 10691 10692 var txt = ''; 10693 if (node.hasChildNodes()) { 10694 txt += '*'; 10695 var children = node.childNodes, 10696 childrenLength = children.length; 10697 for (var i = 0; i < childrenLength; ++i) { 10698 txt += showdown.subParser('makeMarkdown.node')(children[i], globals); 10699 } 10700 txt += '*'; 10701 } 10702 return txt; 10703 }); 10704 10705 showdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) { 10706 'use strict'; 10707 10708 var headerMark = new Array(headerLevel + 1).join('#'), 10709 txt = ''; 10710 10711 if (node.hasChildNodes()) { 10712 txt = headerMark + ' '; 10713 var children = node.childNodes, 10714 childrenLength = children.length; 10715 10716 for (var i = 0; i < childrenLength; ++i) { 10717 txt += showdown.subParser('makeMarkdown.node')(children[i], globals); 10718 } 10719 } 10720 return txt; 10721 }); 10722 10723 showdown.subParser('makeMarkdown.hr', function () { 10724 'use strict'; 10725 10726 return '---'; 10727 }); 10728 10729 showdown.subParser('makeMarkdown.image', function (node) { 10730 'use strict'; 10731 10732 var txt = ''; 10733 if (node.hasAttribute('src')) { 10734 txt += '![' + node.getAttribute('alt') + ']('; 10735 txt += '<' + node.getAttribute('src') + '>'; 10736 if (node.hasAttribute('width') && node.hasAttribute('height')) { 10737 txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height'); 10738 } 10739 10740 if (node.hasAttribute('title')) { 10741 txt += ' "' + node.getAttribute('title') + '"'; 10742 } 10743 txt += ')'; 10744 } 10745 return txt; 10746 }); 10747 10748 showdown.subParser('makeMarkdown.links', function (node, globals) { 10749 'use strict'; 10750 10751 var txt = ''; 10752 if (node.hasChildNodes() && node.hasAttribute('href')) { 10753 var children = node.childNodes, 10754 childrenLength = children.length; 10755 txt = '['; 10756 for (var i = 0; i < childrenLength; ++i) { 10757 txt += showdown.subParser('makeMarkdown.node')(children[i], globals); 10758 } 10759 txt += ']('; 10760 txt += '<' + node.getAttribute('href') + '>'; 10761 if (node.hasAttribute('title')) { 10762 txt += ' "' + node.getAttribute('title') + '"'; 10763 } 10764 txt += ')'; 10765 } 10766 return txt; 10767 }); 10768 10769 showdown.subParser('makeMarkdown.list', function (node, globals, type) { 10770 'use strict'; 10771 10772 var txt = ''; 10773 if (!node.hasChildNodes()) { 10774 return ''; 10775 } 10776 var listItems = node.childNodes, 10777 listItemsLenght = listItems.length, 10778 listNum = node.getAttribute('start') || 1; 10779 10780 for (var i = 0; i < listItemsLenght; ++i) { 10781 if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') { 10782 continue; 10783 } 10784 10785 // define the bullet to use in list 10786 var bullet = ''; 10787 if (type === 'ol') { 10788 bullet = listNum.toString() + '. '; 10789 } else { 10790 bullet = '- '; 10791 } 10792 10793 // parse list item 10794 txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals); 10795 ++listNum; 10796 } 10797 10798 // add comment at the end to prevent consecutive lists to be parsed as one 10799 txt += '\n<!-- -->\n'; 10800 return txt.trim(); 10801 }); 10802 10803 showdown.subParser('makeMarkdown.listItem', function (node, globals) { 10804 'use strict'; 10805 10806 var listItemTxt = ''; 10807 10808 var children = node.childNodes, 10809 childrenLenght = children.length; 10810 10811 for (var i = 0; i < childrenLenght; ++i) { 10812 listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals); 10813 } 10814 // if it's only one liner, we need to add a newline at the end 10815 if (!/\n$/.test(listItemTxt)) { 10816 listItemTxt += '\n'; 10817 } else { 10818 // it's multiparagraph, so we need to indent 10819 listItemTxt = listItemTxt 10820 .split('\n') 10821 .join('\n ') 10822 .replace(/^ {4}$/gm, '') 10823 .replace(/\n\n+/g, '\n\n'); 10824 } 10825 10826 return listItemTxt; 10827 }); 10828 10829 10830 10831 showdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) { 10832 'use strict'; 10833 10834 spansOnly = spansOnly || false; 10835 10836 var txt = ''; 10837 10838 // edge case of text without wrapper paragraph 10839 if (node.nodeType === 3) { 10840 return showdown.subParser('makeMarkdown.txt')(node, globals); 10841 } 10842 10843 // HTML comment 10844 if (node.nodeType === 8) { 10845 return '<!--' + node.data + '-->\n\n'; 10846 } 10847 10848 // process only node elements 10849 if (node.nodeType !== 1) { 10850 return ''; 10851 } 10852 10853 var tagName = node.tagName.toLowerCase(); 10854 10855 switch (tagName) { 10856 10857 // 10858 // BLOCKS 10859 // 10860 case 'h1': 10861 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\n\n'; } 10862 break; 10863 case 'h2': 10864 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\n\n'; } 10865 break; 10866 case 'h3': 10867 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\n\n'; } 10868 break; 10869 case 'h4': 10870 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\n\n'; } 10871 break; 10872 case 'h5': 10873 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\n\n'; } 10874 break; 10875 case 'h6': 10876 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\n\n'; } 10877 break; 10878 10879 case 'p': 10880 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\n\n'; } 10881 break; 10882 10883 case 'blockquote': 10884 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\n\n'; } 10885 break; 10886 10887 case 'hr': 10888 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\n\n'; } 10889 break; 10890 10891 case 'ol': 10892 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\n\n'; } 10893 break; 10894 10895 case 'ul': 10896 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\n\n'; } 10897 break; 10898 10899 case 'precode': 10900 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\n\n'; } 10901 break; 10902 10903 case 'pre': 10904 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\n\n'; } 10905 break; 10906 10907 case 'table': 10908 if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\n\n'; } 10909 break; 10910 10911 // 10912 // SPANS 10913 // 10914 case 'code': 10915 txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals); 10916 break; 10917 10918 case 'em': 10919 case 'i': 10920 txt = showdown.subParser('makeMarkdown.emphasis')(node, globals); 10921 break; 10922 10923 case 'strong': 10924 case 'b': 10925 txt = showdown.subParser('makeMarkdown.strong')(node, globals); 10926 break; 10927 10928 case 'del': 10929 txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals); 10930 break; 10931 10932 case 'a': 10933 txt = showdown.subParser('makeMarkdown.links')(node, globals); 10934 break; 10935 10936 case 'img': 10937 txt = showdown.subParser('makeMarkdown.image')(node, globals); 10938 break; 10939 10940 default: 10941 txt = node.outerHTML + '\n\n'; 10942 } 10943 10944 // common normalization 10945 // TODO eventually 10946 10947 return txt; 10948 }); 10949 10950 showdown.subParser('makeMarkdown.paragraph', function (node, globals) { 10951 'use strict'; 10952 10953 var txt = ''; 10954 if (node.hasChildNodes()) { 10955 var children = node.childNodes, 10956 childrenLength = children.length; 10957 for (var i = 0; i < childrenLength; ++i) { 10958 txt += showdown.subParser('makeMarkdown.node')(children[i], globals); 10959 } 10960 } 10961 10962 // some text normalization 10963 txt = txt.trim(); 10964 10965 return txt; 10966 }); 10967 10968 showdown.subParser('makeMarkdown.pre', function (node, globals) { 10969 'use strict'; 10970 10971 var num = node.getAttribute('prenum'); 10972 return '<pre>' + globals.preList[num] + '</pre>'; 10973 }); 10974 10975 showdown.subParser('makeMarkdown.strikethrough', function (node, globals) { 10976 'use strict'; 10977 10978 var txt = ''; 10979 if (node.hasChildNodes()) { 10980 txt += '~~'; 10981 var children = node.childNodes, 10982 childrenLength = children.length; 10983 for (var i = 0; i < childrenLength; ++i) { 10984 txt += showdown.subParser('makeMarkdown.node')(children[i], globals); 10985 } 10986 txt += '~~'; 10987 } 10988 return txt; 10989 }); 10990 10991 showdown.subParser('makeMarkdown.strong', function (node, globals) { 10992 'use strict'; 10993 10994 var txt = ''; 10995 if (node.hasChildNodes()) { 10996 txt += '**'; 10997 var children = node.childNodes, 10998 childrenLength = children.length; 10999 for (var i = 0; i < childrenLength; ++i) { 11000 txt += showdown.subParser('makeMarkdown.node')(children[i], globals); 11001 } 11002 txt += '**'; 11003 } 11004 return txt; 11005 }); 11006 11007 showdown.subParser('makeMarkdown.table', function (node, globals) { 11008 'use strict'; 11009 11010 var txt = '', 11011 tableArray = [[], []], 11012 headings = node.querySelectorAll('thead>tr>th'), 11013 rows = node.querySelectorAll('tbody>tr'), 11014 i, ii; 11015 for (i = 0; i < headings.length; ++i) { 11016 var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals), 11017 allign = '---'; 11018 11019 if (headings[i].hasAttribute('style')) { 11020 var style = headings[i].getAttribute('style').toLowerCase().replace(/\s/g, ''); 11021 switch (style) { 11022 case 'text-align:left;': 11023 allign = ':---'; 11024 break; 11025 case 'text-align:right;': 11026 allign = '---:'; 11027 break; 11028 case 'text-align:center;': 11029 allign = ':---:'; 11030 break; 11031 } 11032 } 11033 tableArray[0][i] = headContent.trim(); 11034 tableArray[1][i] = allign; 11035 } 11036 11037 for (i = 0; i < rows.length; ++i) { 11038 var r = tableArray.push([]) - 1, 11039 cols = rows[i].getElementsByTagName('td'); 11040 11041 for (ii = 0; ii < headings.length; ++ii) { 11042 var cellContent = ' '; 11043 if (typeof cols[ii] !== 'undefined') { 11044 cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals); 11045 } 11046 tableArray[r].push(cellContent); 11047 } 11048 } 11049 11050 var cellSpacesCount = 3; 11051 for (i = 0; i < tableArray.length; ++i) { 11052 for (ii = 0; ii < tableArray[i].length; ++ii) { 11053 var strLen = tableArray[i][ii].length; 11054 if (strLen > cellSpacesCount) { 11055 cellSpacesCount = strLen; 11056 } 11057 } 11058 } 11059 11060 for (i = 0; i < tableArray.length; ++i) { 11061 for (ii = 0; ii < tableArray[i].length; ++ii) { 11062 if (i === 1) { 11063 if (tableArray[i][ii].slice(-1) === ':') { 11064 tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':'; 11065 } else { 11066 tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-'); 11067 } 11068 } else { 11069 tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount); 11070 } 11071 } 11072 txt += '| ' + tableArray[i].join(' | ') + ' |\n'; 11073 } 11074 11075 return txt.trim(); 11076 }); 11077 11078 showdown.subParser('makeMarkdown.tableCell', function (node, globals) { 11079 'use strict'; 11080 11081 var txt = ''; 11082 if (!node.hasChildNodes()) { 11083 return ''; 11084 } 11085 var children = node.childNodes, 11086 childrenLength = children.length; 11087 11088 for (var i = 0; i < childrenLength; ++i) { 11089 txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true); 11090 } 11091 return txt.trim(); 11092 }); 11093 11094 showdown.subParser('makeMarkdown.txt', function (node) { 11095 'use strict'; 11096 11097 var txt = node.nodeValue; 11098 11099 // multiple spaces are collapsed 11100 txt = txt.replace(/ +/g, ' '); 11101 11102 // replace the custom ¨NBSP; with a space 11103 txt = txt.replace(/¨NBSP;/g, ' '); 11104 11105 // ", <, > and & should replace escaped html entities 11106 txt = showdown.helper.unescapeHTMLEntities(txt); 11107 11108 // escape markdown magic characters 11109 // emphasis, strong and strikethrough - can appear everywhere 11110 // we also escape pipe (|) because of tables 11111 // and escape ` because of code blocks and spans 11112 txt = txt.replace(/([*_~|`])/g, '\\$1'); 11113 11114 // escape > because of blockquotes 11115 txt = txt.replace(/^(\s*)>/g, '\\$1>'); 11116 11117 // hash character, only troublesome at the beginning of a line because of headers 11118 txt = txt.replace(/^#/gm, '\\#'); 11119 11120 // horizontal rules 11121 txt = txt.replace(/^(\s*)([-=]{3,})(\s*)$/, '$1\\$2$3'); 11122 11123 // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer 11124 txt = txt.replace(/^( {0,3}\d+)\./gm, '$1\\.'); 11125 11126 // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped) 11127 txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\$2'); 11128 11129 // images and links, ] followed by ( is problematic, so we escape it 11130 txt = txt.replace(/]([\s]*)\(/g, '\\]$1\\('); 11131 11132 // reference URIs must also be escaped 11133 txt = txt.replace(/^ {0,3}\[([\S \t]*?)]:/gm, '\\[$1]:'); 11134 11135 return txt; 11136 }); 11137 11138 var root = this; 11139 11140 // AMD Loader 11141 if (true) { 11142 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { 11143 'use strict'; 11144 return showdown; 11145 }).call(exports, __webpack_require__, exports, module), 11146 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 11147 11148 // CommonJS/nodeJS Loader 11149 } else {} 11150 }).call(this); 11151 11152 11153 11154 /***/ }), 11155 11156 /***/ "./node_modules/simple-html-tokenizer/dist/es6/entity-parser.js": 11157 /*!**********************************************************************!*\ 11158 !*** ./node_modules/simple-html-tokenizer/dist/es6/entity-parser.js ***! 11159 \**********************************************************************/ 11160 /*! exports provided: default */ 11161 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11162 11163 "use strict"; 11164 __webpack_require__.r(__webpack_exports__); 11165 var HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/; 11166 var CHARCODE = /^#([0-9]+)$/; 11167 var NAMED = /^([A-Za-z0-9]+)$/; 11168 var EntityParser = /** @class */ (function () { 11169 function EntityParser(named) { 11170 this.named = named; 11171 } 11172 EntityParser.prototype.parse = function (entity) { 11173 if (!entity) { 11174 return; 11175 } 11176 var matches = entity.match(HEXCHARCODE); 11177 if (matches) { 11178 return String.fromCharCode(parseInt(matches[1], 16)); 11179 } 11180 matches = entity.match(CHARCODE); 11181 if (matches) { 11182 return String.fromCharCode(parseInt(matches[1], 10)); 11183 } 11184 matches = entity.match(NAMED); 11185 if (matches) { 11186 return this.named[matches[1]]; 11187 } 11188 }; 11189 return EntityParser; 11190 }()); 11191 /* harmony default export */ __webpack_exports__["default"] = (EntityParser); 11192 11193 11194 /***/ }), 11195 11196 /***/ "./node_modules/simple-html-tokenizer/dist/es6/evented-tokenizer.js": 11197 /*!**************************************************************************!*\ 11198 !*** ./node_modules/simple-html-tokenizer/dist/es6/evented-tokenizer.js ***! 11199 \**************************************************************************/ 11200 /*! exports provided: default */ 11201 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11202 11203 "use strict"; 11204 __webpack_require__.r(__webpack_exports__); 11205 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/simple-html-tokenizer/dist/es6/utils.js"); 11206 11207 var EventedTokenizer = /** @class */ (function () { 11208 function EventedTokenizer(delegate, entityParser) { 11209 this.delegate = delegate; 11210 this.entityParser = entityParser; 11211 this.state = null; 11212 this.input = null; 11213 this.index = -1; 11214 this.tagLine = -1; 11215 this.tagColumn = -1; 11216 this.line = -1; 11217 this.column = -1; 11218 this.states = { 11219 beforeData: function () { 11220 var char = this.peek(); 11221 if (char === "<") { 11222 this.state = 'tagOpen'; 11223 this.markTagStart(); 11224 this.consume(); 11225 } 11226 else { 11227 this.state = 'data'; 11228 this.delegate.beginData(); 11229 } 11230 }, 11231 data: function () { 11232 var char = this.peek(); 11233 if (char === "<") { 11234 this.delegate.finishData(); 11235 this.state = 'tagOpen'; 11236 this.markTagStart(); 11237 this.consume(); 11238 } 11239 else if (char === "&") { 11240 this.consume(); 11241 this.delegate.appendToData(this.consumeCharRef() || "&"); 11242 } 11243 else { 11244 this.consume(); 11245 this.delegate.appendToData(char); 11246 } 11247 }, 11248 tagOpen: function () { 11249 var char = this.consume(); 11250 if (char === "!") { 11251 this.state = 'markupDeclaration'; 11252 } 11253 else if (char === "/") { 11254 this.state = 'endTagOpen'; 11255 } 11256 else if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isAlpha"])(char)) { 11257 this.state = 'tagName'; 11258 this.delegate.beginStartTag(); 11259 this.delegate.appendToTagName(char.toLowerCase()); 11260 } 11261 }, 11262 markupDeclaration: function () { 11263 var char = this.consume(); 11264 if (char === "-" && this.input.charAt(this.index) === "-") { 11265 this.consume(); 11266 this.state = 'commentStart'; 11267 this.delegate.beginComment(); 11268 } 11269 }, 11270 commentStart: function () { 11271 var char = this.consume(); 11272 if (char === "-") { 11273 this.state = 'commentStartDash'; 11274 } 11275 else if (char === ">") { 11276 this.delegate.finishComment(); 11277 this.state = 'beforeData'; 11278 } 11279 else { 11280 this.delegate.appendToCommentData(char); 11281 this.state = 'comment'; 11282 } 11283 }, 11284 commentStartDash: function () { 11285 var char = this.consume(); 11286 if (char === "-") { 11287 this.state = 'commentEnd'; 11288 } 11289 else if (char === ">") { 11290 this.delegate.finishComment(); 11291 this.state = 'beforeData'; 11292 } 11293 else { 11294 this.delegate.appendToCommentData("-"); 11295 this.state = 'comment'; 11296 } 11297 }, 11298 comment: function () { 11299 var char = this.consume(); 11300 if (char === "-") { 11301 this.state = 'commentEndDash'; 11302 } 11303 else { 11304 this.delegate.appendToCommentData(char); 11305 } 11306 }, 11307 commentEndDash: function () { 11308 var char = this.consume(); 11309 if (char === "-") { 11310 this.state = 'commentEnd'; 11311 } 11312 else { 11313 this.delegate.appendToCommentData("-" + char); 11314 this.state = 'comment'; 11315 } 11316 }, 11317 commentEnd: function () { 11318 var char = this.consume(); 11319 if (char === ">") { 11320 this.delegate.finishComment(); 11321 this.state = 'beforeData'; 11322 } 11323 else { 11324 this.delegate.appendToCommentData("--" + char); 11325 this.state = 'comment'; 11326 } 11327 }, 11328 tagName: function () { 11329 var char = this.consume(); 11330 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) { 11331 this.state = 'beforeAttributeName'; 11332 } 11333 else if (char === "/") { 11334 this.state = 'selfClosingStartTag'; 11335 } 11336 else if (char === ">") { 11337 this.delegate.finishTag(); 11338 this.state = 'beforeData'; 11339 } 11340 else { 11341 this.delegate.appendToTagName(char); 11342 } 11343 }, 11344 beforeAttributeName: function () { 11345 var char = this.peek(); 11346 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) { 11347 this.consume(); 11348 return; 11349 } 11350 else if (char === "/") { 11351 this.state = 'selfClosingStartTag'; 11352 this.consume(); 11353 } 11354 else if (char === ">") { 11355 this.consume(); 11356 this.delegate.finishTag(); 11357 this.state = 'beforeData'; 11358 } 11359 else if (char === '=') { 11360 this.delegate.reportSyntaxError("attribute name cannot start with equals sign"); 11361 this.state = 'attributeName'; 11362 this.delegate.beginAttribute(); 11363 this.consume(); 11364 this.delegate.appendToAttributeName(char); 11365 } 11366 else { 11367 this.state = 'attributeName'; 11368 this.delegate.beginAttribute(); 11369 } 11370 }, 11371 attributeName: function () { 11372 var char = this.peek(); 11373 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) { 11374 this.state = 'afterAttributeName'; 11375 this.consume(); 11376 } 11377 else if (char === "/") { 11378 this.delegate.beginAttributeValue(false); 11379 this.delegate.finishAttributeValue(); 11380 this.consume(); 11381 this.state = 'selfClosingStartTag'; 11382 } 11383 else if (char === "=") { 11384 this.state = 'beforeAttributeValue'; 11385 this.consume(); 11386 } 11387 else if (char === ">") { 11388 this.delegate.beginAttributeValue(false); 11389 this.delegate.finishAttributeValue(); 11390 this.consume(); 11391 this.delegate.finishTag(); 11392 this.state = 'beforeData'; 11393 } 11394 else if (char === '"' || char === "'" || char === '<') { 11395 this.delegate.reportSyntaxError(char + " is not a valid character within attribute names"); 11396 this.consume(); 11397 this.delegate.appendToAttributeName(char); 11398 } 11399 else { 11400 this.consume(); 11401 this.delegate.appendToAttributeName(char); 11402 } 11403 }, 11404 afterAttributeName: function () { 11405 var char = this.peek(); 11406 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) { 11407 this.consume(); 11408 return; 11409 } 11410 else if (char === "/") { 11411 this.delegate.beginAttributeValue(false); 11412 this.delegate.finishAttributeValue(); 11413 this.consume(); 11414 this.state = 'selfClosingStartTag'; 11415 } 11416 else if (char === "=") { 11417 this.consume(); 11418 this.state = 'beforeAttributeValue'; 11419 } 11420 else if (char === ">") { 11421 this.delegate.beginAttributeValue(false); 11422 this.delegate.finishAttributeValue(); 11423 this.consume(); 11424 this.delegate.finishTag(); 11425 this.state = 'beforeData'; 11426 } 11427 else { 11428 this.delegate.beginAttributeValue(false); 11429 this.delegate.finishAttributeValue(); 11430 this.consume(); 11431 this.state = 'attributeName'; 11432 this.delegate.beginAttribute(); 11433 this.delegate.appendToAttributeName(char); 11434 } 11435 }, 11436 beforeAttributeValue: function () { 11437 var char = this.peek(); 11438 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) { 11439 this.consume(); 11440 } 11441 else if (char === '"') { 11442 this.state = 'attributeValueDoubleQuoted'; 11443 this.delegate.beginAttributeValue(true); 11444 this.consume(); 11445 } 11446 else if (char === "'") { 11447 this.state = 'attributeValueSingleQuoted'; 11448 this.delegate.beginAttributeValue(true); 11449 this.consume(); 11450 } 11451 else if (char === ">") { 11452 this.delegate.beginAttributeValue(false); 11453 this.delegate.finishAttributeValue(); 11454 this.consume(); 11455 this.delegate.finishTag(); 11456 this.state = 'beforeData'; 11457 } 11458 else { 11459 this.state = 'attributeValueUnquoted'; 11460 this.delegate.beginAttributeValue(false); 11461 this.consume(); 11462 this.delegate.appendToAttributeValue(char); 11463 } 11464 }, 11465 attributeValueDoubleQuoted: function () { 11466 var char = this.consume(); 11467 if (char === '"') { 11468 this.delegate.finishAttributeValue(); 11469 this.state = 'afterAttributeValueQuoted'; 11470 } 11471 else if (char === "&") { 11472 this.delegate.appendToAttributeValue(this.consumeCharRef('"') || "&"); 11473 } 11474 else { 11475 this.delegate.appendToAttributeValue(char); 11476 } 11477 }, 11478 attributeValueSingleQuoted: function () { 11479 var char = this.consume(); 11480 if (char === "'") { 11481 this.delegate.finishAttributeValue(); 11482 this.state = 'afterAttributeValueQuoted'; 11483 } 11484 else if (char === "&") { 11485 this.delegate.appendToAttributeValue(this.consumeCharRef("'") || "&"); 11486 } 11487 else { 11488 this.delegate.appendToAttributeValue(char); 11489 } 11490 }, 11491 attributeValueUnquoted: function () { 11492 var char = this.peek(); 11493 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) { 11494 this.delegate.finishAttributeValue(); 11495 this.consume(); 11496 this.state = 'beforeAttributeName'; 11497 } 11498 else if (char === "&") { 11499 this.consume(); 11500 this.delegate.appendToAttributeValue(this.consumeCharRef(">") || "&"); 11501 } 11502 else if (char === ">") { 11503 this.delegate.finishAttributeValue(); 11504 this.consume(); 11505 this.delegate.finishTag(); 11506 this.state = 'beforeData'; 11507 } 11508 else { 11509 this.consume(); 11510 this.delegate.appendToAttributeValue(char); 11511 } 11512 }, 11513 afterAttributeValueQuoted: function () { 11514 var char = this.peek(); 11515 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isSpace"])(char)) { 11516 this.consume(); 11517 this.state = 'beforeAttributeName'; 11518 } 11519 else if (char === "/") { 11520 this.consume(); 11521 this.state = 'selfClosingStartTag'; 11522 } 11523 else if (char === ">") { 11524 this.consume(); 11525 this.delegate.finishTag(); 11526 this.state = 'beforeData'; 11527 } 11528 else { 11529 this.state = 'beforeAttributeName'; 11530 } 11531 }, 11532 selfClosingStartTag: function () { 11533 var char = this.peek(); 11534 if (char === ">") { 11535 this.consume(); 11536 this.delegate.markTagAsSelfClosing(); 11537 this.delegate.finishTag(); 11538 this.state = 'beforeData'; 11539 } 11540 else { 11541 this.state = 'beforeAttributeName'; 11542 } 11543 }, 11544 endTagOpen: function () { 11545 var char = this.consume(); 11546 if (Object(_utils__WEBPACK_IMPORTED_MODULE_0__["isAlpha"])(char)) { 11547 this.state = 'tagName'; 11548 this.delegate.beginEndTag(); 11549 this.delegate.appendToTagName(char.toLowerCase()); 11550 } 11551 } 11552 }; 11553 this.reset(); 11554 } 11555 EventedTokenizer.prototype.reset = function () { 11556 this.state = 'beforeData'; 11557 this.input = ''; 11558 this.index = 0; 11559 this.line = 1; 11560 this.column = 0; 11561 this.tagLine = -1; 11562 this.tagColumn = -1; 11563 this.delegate.reset(); 11564 }; 11565 EventedTokenizer.prototype.tokenize = function (input) { 11566 this.reset(); 11567 this.tokenizePart(input); 11568 this.tokenizeEOF(); 11569 }; 11570 EventedTokenizer.prototype.tokenizePart = function (input) { 11571 this.input += Object(_utils__WEBPACK_IMPORTED_MODULE_0__["preprocessInput"])(input); 11572 while (this.index < this.input.length) { 11573 this.states[this.state].call(this); 11574 } 11575 }; 11576 EventedTokenizer.prototype.tokenizeEOF = function () { 11577 this.flushData(); 11578 }; 11579 EventedTokenizer.prototype.flushData = function () { 11580 if (this.state === 'data') { 11581 this.delegate.finishData(); 11582 this.state = 'beforeData'; 11583 } 11584 }; 11585 EventedTokenizer.prototype.peek = function () { 11586 return this.input.charAt(this.index); 11587 }; 11588 EventedTokenizer.prototype.consume = function () { 11589 var char = this.peek(); 11590 this.index++; 11591 if (char === "\n") { 11592 this.line++; 11593 this.column = 0; 11594 } 11595 else { 11596 this.column++; 11597 } 11598 return char; 11599 }; 11600 EventedTokenizer.prototype.consumeCharRef = function () { 11601 var endIndex = this.input.indexOf(';', this.index); 11602 if (endIndex === -1) { 11603 return; 11604 } 11605 var entity = this.input.slice(this.index, endIndex); 11606 var chars = this.entityParser.parse(entity); 11607 if (chars) { 11608 var count = entity.length; 11609 // consume the entity chars 11610 while (count) { 11611 this.consume(); 11612 count--; 11613 } 11614 // consume the `;` 11615 this.consume(); 11616 return chars; 11617 } 11618 }; 11619 EventedTokenizer.prototype.markTagStart = function () { 11620 // these properties to be removed in next major bump 11621 this.tagLine = this.line; 11622 this.tagColumn = this.column; 11623 if (this.delegate.tagOpen) { 11624 this.delegate.tagOpen(); 11625 } 11626 }; 11627 return EventedTokenizer; 11628 }()); 11629 /* harmony default export */ __webpack_exports__["default"] = (EventedTokenizer); 11630 11631 11632 /***/ }), 11633 11634 /***/ "./node_modules/simple-html-tokenizer/dist/es6/html5-named-char-refs.js": 11635 /*!******************************************************************************!*\ 11636 !*** ./node_modules/simple-html-tokenizer/dist/es6/html5-named-char-refs.js ***! 11637 \******************************************************************************/ 11638 /*! exports provided: default */ 11639 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11640 11641 "use strict"; 11642 __webpack_require__.r(__webpack_exports__); 11643 /* harmony default export */ __webpack_exports__["default"] = ({ 11644 Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾̳", Acirc: "Â", acirc: "â", acute: "´", Acy: "А", acy: "а", AElig: "Æ", aelig: "æ", af: "\u2061", Afr: "𝔄", afr: "𝔞", Agrave: "À", agrave: "à", alefsym: "ℵ", aleph: "ℵ", Alpha: "Α", alpha: "α", Amacr: "Ā", amacr: "ā", amalg: "⨿", AMP: "&", amp: "&", And: "⩓", and: "∧", andand: "⩕", andd: "⩜", andslope: "⩘", andv: "⩚", ang: "∠", ange: "⦤", angle: "∠", angmsd: "∡", angmsdaa: "⦨", angmsdab: "⦩", angmsdac: "⦪", angmsdad: "⦫", angmsdae: "⦬", angmsdaf: "⦭", angmsdag: "⦮", angmsdah: "⦯", angrt: "∟", angrtvb: "⊾", angrtvbd: "⦝", angsph: "∢", angst: "Å", angzarr: "⍼", Aogon: "Ą", aogon: "ą", Aopf: "𝔸", aopf: "𝕒", ap: "≈", apacir: "⩯", apE: "⩰", ape: "≊", apid: "≋", apos: "'", ApplyFunction: "\u2061", approx: "≈", approxeq: "≊", Aring: "Å", aring: "å", Ascr: "𝒜", ascr: "𝒶", Assign: "≔", ast: "*", asymp: "≈", asympeq: "≍", Atilde: "Ã", atilde: "ã", Auml: "Ä", auml: "ä", awconint: "∳", awint: "⨑", backcong: "≌", backepsilon: "϶", backprime: "‵", backsim: "∽", backsimeq: "⋍", Backslash: "∖", Barv: "⫧", barvee: "⊽", Barwed: "⌆", barwed: "⌅", barwedge: "⌅", bbrk: "⎵", bbrktbrk: "⎶", bcong: "≌", Bcy: "Б", bcy: "б", bdquo: "„", becaus: "∵", Because: "∵", because: "∵", bemptyv: "⦰", bepsi: "϶", bernou: "ℬ", Bernoullis: "ℬ", Beta: "Β", beta: "β", beth: "ℶ", between: "≬", Bfr: "𝔅", bfr: "𝔟", bigcap: "⋂", bigcirc: "◯", bigcup: "⋃", bigodot: "⨀", bigoplus: "⨁", bigotimes: "⨂", bigsqcup: "⨆", bigstar: "★", bigtriangledown: "▽", bigtriangleup: "△", biguplus: "⨄", bigvee: "⋁", bigwedge: "⋀", bkarow: "⤍", blacklozenge: "⧫", blacksquare: "▪", blacktriangle: "▴", blacktriangledown: "▾", blacktriangleleft: "◂", blacktriangleright: "▸", blank: "␣", blk12: "▒", blk14: "░", blk34: "▓", block: "█", bne: "=⃥", bnequiv: "≡⃥", bNot: "⫭", bnot: "⌐", Bopf: "𝔹", bopf: "𝕓", bot: "⊥", bottom: "⊥", bowtie: "⋈", boxbox: "⧉", boxDL: "╗", boxDl: "╖", boxdL: "╕", boxdl: "┐", boxDR: "╔", boxDr: "╓", boxdR: "╒", boxdr: "┌", boxH: "═", boxh: "─", boxHD: "╦", boxHd: "╤", boxhD: "╥", boxhd: "┬", boxHU: "╩", boxHu: "╧", boxhU: "╨", boxhu: "┴", boxminus: "⊟", boxplus: "⊞", boxtimes: "⊠", boxUL: "╝", boxUl: "╜", boxuL: "╛", boxul: "┘", boxUR: "╚", boxUr: "╙", boxuR: "╘", boxur: "└", boxV: "║", boxv: "│", boxVH: "╬", boxVh: "╫", boxvH: "╪", boxvh: "┼", boxVL: "╣", boxVl: "╢", boxvL: "╡", boxvl: "┤", boxVR: "╠", boxVr: "╟", boxvR: "╞", boxvr: "├", bprime: "‵", Breve: "˘", breve: "˘", brvbar: "¦", Bscr: "ℬ", bscr: "𝒷", bsemi: "⁏", bsim: "∽", bsime: "⋍", bsol: "\\", bsolb: "⧅", bsolhsub: "⟈", bull: "•", bullet: "•", bump: "≎", bumpE: "⪮", bumpe: "≏", Bumpeq: "≎", bumpeq: "≏", Cacute: "Ć", cacute: "ć", Cap: "⋒", cap: "∩", capand: "⩄", capbrcup: "⩉", capcap: "⩋", capcup: "⩇", capdot: "⩀", CapitalDifferentialD: "ⅅ", caps: "∩︀", caret: "⁁", caron: "ˇ", Cayleys: "ℭ", ccaps: "⩍", Ccaron: "Č", ccaron: "č", Ccedil: "Ç", ccedil: "ç", Ccirc: "Ĉ", ccirc: "ĉ", Cconint: "∰", ccups: "⩌", ccupssm: "⩐", Cdot: "Ċ", cdot: "ċ", cedil: "¸", Cedilla: "¸", cemptyv: "⦲", cent: "¢", CenterDot: "·", centerdot: "·", Cfr: "ℭ", cfr: "𝔠", CHcy: "Ч", chcy: "ч", check: "✓", checkmark: "✓", Chi: "Χ", chi: "χ", cir: "○", circ: "ˆ", circeq: "≗", circlearrowleft: "↺", circlearrowright: "↻", circledast: "⊛", circledcirc: "⊚", circleddash: "⊝", CircleDot: "⊙", circledR: "®", circledS: "Ⓢ", CircleMinus: "⊖", CirclePlus: "⊕", CircleTimes: "⊗", cirE: "⧃", cire: "≗", cirfnint: "⨐", cirmid: "⫯", cirscir: "⧂", ClockwiseContourIntegral: "∲", CloseCurlyDoubleQuote: "”", CloseCurlyQuote: "’", clubs: "♣", clubsuit: "♣", Colon: "∷", colon: ":", Colone: "⩴", colone: "≔", coloneq: "≔", comma: ",", commat: "@", comp: "∁", compfn: "∘", complement: "∁", complexes: "ℂ", cong: "≅", congdot: "⩭", Congruent: "≡", Conint: "∯", conint: "∮", ContourIntegral: "∮", Copf: "ℂ", copf: "𝕔", coprod: "∐", Coproduct: "∐", COPY: "©", copy: "©", copysr: "℗", CounterClockwiseContourIntegral: "∳", crarr: "↵", Cross: "⨯", cross: "✗", Cscr: "𝒞", cscr: "𝒸", csub: "⫏", csube: "⫑", csup: "⫐", csupe: "⫒", ctdot: "⋯", cudarrl: "⤸", cudarrr: "⤵", cuepr: "⋞", cuesc: "⋟", cularr: "↶", cularrp: "⤽", Cup: "⋓", cup: "∪", cupbrcap: "⩈", CupCap: "≍", cupcap: "⩆", cupcup: "⩊", cupdot: "⊍", cupor: "⩅", cups: "∪︀", curarr: "↷", curarrm: "⤼", curlyeqprec: "⋞", curlyeqsucc: "⋟", curlyvee: "⋎", curlywedge: "⋏", curren: "¤", curvearrowleft: "↶", curvearrowright: "↷", cuvee: "⋎", cuwed: "⋏", cwconint: "∲", cwint: "∱", cylcty: "⌭", Dagger: "‡", dagger: "†", daleth: "ℸ", Darr: "↡", dArr: "⇓", darr: "↓", dash: "‐", Dashv: "⫤", dashv: "⊣", dbkarow: "⤏", dblac: "˝", Dcaron: "Ď", dcaron: "ď", Dcy: "Д", dcy: "д", DD: "ⅅ", dd: "ⅆ", ddagger: "‡", ddarr: "⇊", DDotrahd: "⤑", ddotseq: "⩷", deg: "°", Del: "∇", Delta: "Δ", delta: "δ", demptyv: "⦱", dfisht: "⥿", Dfr: "𝔇", dfr: "𝔡", dHar: "⥥", dharl: "⇃", dharr: "⇂", DiacriticalAcute: "´", DiacriticalDot: "˙", DiacriticalDoubleAcute: "˝", DiacriticalGrave: "`", DiacriticalTilde: "˜", diam: "⋄", Diamond: "⋄", diamond: "⋄", diamondsuit: "♦", diams: "♦", die: "¨", DifferentialD: "ⅆ", digamma: "ϝ", disin: "⋲", div: "÷", divide: "÷", divideontimes: "⋇", divonx: "⋇", DJcy: "Ђ", djcy: "ђ", dlcorn: "⌞", dlcrop: "⌍", dollar: "$", Dopf: "𝔻", dopf: "𝕕", Dot: "¨", dot: "˙", DotDot: "⃜", doteq: "≐", doteqdot: "≑", DotEqual: "≐", dotminus: "∸", dotplus: "∔", dotsquare: "⊡", doublebarwedge: "⌆", DoubleContourIntegral: "∯", DoubleDot: "¨", DoubleDownArrow: "⇓", DoubleLeftArrow: "⇐", DoubleLeftRightArrow: "⇔", DoubleLeftTee: "⫤", DoubleLongLeftArrow: "⟸", DoubleLongLeftRightArrow: "⟺", DoubleLongRightArrow: "⟹", DoubleRightArrow: "⇒", DoubleRightTee: "⊨", DoubleUpArrow: "⇑", DoubleUpDownArrow: "⇕", DoubleVerticalBar: "∥", DownArrow: "↓", Downarrow: "⇓", downarrow: "↓", DownArrowBar: "⤓", DownArrowUpArrow: "⇵", DownBreve: "̑", downdownarrows: "⇊", downharpoonleft: "⇃", downharpoonright: "⇂", DownLeftRightVector: "⥐", DownLeftTeeVector: "⥞", DownLeftVector: "↽", DownLeftVectorBar: "⥖", DownRightTeeVector: "⥟", DownRightVector: "⇁", DownRightVectorBar: "⥗", DownTee: "⊤", DownTeeArrow: "↧", drbkarow: "⤐", drcorn: "⌟", drcrop: "⌌", Dscr: "𝒟", dscr: "𝒹", DScy: "Ѕ", dscy: "ѕ", dsol: "⧶", Dstrok: "Đ", dstrok: "đ", dtdot: "⋱", dtri: "▿", dtrif: "▾", duarr: "⇵", duhar: "⥯", dwangle: "⦦", DZcy: "Џ", dzcy: "џ", dzigrarr: "⟿", Eacute: "É", eacute: "é", easter: "⩮", Ecaron: "Ě", ecaron: "ě", ecir: "≖", Ecirc: "Ê", ecirc: "ê", ecolon: "≕", Ecy: "Э", ecy: "э", eDDot: "⩷", Edot: "Ė", eDot: "≑", edot: "ė", ee: "ⅇ", efDot: "≒", Efr: "𝔈", efr: "𝔢", eg: "⪚", Egrave: "È", egrave: "è", egs: "⪖", egsdot: "⪘", el: "⪙", Element: "∈", elinters: "⏧", ell: "ℓ", els: "⪕", elsdot: "⪗", Emacr: "Ē", emacr: "ē", empty: "∅", emptyset: "∅", EmptySmallSquare: "◻", emptyv: "∅", EmptyVerySmallSquare: "▫", emsp: " ", emsp13: " ", emsp14: " ", ENG: "Ŋ", eng: "ŋ", ensp: " ", Eogon: "Ę", eogon: "ę", Eopf: "𝔼", eopf: "𝕖", epar: "⋕", eparsl: "⧣", eplus: "⩱", epsi: "ε", Epsilon: "Ε", epsilon: "ε", epsiv: "ϵ", eqcirc: "≖", eqcolon: "≕", eqsim: "≂", eqslantgtr: "⪖", eqslantless: "⪕", Equal: "⩵", equals: "=", EqualTilde: "≂", equest: "≟", Equilibrium: "⇌", equiv: "≡", equivDD: "⩸", eqvparsl: "⧥", erarr: "⥱", erDot: "≓", Escr: "ℰ", escr: "ℯ", esdot: "≐", Esim: "⩳", esim: "≂", Eta: "Η", eta: "η", ETH: "Ð", eth: "ð", Euml: "Ë", euml: "ë", euro: "€", excl: "!", exist: "∃", Exists: "∃", expectation: "ℰ", ExponentialE: "ⅇ", exponentiale: "ⅇ", fallingdotseq: "≒", Fcy: "Ф", fcy: "ф", female: "♀", ffilig: "ffi", fflig: "ff", ffllig: "ffl", Ffr: "𝔉", ffr: "𝔣", filig: "fi", FilledSmallSquare: "◼", FilledVerySmallSquare: "▪", fjlig: "fj", flat: "♭", fllig: "fl", fltns: "▱", fnof: "ƒ", Fopf: "𝔽", fopf: "𝕗", ForAll: "∀", forall: "∀", fork: "⋔", forkv: "⫙", Fouriertrf: "ℱ", fpartint: "⨍", frac12: "½", frac13: "⅓", frac14: "¼", frac15: "⅕", frac16: "⅙", frac18: "⅛", frac23: "⅔", frac25: "⅖", frac34: "¾", frac35: "⅗", frac38: "⅜", frac45: "⅘", frac56: "⅚", frac58: "⅝", frac78: "⅞", frasl: "⁄", frown: "⌢", Fscr: "ℱ", fscr: "𝒻", gacute: "ǵ", Gamma: "Γ", gamma: "γ", Gammad: "Ϝ", gammad: "ϝ", gap: "⪆", Gbreve: "Ğ", gbreve: "ğ", Gcedil: "Ģ", Gcirc: "Ĝ", gcirc: "ĝ", Gcy: "Г", gcy: "г", Gdot: "Ġ", gdot: "ġ", gE: "≧", ge: "≥", gEl: "⪌", gel: "⋛", geq: "≥", geqq: "≧", geqslant: "⩾", ges: "⩾", gescc: "⪩", gesdot: "⪀", gesdoto: "⪂", gesdotol: "⪄", gesl: "⋛︀", gesles: "⪔", Gfr: "𝔊", gfr: "𝔤", Gg: "⋙", gg: "≫", ggg: "⋙", gimel: "ℷ", GJcy: "Ѓ", gjcy: "ѓ", gl: "≷", gla: "⪥", glE: "⪒", glj: "⪤", gnap: "⪊", gnapprox: "⪊", gnE: "≩", gne: "⪈", gneq: "⪈", gneqq: "≩", gnsim: "⋧", Gopf: "𝔾", gopf: "𝕘", grave: "`", GreaterEqual: "≥", GreaterEqualLess: "⋛", GreaterFullEqual: "≧", GreaterGreater: "⪢", GreaterLess: "≷", GreaterSlantEqual: "⩾", GreaterTilde: "≳", Gscr: "𝒢", gscr: "ℊ", gsim: "≳", gsime: "⪎", gsiml: "⪐", GT: ">", Gt: "≫", gt: ">", gtcc: "⪧", gtcir: "⩺", gtdot: "⋗", gtlPar: "⦕", gtquest: "⩼", gtrapprox: "⪆", gtrarr: "⥸", gtrdot: "⋗", gtreqless: "⋛", gtreqqless: "⪌", gtrless: "≷", gtrsim: "≳", gvertneqq: "≩︀", gvnE: "≩︀", Hacek: "ˇ", hairsp: " ", half: "½", hamilt: "ℋ", HARDcy: "Ъ", hardcy: "ъ", hArr: "⇔", harr: "↔", harrcir: "⥈", harrw: "↭", Hat: "^", hbar: "ℏ", Hcirc: "Ĥ", hcirc: "ĥ", hearts: "♥", heartsuit: "♥", hellip: "…", hercon: "⊹", Hfr: "ℌ", hfr: "𝔥", HilbertSpace: "ℋ", hksearow: "⤥", hkswarow: "⤦", hoarr: "⇿", homtht: "∻", hookleftarrow: "↩", hookrightarrow: "↪", Hopf: "ℍ", hopf: "𝕙", horbar: "―", HorizontalLine: "─", Hscr: "ℋ", hscr: "𝒽", hslash: "ℏ", Hstrok: "Ħ", hstrok: "ħ", HumpDownHump: "≎", HumpEqual: "≏", hybull: "⁃", hyphen: "‐", Iacute: "Í", iacute: "í", ic: "\u2063", Icirc: "Î", icirc: "î", Icy: "И", icy: "и", Idot: "İ", IEcy: "Е", iecy: "е", iexcl: "¡", iff: "⇔", Ifr: "ℑ", ifr: "𝔦", Igrave: "Ì", igrave: "ì", ii: "ⅈ", iiiint: "⨌", iiint: "∭", iinfin: "⧜", iiota: "℩", IJlig: "IJ", ijlig: "ij", Im: "ℑ", Imacr: "Ī", imacr: "ī", image: "ℑ", ImaginaryI: "ⅈ", imagline: "ℐ", imagpart: "ℑ", imath: "ı", imof: "⊷", imped: "Ƶ", Implies: "⇒", in: "∈", incare: "℅", infin: "∞", infintie: "⧝", inodot: "ı", Int: "∬", int: "∫", intcal: "⊺", integers: "ℤ", Integral: "∫", intercal: "⊺", Intersection: "⋂", intlarhk: "⨗", intprod: "⨼", InvisibleComma: "\u2063", InvisibleTimes: "\u2062", IOcy: "Ё", iocy: "ё", Iogon: "Į", iogon: "į", Iopf: "𝕀", iopf: "𝕚", Iota: "Ι", iota: "ι", iprod: "⨼", iquest: "¿", Iscr: "ℐ", iscr: "𝒾", isin: "∈", isindot: "⋵", isinE: "⋹", isins: "⋴", isinsv: "⋳", isinv: "∈", it: "\u2062", Itilde: "Ĩ", itilde: "ĩ", Iukcy: "І", iukcy: "і", Iuml: "Ï", iuml: "ï", Jcirc: "Ĵ", jcirc: "ĵ", Jcy: "Й", jcy: "й", Jfr: "𝔍", jfr: "𝔧", jmath: "ȷ", Jopf: "𝕁", jopf: "𝕛", Jscr: "𝒥", jscr: "𝒿", Jsercy: "Ј", jsercy: "ј", Jukcy: "Є", jukcy: "є", Kappa: "Κ", kappa: "κ", kappav: "ϰ", Kcedil: "Ķ", kcedil: "ķ", Kcy: "К", kcy: "к", Kfr: "𝔎", kfr: "𝔨", kgreen: "ĸ", KHcy: "Х", khcy: "х", KJcy: "Ќ", kjcy: "ќ", Kopf: "𝕂", kopf: "𝕜", Kscr: "𝒦", kscr: "𝓀", lAarr: "⇚", Lacute: "Ĺ", lacute: "ĺ", laemptyv: "⦴", lagran: "ℒ", Lambda: "Λ", lambda: "λ", Lang: "⟪", lang: "⟨", langd: "⦑", langle: "⟨", lap: "⪅", Laplacetrf: "ℒ", laquo: "«", Larr: "↞", lArr: "⇐", larr: "←", larrb: "⇤", larrbfs: "⤟", larrfs: "⤝", larrhk: "↩", larrlp: "↫", larrpl: "⤹", larrsim: "⥳", larrtl: "↢", lat: "⪫", lAtail: "⤛", latail: "⤙", late: "⪭", lates: "⪭︀", lBarr: "⤎", lbarr: "⤌", lbbrk: "❲", lbrace: "{", lbrack: "[", lbrke: "⦋", lbrksld: "⦏", lbrkslu: "⦍", Lcaron: "Ľ", lcaron: "ľ", Lcedil: "Ļ", lcedil: "ļ", lceil: "⌈", lcub: "{", Lcy: "Л", lcy: "л", ldca: "⤶", ldquo: "“", ldquor: "„", ldrdhar: "⥧", ldrushar: "⥋", ldsh: "↲", lE: "≦", le: "≤", LeftAngleBracket: "⟨", LeftArrow: "←", Leftarrow: "⇐", leftarrow: "←", LeftArrowBar: "⇤", LeftArrowRightArrow: "⇆", leftarrowtail: "↢", LeftCeiling: "⌈", LeftDoubleBracket: "⟦", LeftDownTeeVector: "⥡", LeftDownVector: "⇃", LeftDownVectorBar: "⥙", LeftFloor: "⌊", leftharpoondown: "↽", leftharpoonup: "↼", leftleftarrows: "⇇", LeftRightArrow: "↔", Leftrightarrow: "⇔", leftrightarrow: "↔", leftrightarrows: "⇆", leftrightharpoons: "⇋", leftrightsquigarrow: "↭", LeftRightVector: "⥎", LeftTee: "⊣", LeftTeeArrow: "↤", LeftTeeVector: "⥚", leftthreetimes: "⋋", LeftTriangle: "⊲", LeftTriangleBar: "⧏", LeftTriangleEqual: "⊴", LeftUpDownVector: "⥑", LeftUpTeeVector: "⥠", LeftUpVector: "↿", LeftUpVectorBar: "⥘", LeftVector: "↼", LeftVectorBar: "⥒", lEg: "⪋", leg: "⋚", leq: "≤", leqq: "≦", leqslant: "⩽", les: "⩽", lescc: "⪨", lesdot: "⩿", lesdoto: "⪁", lesdotor: "⪃", lesg: "⋚︀", lesges: "⪓", lessapprox: "⪅", lessdot: "⋖", lesseqgtr: "⋚", lesseqqgtr: "⪋", LessEqualGreater: "⋚", LessFullEqual: "≦", LessGreater: "≶", lessgtr: "≶", LessLess: "⪡", lesssim: "≲", LessSlantEqual: "⩽", LessTilde: "≲", lfisht: "⥼", lfloor: "⌊", Lfr: "𝔏", lfr: "𝔩", lg: "≶", lgE: "⪑", lHar: "⥢", lhard: "↽", lharu: "↼", lharul: "⥪", lhblk: "▄", LJcy: "Љ", ljcy: "љ", Ll: "⋘", ll: "≪", llarr: "⇇", llcorner: "⌞", Lleftarrow: "⇚", llhard: "⥫", lltri: "◺", Lmidot: "Ŀ", lmidot: "ŀ", lmoust: "⎰", lmoustache: "⎰", lnap: "⪉", lnapprox: "⪉", lnE: "≨", lne: "⪇", lneq: "⪇", lneqq: "≨", lnsim: "⋦", loang: "⟬", loarr: "⇽", lobrk: "⟦", LongLeftArrow: "⟵", Longleftarrow: "⟸", longleftarrow: "⟵", LongLeftRightArrow: "⟷", Longleftrightarrow: "⟺", longleftrightarrow: "⟷", longmapsto: "⟼", LongRightArrow: "⟶", Longrightarrow: "⟹", longrightarrow: "⟶", looparrowleft: "↫", looparrowright: "↬", lopar: "⦅", Lopf: "𝕃", lopf: "𝕝", loplus: "⨭", lotimes: "⨴", lowast: "∗", lowbar: "_", LowerLeftArrow: "↙", LowerRightArrow: "↘", loz: "◊", lozenge: "◊", lozf: "⧫", lpar: "(", lparlt: "⦓", lrarr: "⇆", lrcorner: "⌟", lrhar: "⇋", lrhard: "⥭", lrm: "\u200e", lrtri: "⊿", lsaquo: "‹", Lscr: "ℒ", lscr: "𝓁", Lsh: "↰", lsh: "↰", lsim: "≲", lsime: "⪍", lsimg: "⪏", lsqb: "[", lsquo: "‘", lsquor: "‚", Lstrok: "Ł", lstrok: "ł", LT: "<", Lt: "≪", lt: "<", ltcc: "⪦", ltcir: "⩹", ltdot: "⋖", lthree: "⋋", ltimes: "⋉", ltlarr: "⥶", ltquest: "⩻", ltri: "◃", ltrie: "⊴", ltrif: "◂", ltrPar: "⦖", lurdshar: "⥊", luruhar: "⥦", lvertneqq: "≨︀", lvnE: "≨︀", macr: "¯", male: "♂", malt: "✠", maltese: "✠", Map: "⤅", map: "↦", mapsto: "↦", mapstodown: "↧", mapstoleft: "↤", mapstoup: "↥", marker: "▮", mcomma: "⨩", Mcy: "М", mcy: "м", mdash: "—", mDDot: "∺", measuredangle: "∡", MediumSpace: " ", Mellintrf: "ℳ", Mfr: "𝔐", mfr: "𝔪", mho: "℧", micro: "µ", mid: "∣", midast: "*", midcir: "⫰", middot: "·", minus: "−", minusb: "⊟", minusd: "∸", minusdu: "⨪", MinusPlus: "∓", mlcp: "⫛", mldr: "…", mnplus: "∓", models: "⊧", Mopf: "𝕄", mopf: "𝕞", mp: "∓", Mscr: "ℳ", mscr: "𝓂", mstpos: "∾", Mu: "Μ", mu: "μ", multimap: "⊸", mumap: "⊸", nabla: "∇", Nacute: "Ń", nacute: "ń", nang: "∠⃒", nap: "≉", napE: "⩰̸", napid: "≋̸", napos: "ʼn", napprox: "≉", natur: "♮", natural: "♮", naturals: "ℕ", nbsp: " ", nbump: "≎̸", nbumpe: "≏̸", ncap: "⩃", Ncaron: "Ň", ncaron: "ň", Ncedil: "Ņ", ncedil: "ņ", ncong: "≇", ncongdot: "⩭̸", ncup: "⩂", Ncy: "Н", ncy: "н", ndash: "–", ne: "≠", nearhk: "⤤", neArr: "⇗", nearr: "↗", nearrow: "↗", nedot: "≐̸", NegativeMediumSpace: "", NegativeThickSpace: "", NegativeThinSpace: "", NegativeVeryThinSpace: "", nequiv: "≢", nesear: "⤨", nesim: "≂̸", NestedGreaterGreater: "≫", NestedLessLess: "≪", NewLine: "\u000a", nexist: "∄", nexists: "∄", Nfr: "𝔑", nfr: "𝔫", ngE: "≧̸", nge: "≱", ngeq: "≱", ngeqq: "≧̸", ngeqslant: "⩾̸", nges: "⩾̸", nGg: "⋙̸", ngsim: "≵", nGt: "≫⃒", ngt: "≯", ngtr: "≯", nGtv: "≫̸", nhArr: "⇎", nharr: "↮", nhpar: "⫲", ni: "∋", nis: "⋼", nisd: "⋺", niv: "∋", NJcy: "Њ", njcy: "њ", nlArr: "⇍", nlarr: "↚", nldr: "‥", nlE: "≦̸", nle: "≰", nLeftarrow: "⇍", nleftarrow: "↚", nLeftrightarrow: "⇎", nleftrightarrow: "↮", nleq: "≰", nleqq: "≦̸", nleqslant: "⩽̸", nles: "⩽̸", nless: "≮", nLl: "⋘̸", nlsim: "≴", nLt: "≪⃒", nlt: "≮", nltri: "⋪", nltrie: "⋬", nLtv: "≪̸", nmid: "∤", NoBreak: "\u2060", NonBreakingSpace: " ", Nopf: "ℕ", nopf: "𝕟", Not: "⫬", not: "¬", NotCongruent: "≢", NotCupCap: "≭", NotDoubleVerticalBar: "∦", NotElement: "∉", NotEqual: "≠", NotEqualTilde: "≂̸", NotExists: "∄", NotGreater: "≯", NotGreaterEqual: "≱", NotGreaterFullEqual: "≧̸", NotGreaterGreater: "≫̸", NotGreaterLess: "≹", NotGreaterSlantEqual: "⩾̸", NotGreaterTilde: "≵", NotHumpDownHump: "≎̸", NotHumpEqual: "≏̸", notin: "∉", notindot: "⋵̸", notinE: "⋹̸", notinva: "∉", notinvb: "⋷", notinvc: "⋶", NotLeftTriangle: "⋪", NotLeftTriangleBar: "⧏̸", NotLeftTriangleEqual: "⋬", NotLess: "≮", NotLessEqual: "≰", NotLessGreater: "≸", NotLessLess: "≪̸", NotLessSlantEqual: "⩽̸", NotLessTilde: "≴", NotNestedGreaterGreater: "⪢̸", NotNestedLessLess: "⪡̸", notni: "∌", notniva: "∌", notnivb: "⋾", notnivc: "⋽", NotPrecedes: "⊀", NotPrecedesEqual: "⪯̸", NotPrecedesSlantEqual: "⋠", NotReverseElement: "∌", NotRightTriangle: "⋫", NotRightTriangleBar: "⧐̸", NotRightTriangleEqual: "⋭", NotSquareSubset: "⊏̸", NotSquareSubsetEqual: "⋢", NotSquareSuperset: "⊐̸", NotSquareSupersetEqual: "⋣", NotSubset: "⊂⃒", NotSubsetEqual: "⊈", NotSucceeds: "⊁", NotSucceedsEqual: "⪰̸", NotSucceedsSlantEqual: "⋡", NotSucceedsTilde: "≿̸", NotSuperset: "⊃⃒", NotSupersetEqual: "⊉", NotTilde: "≁", NotTildeEqual: "≄", NotTildeFullEqual: "≇", NotTildeTilde: "≉", NotVerticalBar: "∤", npar: "∦", nparallel: "∦", nparsl: "⫽⃥", npart: "∂̸", npolint: "⨔", npr: "⊀", nprcue: "⋠", npre: "⪯̸", nprec: "⊀", npreceq: "⪯̸", nrArr: "⇏", nrarr: "↛", nrarrc: "⤳̸", nrarrw: "↝̸", nRightarrow: "⇏", nrightarrow: "↛", nrtri: "⋫", nrtrie: "⋭", nsc: "⊁", nsccue: "⋡", nsce: "⪰̸", Nscr: "𝒩", nscr: "𝓃", nshortmid: "∤", nshortparallel: "∦", nsim: "≁", nsime: "≄", nsimeq: "≄", nsmid: "∤", nspar: "∦", nsqsube: "⋢", nsqsupe: "⋣", nsub: "⊄", nsubE: "⫅̸", nsube: "⊈", nsubset: "⊂⃒", nsubseteq: "⊈", nsubseteqq: "⫅̸", nsucc: "⊁", nsucceq: "⪰̸", nsup: "⊅", nsupE: "⫆̸", nsupe: "⊉", nsupset: "⊃⃒", nsupseteq: "⊉", nsupseteqq: "⫆̸", ntgl: "≹", Ntilde: "Ñ", ntilde: "ñ", ntlg: "≸", ntriangleleft: "⋪", ntrianglelefteq: "⋬", ntriangleright: "⋫", ntrianglerighteq: "⋭", Nu: "Ν", nu: "ν", num: "#", numero: "№", numsp: " ", nvap: "≍⃒", nVDash: "⊯", nVdash: "⊮", nvDash: "⊭", nvdash: "⊬", nvge: "≥⃒", nvgt: ">⃒", nvHarr: "⤄", nvinfin: "⧞", nvlArr: "⤂", nvle: "≤⃒", nvlt: "<⃒", nvltrie: "⊴⃒", nvrArr: "⤃", nvrtrie: "⊵⃒", nvsim: "∼⃒", nwarhk: "⤣", nwArr: "⇖", nwarr: "↖", nwarrow: "↖", nwnear: "⤧", Oacute: "Ó", oacute: "ó", oast: "⊛", ocir: "⊚", Ocirc: "Ô", ocirc: "ô", Ocy: "О", ocy: "о", odash: "⊝", Odblac: "Ő", odblac: "ő", odiv: "⨸", odot: "⊙", odsold: "⦼", OElig: "Œ", oelig: "œ", ofcir: "⦿", Ofr: "𝔒", ofr: "𝔬", ogon: "˛", Ograve: "Ò", ograve: "ò", ogt: "⧁", ohbar: "⦵", ohm: "Ω", oint: "∮", olarr: "↺", olcir: "⦾", olcross: "⦻", oline: "‾", olt: "⧀", Omacr: "Ō", omacr: "ō", Omega: "Ω", omega: "ω", Omicron: "Ο", omicron: "ο", omid: "⦶", ominus: "⊖", Oopf: "𝕆", oopf: "𝕠", opar: "⦷", OpenCurlyDoubleQuote: "“", OpenCurlyQuote: "‘", operp: "⦹", oplus: "⊕", Or: "⩔", or: "∨", orarr: "↻", ord: "⩝", order: "ℴ", orderof: "ℴ", ordf: "ª", ordm: "º", origof: "⊶", oror: "⩖", orslope: "⩗", orv: "⩛", oS: "Ⓢ", Oscr: "𝒪", oscr: "ℴ", Oslash: "Ø", oslash: "ø", osol: "⊘", Otilde: "Õ", otilde: "õ", Otimes: "⨷", otimes: "⊗", otimesas: "⨶", Ouml: "Ö", ouml: "ö", ovbar: "⌽", OverBar: "‾", OverBrace: "⏞", OverBracket: "⎴", OverParenthesis: "⏜", par: "∥", para: "¶", parallel: "∥", parsim: "⫳", parsl: "⫽", part: "∂", PartialD: "∂", Pcy: "П", pcy: "п", percnt: "%", period: ".", permil: "‰", perp: "⊥", pertenk: "‱", Pfr: "𝔓", pfr: "𝔭", Phi: "Φ", phi: "φ", phiv: "ϕ", phmmat: "ℳ", phone: "☎", Pi: "Π", pi: "π", pitchfork: "⋔", piv: "ϖ", planck: "ℏ", planckh: "ℎ", plankv: "ℏ", plus: "+", plusacir: "⨣", plusb: "⊞", pluscir: "⨢", plusdo: "∔", plusdu: "⨥", pluse: "⩲", PlusMinus: "±", plusmn: "±", plussim: "⨦", plustwo: "⨧", pm: "±", Poincareplane: "ℌ", pointint: "⨕", Popf: "ℙ", popf: "𝕡", pound: "£", Pr: "⪻", pr: "≺", prap: "⪷", prcue: "≼", prE: "⪳", pre: "⪯", prec: "≺", precapprox: "⪷", preccurlyeq: "≼", Precedes: "≺", PrecedesEqual: "⪯", PrecedesSlantEqual: "≼", PrecedesTilde: "≾", preceq: "⪯", precnapprox: "⪹", precneqq: "⪵", precnsim: "⋨", precsim: "≾", Prime: "″", prime: "′", primes: "ℙ", prnap: "⪹", prnE: "⪵", prnsim: "⋨", prod: "∏", Product: "∏", profalar: "⌮", profline: "⌒", profsurf: "⌓", prop: "∝", Proportion: "∷", Proportional: "∝", propto: "∝", prsim: "≾", prurel: "⊰", Pscr: "𝒫", pscr: "𝓅", Psi: "Ψ", psi: "ψ", puncsp: " ", Qfr: "𝔔", qfr: "𝔮", qint: "⨌", Qopf: "ℚ", qopf: "𝕢", qprime: "⁗", Qscr: "𝒬", qscr: "𝓆", quaternions: "ℍ", quatint: "⨖", quest: "?", questeq: "≟", QUOT: "\"", quot: "\"", rAarr: "⇛", race: "∽̱", Racute: "Ŕ", racute: "ŕ", radic: "√", raemptyv: "⦳", Rang: "⟫", rang: "⟩", rangd: "⦒", range: "⦥", rangle: "⟩", raquo: "»", Rarr: "↠", rArr: "⇒", rarr: "→", rarrap: "⥵", rarrb: "⇥", rarrbfs: "⤠", rarrc: "⤳", rarrfs: "⤞", rarrhk: "↪", rarrlp: "↬", rarrpl: "⥅", rarrsim: "⥴", Rarrtl: "⤖", rarrtl: "↣", rarrw: "↝", rAtail: "⤜", ratail: "⤚", ratio: "∶", rationals: "ℚ", RBarr: "⤐", rBarr: "⤏", rbarr: "⤍", rbbrk: "❳", rbrace: "}", rbrack: "]", rbrke: "⦌", rbrksld: "⦎", rbrkslu: "⦐", Rcaron: "Ř", rcaron: "ř", Rcedil: "Ŗ", rcedil: "ŗ", rceil: "⌉", rcub: "}", Rcy: "Р", rcy: "р", rdca: "⤷", rdldhar: "⥩", rdquo: "”", rdquor: "”", rdsh: "↳", Re: "ℜ", real: "ℜ", realine: "ℛ", realpart: "ℜ", reals: "ℝ", rect: "▭", REG: "®", reg: "®", ReverseElement: "∋", ReverseEquilibrium: "⇋", ReverseUpEquilibrium: "⥯", rfisht: "⥽", rfloor: "⌋", Rfr: "ℜ", rfr: "𝔯", rHar: "⥤", rhard: "⇁", rharu: "⇀", rharul: "⥬", Rho: "Ρ", rho: "ρ", rhov: "ϱ", RightAngleBracket: "⟩", RightArrow: "→", Rightarrow: "⇒", rightarrow: "→", RightArrowBar: "⇥", RightArrowLeftArrow: "⇄", rightarrowtail: "↣", RightCeiling: "⌉", RightDoubleBracket: "⟧", RightDownTeeVector: "⥝", RightDownVector: "⇂", RightDownVectorBar: "⥕", RightFloor: "⌋", rightharpoondown: "⇁", rightharpoonup: "⇀", rightleftarrows: "⇄", rightleftharpoons: "⇌", rightrightarrows: "⇉", rightsquigarrow: "↝", RightTee: "⊢", RightTeeArrow: "↦", RightTeeVector: "⥛", rightthreetimes: "⋌", RightTriangle: "⊳", RightTriangleBar: "⧐", RightTriangleEqual: "⊵", RightUpDownVector: "⥏", RightUpTeeVector: "⥜", RightUpVector: "↾", RightUpVectorBar: "⥔", RightVector: "⇀", RightVectorBar: "⥓", ring: "˚", risingdotseq: "≓", rlarr: "⇄", rlhar: "⇌", rlm: "\u200f", rmoust: "⎱", rmoustache: "⎱", rnmid: "⫮", roang: "⟭", roarr: "⇾", robrk: "⟧", ropar: "⦆", Ropf: "ℝ", ropf: "𝕣", roplus: "⨮", rotimes: "⨵", RoundImplies: "⥰", rpar: ")", rpargt: "⦔", rppolint: "⨒", rrarr: "⇉", Rrightarrow: "⇛", rsaquo: "›", Rscr: "ℛ", rscr: "𝓇", Rsh: "↱", rsh: "↱", rsqb: "]", rsquo: "’", rsquor: "’", rthree: "⋌", rtimes: "⋊", rtri: "▹", rtrie: "⊵", rtrif: "▸", rtriltri: "⧎", RuleDelayed: "⧴", ruluhar: "⥨", rx: "℞", Sacute: "Ś", sacute: "ś", sbquo: "‚", Sc: "⪼", sc: "≻", scap: "⪸", Scaron: "Š", scaron: "š", sccue: "≽", scE: "⪴", sce: "⪰", Scedil: "Ş", scedil: "ş", Scirc: "Ŝ", scirc: "ŝ", scnap: "⪺", scnE: "⪶", scnsim: "⋩", scpolint: "⨓", scsim: "≿", Scy: "С", scy: "с", sdot: "⋅", sdotb: "⊡", sdote: "⩦", searhk: "⤥", seArr: "⇘", searr: "↘", searrow: "↘", sect: "§", semi: ";", seswar: "⤩", setminus: "∖", setmn: "∖", sext: "✶", Sfr: "𝔖", sfr: "𝔰", sfrown: "⌢", sharp: "♯", SHCHcy: "Щ", shchcy: "щ", SHcy: "Ш", shcy: "ш", ShortDownArrow: "↓", ShortLeftArrow: "←", shortmid: "∣", shortparallel: "∥", ShortRightArrow: "→", ShortUpArrow: "↑", shy: "\u00ad", Sigma: "Σ", sigma: "σ", sigmaf: "ς", sigmav: "ς", sim: "∼", simdot: "⩪", sime: "≃", simeq: "≃", simg: "⪞", simgE: "⪠", siml: "⪝", simlE: "⪟", simne: "≆", simplus: "⨤", simrarr: "⥲", slarr: "←", SmallCircle: "∘", smallsetminus: "∖", smashp: "⨳", smeparsl: "⧤", smid: "∣", smile: "⌣", smt: "⪪", smte: "⪬", smtes: "⪬︀", SOFTcy: "Ь", softcy: "ь", sol: "/", solb: "⧄", solbar: "⌿", Sopf: "𝕊", sopf: "𝕤", spades: "♠", spadesuit: "♠", spar: "∥", sqcap: "⊓", sqcaps: "⊓︀", sqcup: "⊔", sqcups: "⊔︀", Sqrt: "√", sqsub: "⊏", sqsube: "⊑", sqsubset: "⊏", sqsubseteq: "⊑", sqsup: "⊐", sqsupe: "⊒", sqsupset: "⊐", sqsupseteq: "⊒", squ: "□", Square: "□", square: "□", SquareIntersection: "⊓", SquareSubset: "⊏", SquareSubsetEqual: "⊑", SquareSuperset: "⊐", SquareSupersetEqual: "⊒", SquareUnion: "⊔", squarf: "▪", squf: "▪", srarr: "→", Sscr: "𝒮", sscr: "𝓈", ssetmn: "∖", ssmile: "⌣", sstarf: "⋆", Star: "⋆", star: "☆", starf: "★", straightepsilon: "ϵ", straightphi: "ϕ", strns: "¯", Sub: "⋐", sub: "⊂", subdot: "⪽", subE: "⫅", sube: "⊆", subedot: "⫃", submult: "⫁", subnE: "⫋", subne: "⊊", subplus: "⪿", subrarr: "⥹", Subset: "⋐", subset: "⊂", subseteq: "⊆", subseteqq: "⫅", SubsetEqual: "⊆", subsetneq: "⊊", subsetneqq: "⫋", subsim: "⫇", subsub: "⫕", subsup: "⫓", succ: "≻", succapprox: "⪸", succcurlyeq: "≽", Succeeds: "≻", SucceedsEqual: "⪰", SucceedsSlantEqual: "≽", SucceedsTilde: "≿", succeq: "⪰", succnapprox: "⪺", succneqq: "⪶", succnsim: "⋩", succsim: "≿", SuchThat: "∋", Sum: "∑", sum: "∑", sung: "♪", Sup: "⋑", sup: "⊃", sup1: "¹", sup2: "²", sup3: "³", supdot: "⪾", supdsub: "⫘", supE: "⫆", supe: "⊇", supedot: "⫄", Superset: "⊃", SupersetEqual: "⊇", suphsol: "⟉", suphsub: "⫗", suplarr: "⥻", supmult: "⫂", supnE: "⫌", supne: "⊋", supplus: "⫀", Supset: "⋑", supset: "⊃", supseteq: "⊇", supseteqq: "⫆", supsetneq: "⊋", supsetneqq: "⫌", supsim: "⫈", supsub: "⫔", supsup: "⫖", swarhk: "⤦", swArr: "⇙", swarr: "↙", swarrow: "↙", swnwar: "⤪", szlig: "ß", Tab: "\u0009", target: "⌖", Tau: "Τ", tau: "τ", tbrk: "⎴", Tcaron: "Ť", tcaron: "ť", Tcedil: "Ţ", tcedil: "ţ", Tcy: "Т", tcy: "т", tdot: "⃛", telrec: "⌕", Tfr: "𝔗", tfr: "𝔱", there4: "∴", Therefore: "∴", therefore: "∴", Theta: "Θ", theta: "θ", thetasym: "ϑ", thetav: "ϑ", thickapprox: "≈", thicksim: "∼", ThickSpace: " ", thinsp: " ", ThinSpace: " ", thkap: "≈", thksim: "∼", THORN: "Þ", thorn: "þ", Tilde: "∼", tilde: "˜", TildeEqual: "≃", TildeFullEqual: "≅", TildeTilde: "≈", times: "×", timesb: "⊠", timesbar: "⨱", timesd: "⨰", tint: "∭", toea: "⤨", top: "⊤", topbot: "⌶", topcir: "⫱", Topf: "𝕋", topf: "𝕥", topfork: "⫚", tosa: "⤩", tprime: "‴", TRADE: "™", trade: "™", triangle: "▵", triangledown: "▿", triangleleft: "◃", trianglelefteq: "⊴", triangleq: "≜", triangleright: "▹", trianglerighteq: "⊵", tridot: "◬", trie: "≜", triminus: "⨺", TripleDot: "⃛", triplus: "⨹", trisb: "⧍", tritime: "⨻", trpezium: "⏢", Tscr: "𝒯", tscr: "𝓉", TScy: "Ц", tscy: "ц", TSHcy: "Ћ", tshcy: "ћ", Tstrok: "Ŧ", tstrok: "ŧ", twixt: "≬", twoheadleftarrow: "↞", twoheadrightarrow: "↠", Uacute: "Ú", uacute: "ú", Uarr: "↟", uArr: "⇑", uarr: "↑", Uarrocir: "⥉", Ubrcy: "Ў", ubrcy: "ў", Ubreve: "Ŭ", ubreve: "ŭ", Ucirc: "Û", ucirc: "û", Ucy: "У", ucy: "у", udarr: "⇅", Udblac: "Ű", udblac: "ű", udhar: "⥮", ufisht: "⥾", Ufr: "𝔘", ufr: "𝔲", Ugrave: "Ù", ugrave: "ù", uHar: "⥣", uharl: "↿", uharr: "↾", uhblk: "▀", ulcorn: "⌜", ulcorner: "⌜", ulcrop: "⌏", ultri: "◸", Umacr: "Ū", umacr: "ū", uml: "¨", UnderBar: "_", UnderBrace: "⏟", UnderBracket: "⎵", UnderParenthesis: "⏝", Union: "⋃", UnionPlus: "⊎", Uogon: "Ų", uogon: "ų", Uopf: "𝕌", uopf: "𝕦", UpArrow: "↑", Uparrow: "⇑", uparrow: "↑", UpArrowBar: "⤒", UpArrowDownArrow: "⇅", UpDownArrow: "↕", Updownarrow: "⇕", updownarrow: "↕", UpEquilibrium: "⥮", upharpoonleft: "↿", upharpoonright: "↾", uplus: "⊎", UpperLeftArrow: "↖", UpperRightArrow: "↗", Upsi: "ϒ", upsi: "υ", upsih: "ϒ", Upsilon: "Υ", upsilon: "υ", UpTee: "⊥", UpTeeArrow: "↥", upuparrows: "⇈", urcorn: "⌝", urcorner: "⌝", urcrop: "⌎", Uring: "Ů", uring: "ů", urtri: "◹", Uscr: "𝒰", uscr: "𝓊", utdot: "⋰", Utilde: "Ũ", utilde: "ũ", utri: "▵", utrif: "▴", uuarr: "⇈", Uuml: "Ü", uuml: "ü", uwangle: "⦧", vangrt: "⦜", varepsilon: "ϵ", varkappa: "ϰ", varnothing: "∅", varphi: "ϕ", varpi: "ϖ", varpropto: "∝", vArr: "⇕", varr: "↕", varrho: "ϱ", varsigma: "ς", varsubsetneq: "⊊︀", varsubsetneqq: "⫋︀", varsupsetneq: "⊋︀", varsupsetneqq: "⫌︀", vartheta: "ϑ", vartriangleleft: "⊲", vartriangleright: "⊳", Vbar: "⫫", vBar: "⫨", vBarv: "⫩", Vcy: "В", vcy: "в", VDash: "⊫", Vdash: "⊩", vDash: "⊨", vdash: "⊢", Vdashl: "⫦", Vee: "⋁", vee: "∨", veebar: "⊻", veeeq: "≚", vellip: "⋮", Verbar: "‖", verbar: "|", Vert: "‖", vert: "|", VerticalBar: "∣", VerticalLine: "|", VerticalSeparator: "❘", VerticalTilde: "≀", VeryThinSpace: " ", Vfr: "𝔙", vfr: "𝔳", vltri: "⊲", vnsub: "⊂⃒", vnsup: "⊃⃒", Vopf: "𝕍", vopf: "𝕧", vprop: "∝", vrtri: "⊳", Vscr: "𝒱", vscr: "𝓋", vsubnE: "⫋︀", vsubne: "⊊︀", vsupnE: "⫌︀", vsupne: "⊋︀", Vvdash: "⊪", vzigzag: "⦚", Wcirc: "Ŵ", wcirc: "ŵ", wedbar: "⩟", Wedge: "⋀", wedge: "∧", wedgeq: "≙", weierp: "℘", Wfr: "𝔚", wfr: "𝔴", Wopf: "𝕎", wopf: "𝕨", wp: "℘", wr: "≀", wreath: "≀", Wscr: "𝒲", wscr: "𝓌", xcap: "⋂", xcirc: "◯", xcup: "⋃", xdtri: "▽", Xfr: "𝔛", xfr: "𝔵", xhArr: "⟺", xharr: "⟷", Xi: "Ξ", xi: "ξ", xlArr: "⟸", xlarr: "⟵", xmap: "⟼", xnis: "⋻", xodot: "⨀", Xopf: "𝕏", xopf: "𝕩", xoplus: "⨁", xotime: "⨂", xrArr: "⟹", xrarr: "⟶", Xscr: "𝒳", xscr: "𝓍", xsqcup: "⨆", xuplus: "⨄", xutri: "△", xvee: "⋁", xwedge: "⋀", Yacute: "Ý", yacute: "ý", YAcy: "Я", yacy: "я", Ycirc: "Ŷ", ycirc: "ŷ", Ycy: "Ы", ycy: "ы", yen: "¥", Yfr: "𝔜", yfr: "𝔶", YIcy: "Ї", yicy: "ї", Yopf: "𝕐", yopf: "𝕪", Yscr: "𝒴", yscr: "𝓎", YUcy: "Ю", yucy: "ю", Yuml: "Ÿ", yuml: "ÿ", Zacute: "Ź", zacute: "ź", Zcaron: "Ž", zcaron: "ž", Zcy: "З", zcy: "з", Zdot: "Ż", zdot: "ż", zeetrf: "ℨ", ZeroWidthSpace: "", Zeta: "Ζ", zeta: "ζ", Zfr: "ℨ", zfr: "𝔷", ZHcy: "Ж", zhcy: "ж", zigrarr: "⇝", Zopf: "ℤ", zopf: "𝕫", Zscr: "𝒵", zscr: "𝓏", zwj: "\u200d", zwnj: "\u200c" 11645 }); 11646 11647 11648 /***/ }), 11649 11650 /***/ "./node_modules/simple-html-tokenizer/dist/es6/index.js": 11651 /*!**************************************************************!*\ 11652 !*** ./node_modules/simple-html-tokenizer/dist/es6/index.js ***! 11653 \**************************************************************/ 11654 /*! exports provided: HTML5NamedCharRefs, EntityParser, EventedTokenizer, Tokenizer, tokenize */ 11655 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11656 11657 "use strict"; 11658 __webpack_require__.r(__webpack_exports__); 11659 /* harmony import */ var _html5_named_char_refs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./html5-named-char-refs */ "./node_modules/simple-html-tokenizer/dist/es6/html5-named-char-refs.js"); 11660 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HTML5NamedCharRefs", function() { return _html5_named_char_refs__WEBPACK_IMPORTED_MODULE_0__["default"]; }); 11661 11662 /* harmony import */ var _entity_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./entity-parser */ "./node_modules/simple-html-tokenizer/dist/es6/entity-parser.js"); 11663 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EntityParser", function() { return _entity_parser__WEBPACK_IMPORTED_MODULE_1__["default"]; }); 11664 11665 /* harmony import */ var _evented_tokenizer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./evented-tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/evented-tokenizer.js"); 11666 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EventedTokenizer", function() { return _evented_tokenizer__WEBPACK_IMPORTED_MODULE_2__["default"]; }); 11667 11668 /* harmony import */ var _tokenizer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/tokenizer.js"); 11669 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Tokenizer", function() { return _tokenizer__WEBPACK_IMPORTED_MODULE_3__["default"]; }); 11670 11671 /* harmony import */ var _tokenize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tokenize */ "./node_modules/simple-html-tokenizer/dist/es6/tokenize.js"); 11672 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tokenize", function() { return _tokenize__WEBPACK_IMPORTED_MODULE_4__["default"]; }); 11673 11674 11675 11676 11677 11678 11679 11680 11681 /***/ }), 11682 11683 /***/ "./node_modules/simple-html-tokenizer/dist/es6/tokenize.js": 11684 /*!*****************************************************************!*\ 11685 !*** ./node_modules/simple-html-tokenizer/dist/es6/tokenize.js ***! 11686 \*****************************************************************/ 11687 /*! exports provided: default */ 11688 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11689 11690 "use strict"; 11691 __webpack_require__.r(__webpack_exports__); 11692 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return tokenize; }); 11693 /* harmony import */ var _tokenizer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/tokenizer.js"); 11694 /* harmony import */ var _entity_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./entity-parser */ "./node_modules/simple-html-tokenizer/dist/es6/entity-parser.js"); 11695 /* harmony import */ var _html5_named_char_refs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./html5-named-char-refs */ "./node_modules/simple-html-tokenizer/dist/es6/html5-named-char-refs.js"); 11696 11697 11698 11699 function tokenize(input, options) { 11700 var tokenizer = new _tokenizer__WEBPACK_IMPORTED_MODULE_0__["default"](new _entity_parser__WEBPACK_IMPORTED_MODULE_1__["default"](_html5_named_char_refs__WEBPACK_IMPORTED_MODULE_2__["default"]), options); 11701 return tokenizer.tokenize(input); 11702 } 11703 11704 11705 /***/ }), 11706 11707 /***/ "./node_modules/simple-html-tokenizer/dist/es6/tokenizer.js": 11708 /*!******************************************************************!*\ 11709 !*** ./node_modules/simple-html-tokenizer/dist/es6/tokenizer.js ***! 11710 \******************************************************************/ 11711 /*! exports provided: default */ 11712 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11713 11714 "use strict"; 11715 __webpack_require__.r(__webpack_exports__); 11716 /* harmony import */ var _evented_tokenizer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./evented-tokenizer */ "./node_modules/simple-html-tokenizer/dist/es6/evented-tokenizer.js"); 11717 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./node_modules/simple-html-tokenizer/dist/es6/utils.js"); 11718 11719 11720 ; 11721 var Tokenizer = /** @class */ (function () { 11722 function Tokenizer(entityParser, options) { 11723 if (options === void 0) { options = {}; } 11724 this.options = options; 11725 this._token = null; 11726 this.startLine = 1; 11727 this.startColumn = 0; 11728 this.tokens = []; 11729 this.currentAttribute = null; 11730 this.tokenizer = new _evented_tokenizer__WEBPACK_IMPORTED_MODULE_0__["default"](this, entityParser); 11731 } 11732 Object.defineProperty(Tokenizer.prototype, "token", { 11733 get: function () { 11734 return Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this._token); 11735 }, 11736 set: function (value) { 11737 this._token = value; 11738 }, 11739 enumerable: true, 11740 configurable: true 11741 }); 11742 Tokenizer.prototype.tokenize = function (input) { 11743 this.tokens = []; 11744 this.tokenizer.tokenize(input); 11745 return this.tokens; 11746 }; 11747 Tokenizer.prototype.tokenizePart = function (input) { 11748 this.tokens = []; 11749 this.tokenizer.tokenizePart(input); 11750 return this.tokens; 11751 }; 11752 Tokenizer.prototype.tokenizeEOF = function () { 11753 this.tokens = []; 11754 this.tokenizer.tokenizeEOF(); 11755 return this.tokens[0]; 11756 }; 11757 Tokenizer.prototype.reset = function () { 11758 this._token = null; 11759 this.startLine = 1; 11760 this.startColumn = 0; 11761 }; 11762 Tokenizer.prototype.addLocInfo = function () { 11763 if (this.options.loc) { 11764 this.token.loc = { 11765 start: { 11766 line: this.startLine, 11767 column: this.startColumn 11768 }, 11769 end: { 11770 line: this.tokenizer.line, 11771 column: this.tokenizer.column 11772 } 11773 }; 11774 } 11775 this.startLine = this.tokenizer.line; 11776 this.startColumn = this.tokenizer.column; 11777 }; 11778 // Data 11779 Tokenizer.prototype.beginData = function () { 11780 this.token = { 11781 type: 'Chars', 11782 chars: '' 11783 }; 11784 this.tokens.push(this.token); 11785 }; 11786 Tokenizer.prototype.appendToData = function (char) { 11787 this.token.chars += char; 11788 }; 11789 Tokenizer.prototype.finishData = function () { 11790 this.addLocInfo(); 11791 }; 11792 // Comment 11793 Tokenizer.prototype.beginComment = function () { 11794 this.token = { 11795 type: 'Comment', 11796 chars: '' 11797 }; 11798 this.tokens.push(this.token); 11799 }; 11800 Tokenizer.prototype.appendToCommentData = function (char) { 11801 this.token.chars += char; 11802 }; 11803 Tokenizer.prototype.finishComment = function () { 11804 this.addLocInfo(); 11805 }; 11806 // Tags - basic 11807 Tokenizer.prototype.beginStartTag = function () { 11808 this.token = { 11809 type: 'StartTag', 11810 tagName: '', 11811 attributes: [], 11812 selfClosing: false 11813 }; 11814 this.tokens.push(this.token); 11815 }; 11816 Tokenizer.prototype.beginEndTag = function () { 11817 this.token = { 11818 type: 'EndTag', 11819 tagName: '' 11820 }; 11821 this.tokens.push(this.token); 11822 }; 11823 Tokenizer.prototype.finishTag = function () { 11824 this.addLocInfo(); 11825 }; 11826 Tokenizer.prototype.markTagAsSelfClosing = function () { 11827 this.token.selfClosing = true; 11828 }; 11829 // Tags - name 11830 Tokenizer.prototype.appendToTagName = function (char) { 11831 this.token.tagName += char; 11832 }; 11833 // Tags - attributes 11834 Tokenizer.prototype.beginAttribute = function () { 11835 var attributes = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this.token.attributes, "current token's attributs"); 11836 this.currentAttribute = ["", "", false]; 11837 attributes.push(this.currentAttribute); 11838 }; 11839 Tokenizer.prototype.appendToAttributeName = function (char) { 11840 var currentAttribute = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this.currentAttribute); 11841 currentAttribute[0] += char; 11842 }; 11843 Tokenizer.prototype.beginAttributeValue = function (isQuoted) { 11844 var currentAttribute = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this.currentAttribute); 11845 currentAttribute[2] = isQuoted; 11846 }; 11847 Tokenizer.prototype.appendToAttributeValue = function (char) { 11848 var currentAttribute = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["unwrap"])(this.currentAttribute); 11849 currentAttribute[1] = currentAttribute[1] || ""; 11850 currentAttribute[1] += char; 11851 }; 11852 Tokenizer.prototype.finishAttributeValue = function () { 11853 }; 11854 Tokenizer.prototype.reportSyntaxError = function (message) { 11855 this.token.syntaxError = message; 11856 }; 11857 return Tokenizer; 11858 }()); 11859 /* harmony default export */ __webpack_exports__["default"] = (Tokenizer); 11860 11861 11862 /***/ }), 11863 11864 /***/ "./node_modules/simple-html-tokenizer/dist/es6/utils.js": 11865 /*!**************************************************************!*\ 11866 !*** ./node_modules/simple-html-tokenizer/dist/es6/utils.js ***! 11867 \**************************************************************/ 11868 /*! exports provided: isSpace, isAlpha, preprocessInput, unwrap, or */ 11869 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11870 11871 "use strict"; 11872 __webpack_require__.r(__webpack_exports__); 11873 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSpace", function() { return isSpace; }); 11874 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isAlpha", function() { return isAlpha; }); 11875 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preprocessInput", function() { return preprocessInput; }); 11876 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unwrap", function() { return unwrap; }); 11877 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "or", function() { return or; }); 11878 var WSP = /[\t\n\f ]/; 11879 var ALPHA = /[A-Za-z]/; 11880 var CRLF = /\r\n?/g; 11881 function isSpace(char) { 11882 return WSP.test(char); 11883 } 11884 function isAlpha(char) { 11885 return ALPHA.test(char); 11886 } 11887 function preprocessInput(input) { 11888 return input.replace(CRLF, "\n"); 11889 } 11890 function unwrap(maybe, msg) { 11891 if (!maybe) 11892 throw new Error((msg || 'value') + " was null"); 11893 return maybe; 11894 } 11895 function or(maybe, otherwise) { 11896 return maybe || otherwise; 11897 } 11898 11899 11900 /***/ }), 11901 11902 /***/ "./node_modules/tinycolor2/tinycolor.js": 11903 /*!**********************************************!*\ 11904 !*** ./node_modules/tinycolor2/tinycolor.js ***! 11905 \**********************************************/ 11906 /*! no static exports found */ 11907 /***/ (function(module, exports, __webpack_require__) { 11908 11909 var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1 11910 // https://github.com/bgrins/TinyColor 11911 // Brian Grinstead, MIT License 11912 11913 (function(Math) { 11914 11915 var trimLeft = /^\s+/, 11916 trimRight = /\s+$/, 11917 tinyCounter = 0, 11918 mathRound = Math.round, 11919 mathMin = Math.min, 11920 mathMax = Math.max, 11921 mathRandom = Math.random; 11922 11923 function tinycolor (color, opts) { 11924 11925 color = (color) ? color : ''; 11926 opts = opts || { }; 11927 11928 // If input is already a tinycolor, return itself 11929 if (color instanceof tinycolor) { 11930 return color; 11931 } 11932 // If we are called as a function, call using new instead 11933 if (!(this instanceof tinycolor)) { 11934 return new tinycolor(color, opts); 11935 } 11936 11937 var rgb = inputToRGB(color); 11938 this._originalInput = color, 11939 this._r = rgb.r, 11940 this._g = rgb.g, 11941 this._b = rgb.b, 11942 this._a = rgb.a, 11943 this._roundA = mathRound(100*this._a) / 100, 11944 this._format = opts.format || rgb.format; 11945 this._gradientType = opts.gradientType; 11946 11947 // Don't let the range of [0,255] come back in [0,1]. 11948 // Potentially lose a little bit of precision here, but will fix issues where 11949 // .5 gets interpreted as half of the total, instead of half of 1 11950 // If it was supposed to be 128, this was already taken care of by `inputToRgb` 11951 if (this._r < 1) { this._r = mathRound(this._r); } 11952 if (this._g < 1) { this._g = mathRound(this._g); } 11953 if (this._b < 1) { this._b = mathRound(this._b); } 11954 11955 this._ok = rgb.ok; 11956 this._tc_id = tinyCounter++; 11957 } 11958 11959 tinycolor.prototype = { 11960 isDark: function() { 11961 return this.getBrightness() < 128; 11962 }, 11963 isLight: function() { 11964 return !this.isDark(); 11965 }, 11966 isValid: function() { 11967 return this._ok; 11968 }, 11969 getOriginalInput: function() { 11970 return this._originalInput; 11971 }, 11972 getFormat: function() { 11973 return this._format; 11974 }, 11975 getAlpha: function() { 11976 return this._a; 11977 }, 11978 getBrightness: function() { 11979 //http://www.w3.org/TR/AERT#color-contrast 11980 var rgb = this.toRgb(); 11981 return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; 11982 }, 11983 getLuminance: function() { 11984 //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef 11985 var rgb = this.toRgb(); 11986 var RsRGB, GsRGB, BsRGB, R, G, B; 11987 RsRGB = rgb.r/255; 11988 GsRGB = rgb.g/255; 11989 BsRGB = rgb.b/255; 11990 11991 if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} 11992 if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} 11993 if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} 11994 return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); 11995 }, 11996 setAlpha: function(value) { 11997 this._a = boundAlpha(value); 11998 this._roundA = mathRound(100*this._a) / 100; 11999 return this; 12000 }, 12001 toHsv: function() { 12002 var hsv = rgbToHsv(this._r, this._g, this._b); 12003 return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; 12004 }, 12005 toHsvString: function() { 12006 var hsv = rgbToHsv(this._r, this._g, this._b); 12007 var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); 12008 return (this._a == 1) ? 12009 "hsv(" + h + ", " + s + "%, " + v + "%)" : 12010 "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; 12011 }, 12012 toHsl: function() { 12013 var hsl = rgbToHsl(this._r, this._g, this._b); 12014 return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; 12015 }, 12016 toHslString: function() { 12017 var hsl = rgbToHsl(this._r, this._g, this._b); 12018 var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); 12019 return (this._a == 1) ? 12020 "hsl(" + h + ", " + s + "%, " + l + "%)" : 12021 "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; 12022 }, 12023 toHex: function(allow3Char) { 12024 return rgbToHex(this._r, this._g, this._b, allow3Char); 12025 }, 12026 toHexString: function(allow3Char) { 12027 return '#' + this.toHex(allow3Char); 12028 }, 12029 toHex8: function(allow4Char) { 12030 return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); 12031 }, 12032 toHex8String: function(allow4Char) { 12033 return '#' + this.toHex8(allow4Char); 12034 }, 12035 toRgb: function() { 12036 return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; 12037 }, 12038 toRgbString: function() { 12039 return (this._a == 1) ? 12040 "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : 12041 "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; 12042 }, 12043 toPercentageRgb: function() { 12044 return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; 12045 }, 12046 toPercentageRgbString: function() { 12047 return (this._a == 1) ? 12048 "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : 12049 "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; 12050 }, 12051 toName: function() { 12052 if (this._a === 0) { 12053 return "transparent"; 12054 } 12055 12056 if (this._a < 1) { 12057 return false; 12058 } 12059 12060 return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; 12061 }, 12062 toFilter: function(secondColor) { 12063 var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); 12064 var secondHex8String = hex8String; 12065 var gradientType = this._gradientType ? "GradientType = 1, " : ""; 12066 12067 if (secondColor) { 12068 var s = tinycolor(secondColor); 12069 secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); 12070 } 12071 12072 return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; 12073 }, 12074 toString: function(format) { 12075 var formatSet = !!format; 12076 format = format || this._format; 12077 12078 var formattedString = false; 12079 var hasAlpha = this._a < 1 && this._a >= 0; 12080 var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); 12081 12082 if (needsAlphaFormat) { 12083 // Special case for "transparent", all other non-alpha formats 12084 // will return rgba when there is transparency. 12085 if (format === "name" && this._a === 0) { 12086 return this.toName(); 12087 } 12088 return this.toRgbString(); 12089 } 12090 if (format === "rgb") { 12091 formattedString = this.toRgbString(); 12092 } 12093 if (format === "prgb") { 12094 formattedString = this.toPercentageRgbString(); 12095 } 12096 if (format === "hex" || format === "hex6") { 12097 formattedString = this.toHexString(); 12098 } 12099 if (format === "hex3") { 12100 formattedString = this.toHexString(true); 12101 } 12102 if (format === "hex4") { 12103 formattedString = this.toHex8String(true); 12104 } 12105 if (format === "hex8") { 12106 formattedString = this.toHex8String(); 12107 } 12108 if (format === "name") { 12109 formattedString = this.toName(); 12110 } 12111 if (format === "hsl") { 12112 formattedString = this.toHslString(); 12113 } 12114 if (format === "hsv") { 12115 formattedString = this.toHsvString(); 12116 } 12117 12118 return formattedString || this.toHexString(); 12119 }, 12120 clone: function() { 12121 return tinycolor(this.toString()); 12122 }, 12123 12124 _applyModification: function(fn, args) { 12125 var color = fn.apply(null, [this].concat([].slice.call(args))); 12126 this._r = color._r; 12127 this._g = color._g; 12128 this._b = color._b; 12129 this.setAlpha(color._a); 12130 return this; 12131 }, 12132 lighten: function() { 12133 return this._applyModification(lighten, arguments); 12134 }, 12135 brighten: function() { 12136 return this._applyModification(brighten, arguments); 12137 }, 12138 darken: function() { 12139 return this._applyModification(darken, arguments); 12140 }, 12141 desaturate: function() { 12142 return this._applyModification(desaturate, arguments); 12143 }, 12144 saturate: function() { 12145 return this._applyModification(saturate, arguments); 12146 }, 12147 greyscale: function() { 12148 return this._applyModification(greyscale, arguments); 12149 }, 12150 spin: function() { 12151 return this._applyModification(spin, arguments); 12152 }, 12153 12154 _applyCombination: function(fn, args) { 12155 return fn.apply(null, [this].concat([].slice.call(args))); 12156 }, 12157 analogous: function() { 12158 return this._applyCombination(analogous, arguments); 12159 }, 12160 complement: function() { 12161 return this._applyCombination(complement, arguments); 12162 }, 12163 monochromatic: function() { 12164 return this._applyCombination(monochromatic, arguments); 12165 }, 12166 splitcomplement: function() { 12167 return this._applyCombination(splitcomplement, arguments); 12168 }, 12169 triad: function() { 12170 return this._applyCombination(triad, arguments); 12171 }, 12172 tetrad: function() { 12173 return this._applyCombination(tetrad, arguments); 12174 } 12175 }; 12176 12177 // If input is an object, force 1 into "1.0" to handle ratios properly 12178 // String input requires "1.0" as input, so 1 will be treated as 1 12179 tinycolor.fromRatio = function(color, opts) { 12180 if (typeof color == "object") { 12181 var newColor = {}; 12182 for (var i in color) { 12183 if (color.hasOwnProperty(i)) { 12184 if (i === "a") { 12185 newColor[i] = color[i]; 12186 } 12187 else { 12188 newColor[i] = convertToPercentage(color[i]); 12189 } 12190 } 12191 } 12192 color = newColor; 12193 } 12194 12195 return tinycolor(color, opts); 12196 }; 12197 12198 // Given a string or object, convert that input to RGB 12199 // Possible string inputs: 12200 // 12201 // "red" 12202 // "#f00" or "f00" 12203 // "#ff0000" or "ff0000" 12204 // "#ff000000" or "ff000000" 12205 // "rgb 255 0 0" or "rgb (255, 0, 0)" 12206 // "rgb 1.0 0 0" or "rgb (1, 0, 0)" 12207 // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" 12208 // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" 12209 // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" 12210 // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" 12211 // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" 12212 // 12213 function inputToRGB(color) { 12214 12215 var rgb = { r: 0, g: 0, b: 0 }; 12216 var a = 1; 12217 var s = null; 12218 var v = null; 12219 var l = null; 12220 var ok = false; 12221 var format = false; 12222 12223 if (typeof color == "string") { 12224 color = stringInputToObject(color); 12225 } 12226 12227 if (typeof color == "object") { 12228 if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { 12229 rgb = rgbToRgb(color.r, color.g, color.b); 12230 ok = true; 12231 format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; 12232 } 12233 else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { 12234 s = convertToPercentage(color.s); 12235 v = convertToPercentage(color.v); 12236 rgb = hsvToRgb(color.h, s, v); 12237 ok = true; 12238 format = "hsv"; 12239 } 12240 else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { 12241 s = convertToPercentage(color.s); 12242 l = convertToPercentage(color.l); 12243 rgb = hslToRgb(color.h, s, l); 12244 ok = true; 12245 format = "hsl"; 12246 } 12247 12248 if (color.hasOwnProperty("a")) { 12249 a = color.a; 12250 } 12251 } 12252 12253 a = boundAlpha(a); 12254 12255 return { 12256 ok: ok, 12257 format: color.format || format, 12258 r: mathMin(255, mathMax(rgb.r, 0)), 12259 g: mathMin(255, mathMax(rgb.g, 0)), 12260 b: mathMin(255, mathMax(rgb.b, 0)), 12261 a: a 12262 }; 12263 } 12264 12265 12266 // Conversion Functions 12267 // -------------------- 12268 12269 // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: 12270 // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript> 12271 12272 // `rgbToRgb` 12273 // Handle bounds / percentage checking to conform to CSS color spec 12274 // <http://www.w3.org/TR/css3-color/> 12275 // *Assumes:* r, g, b in [0, 255] or [0, 1] 12276 // *Returns:* { r, g, b } in [0, 255] 12277 function rgbToRgb(r, g, b){ 12278 return { 12279 r: bound01(r, 255) * 255, 12280 g: bound01(g, 255) * 255, 12281 b: bound01(b, 255) * 255 12282 }; 12283 } 12284 12285 // `rgbToHsl` 12286 // Converts an RGB color value to HSL. 12287 // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] 12288 // *Returns:* { h, s, l } in [0,1] 12289 function rgbToHsl(r, g, b) { 12290 12291 r = bound01(r, 255); 12292 g = bound01(g, 255); 12293 b = bound01(b, 255); 12294 12295 var max = mathMax(r, g, b), min = mathMin(r, g, b); 12296 var h, s, l = (max + min) / 2; 12297 12298 if(max == min) { 12299 h = s = 0; // achromatic 12300 } 12301 else { 12302 var d = max - min; 12303 s = l > 0.5 ? d / (2 - max - min) : d / (max + min); 12304 switch(max) { 12305 case r: h = (g - b) / d + (g < b ? 6 : 0); break; 12306 case g: h = (b - r) / d + 2; break; 12307 case b: h = (r - g) / d + 4; break; 12308 } 12309 12310 h /= 6; 12311 } 12312 12313 return { h: h, s: s, l: l }; 12314 } 12315 12316 // `hslToRgb` 12317 // Converts an HSL color value to RGB. 12318 // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] 12319 // *Returns:* { r, g, b } in the set [0, 255] 12320 function hslToRgb(h, s, l) { 12321 var r, g, b; 12322 12323 h = bound01(h, 360); 12324 s = bound01(s, 100); 12325 l = bound01(l, 100); 12326 12327 function hue2rgb(p, q, t) { 12328 if(t < 0) t += 1; 12329 if(t > 1) t -= 1; 12330 if(t < 1/6) return p + (q - p) * 6 * t; 12331 if(t < 1/2) return q; 12332 if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; 12333 return p; 12334 } 12335 12336 if(s === 0) { 12337 r = g = b = l; // achromatic 12338 } 12339 else { 12340 var q = l < 0.5 ? l * (1 + s) : l + s - l * s; 12341 var p = 2 * l - q; 12342 r = hue2rgb(p, q, h + 1/3); 12343 g = hue2rgb(p, q, h); 12344 b = hue2rgb(p, q, h - 1/3); 12345 } 12346 12347 return { r: r * 255, g: g * 255, b: b * 255 }; 12348 } 12349 12350 // `rgbToHsv` 12351 // Converts an RGB color value to HSV 12352 // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] 12353 // *Returns:* { h, s, v } in [0,1] 12354 function rgbToHsv(r, g, b) { 12355 12356 r = bound01(r, 255); 12357 g = bound01(g, 255); 12358 b = bound01(b, 255); 12359 12360 var max = mathMax(r, g, b), min = mathMin(r, g, b); 12361 var h, s, v = max; 12362 12363 var d = max - min; 12364 s = max === 0 ? 0 : d / max; 12365 12366 if(max == min) { 12367 h = 0; // achromatic 12368 } 12369 else { 12370 switch(max) { 12371 case r: h = (g - b) / d + (g < b ? 6 : 0); break; 12372 case g: h = (b - r) / d + 2; break; 12373 case b: h = (r - g) / d + 4; break; 12374 } 12375 h /= 6; 12376 } 12377 return { h: h, s: s, v: v }; 12378 } 12379 12380 // `hsvToRgb` 12381 // Converts an HSV color value to RGB. 12382 // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] 12383 // *Returns:* { r, g, b } in the set [0, 255] 12384 function hsvToRgb(h, s, v) { 12385 12386 h = bound01(h, 360) * 6; 12387 s = bound01(s, 100); 12388 v = bound01(v, 100); 12389 12390 var i = Math.floor(h), 12391 f = h - i, 12392 p = v * (1 - s), 12393 q = v * (1 - f * s), 12394 t = v * (1 - (1 - f) * s), 12395 mod = i % 6, 12396 r = [v, q, p, p, t, v][mod], 12397 g = [t, v, v, q, p, p][mod], 12398 b = [p, p, t, v, v, q][mod]; 12399 12400 return { r: r * 255, g: g * 255, b: b * 255 }; 12401 } 12402 12403 // `rgbToHex` 12404 // Converts an RGB color to hex 12405 // Assumes r, g, and b are contained in the set [0, 255] 12406 // Returns a 3 or 6 character hex 12407 function rgbToHex(r, g, b, allow3Char) { 12408 12409 var hex = [ 12410 pad2(mathRound(r).toString(16)), 12411 pad2(mathRound(g).toString(16)), 12412 pad2(mathRound(b).toString(16)) 12413 ]; 12414 12415 // Return a 3 character hex if possible 12416 if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { 12417 return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); 12418 } 12419 12420 return hex.join(""); 12421 } 12422 12423 // `rgbaToHex` 12424 // Converts an RGBA color plus alpha transparency to hex 12425 // Assumes r, g, b are contained in the set [0, 255] and 12426 // a in [0, 1]. Returns a 4 or 8 character rgba hex 12427 function rgbaToHex(r, g, b, a, allow4Char) { 12428 12429 var hex = [ 12430 pad2(mathRound(r).toString(16)), 12431 pad2(mathRound(g).toString(16)), 12432 pad2(mathRound(b).toString(16)), 12433 pad2(convertDecimalToHex(a)) 12434 ]; 12435 12436 // Return a 4 character hex if possible 12437 if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { 12438 return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); 12439 } 12440 12441 return hex.join(""); 12442 } 12443 12444 // `rgbaToArgbHex` 12445 // Converts an RGBA color to an ARGB Hex8 string 12446 // Rarely used, but required for "toFilter()" 12447 function rgbaToArgbHex(r, g, b, a) { 12448 12449 var hex = [ 12450 pad2(convertDecimalToHex(a)), 12451 pad2(mathRound(r).toString(16)), 12452 pad2(mathRound(g).toString(16)), 12453 pad2(mathRound(b).toString(16)) 12454 ]; 12455 12456 return hex.join(""); 12457 } 12458 12459 // `equals` 12460 // Can be called with any tinycolor input 12461 tinycolor.equals = function (color1, color2) { 12462 if (!color1 || !color2) { return false; } 12463 return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); 12464 }; 12465 12466 tinycolor.random = function() { 12467 return tinycolor.fromRatio({ 12468 r: mathRandom(), 12469 g: mathRandom(), 12470 b: mathRandom() 12471 }); 12472 }; 12473 12474 12475 // Modification Functions 12476 // ---------------------- 12477 // Thanks to less.js for some of the basics here 12478 // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js> 12479 12480 function desaturate(color, amount) { 12481 amount = (amount === 0) ? 0 : (amount || 10); 12482 var hsl = tinycolor(color).toHsl(); 12483 hsl.s -= amount / 100; 12484 hsl.s = clamp01(hsl.s); 12485 return tinycolor(hsl); 12486 } 12487 12488 function saturate(color, amount) { 12489 amount = (amount === 0) ? 0 : (amount || 10); 12490 var hsl = tinycolor(color).toHsl(); 12491 hsl.s += amount / 100; 12492 hsl.s = clamp01(hsl.s); 12493 return tinycolor(hsl); 12494 } 12495 12496 function greyscale(color) { 12497 return tinycolor(color).desaturate(100); 12498 } 12499 12500 function lighten (color, amount) { 12501 amount = (amount === 0) ? 0 : (amount || 10); 12502 var hsl = tinycolor(color).toHsl(); 12503 hsl.l += amount / 100; 12504 hsl.l = clamp01(hsl.l); 12505 return tinycolor(hsl); 12506 } 12507 12508 function brighten(color, amount) { 12509 amount = (amount === 0) ? 0 : (amount || 10); 12510 var rgb = tinycolor(color).toRgb(); 12511 rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); 12512 rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); 12513 rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); 12514 return tinycolor(rgb); 12515 } 12516 12517 function darken (color, amount) { 12518 amount = (amount === 0) ? 0 : (amount || 10); 12519 var hsl = tinycolor(color).toHsl(); 12520 hsl.l -= amount / 100; 12521 hsl.l = clamp01(hsl.l); 12522 return tinycolor(hsl); 12523 } 12524 12525 // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. 12526 // Values outside of this range will be wrapped into this range. 12527 function spin(color, amount) { 12528 var hsl = tinycolor(color).toHsl(); 12529 var hue = (hsl.h + amount) % 360; 12530 hsl.h = hue < 0 ? 360 + hue : hue; 12531 return tinycolor(hsl); 12532 } 12533 12534 // Combination Functions 12535 // --------------------- 12536 // Thanks to jQuery xColor for some of the ideas behind these 12537 // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js> 12538 12539 function complement(color) { 12540 var hsl = tinycolor(color).toHsl(); 12541 hsl.h = (hsl.h + 180) % 360; 12542 return tinycolor(hsl); 12543 } 12544 12545 function triad(color) { 12546 var hsl = tinycolor(color).toHsl(); 12547 var h = hsl.h; 12548 return [ 12549 tinycolor(color), 12550 tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), 12551 tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) 12552 ]; 12553 } 12554 12555 function tetrad(color) { 12556 var hsl = tinycolor(color).toHsl(); 12557 var h = hsl.h; 12558 return [ 12559 tinycolor(color), 12560 tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), 12561 tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), 12562 tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) 12563 ]; 12564 } 12565 12566 function splitcomplement(color) { 12567 var hsl = tinycolor(color).toHsl(); 12568 var h = hsl.h; 12569 return [ 12570 tinycolor(color), 12571 tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), 12572 tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) 12573 ]; 12574 } 12575 12576 function analogous(color, results, slices) { 12577 results = results || 6; 12578 slices = slices || 30; 12579 12580 var hsl = tinycolor(color).toHsl(); 12581 var part = 360 / slices; 12582 var ret = [tinycolor(color)]; 12583 12584 for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { 12585 hsl.h = (hsl.h + part) % 360; 12586 ret.push(tinycolor(hsl)); 12587 } 12588 return ret; 12589 } 12590 12591 function monochromatic(color, results) { 12592 results = results || 6; 12593 var hsv = tinycolor(color).toHsv(); 12594 var h = hsv.h, s = hsv.s, v = hsv.v; 12595 var ret = []; 12596 var modification = 1 / results; 12597 12598 while (results--) { 12599 ret.push(tinycolor({ h: h, s: s, v: v})); 12600 v = (v + modification) % 1; 12601 } 12602 12603 return ret; 12604 } 12605 12606 // Utility Functions 12607 // --------------------- 12608 12609 tinycolor.mix = function(color1, color2, amount) { 12610 amount = (amount === 0) ? 0 : (amount || 50); 12611 12612 var rgb1 = tinycolor(color1).toRgb(); 12613 var rgb2 = tinycolor(color2).toRgb(); 12614 12615 var p = amount / 100; 12616 12617 var rgba = { 12618 r: ((rgb2.r - rgb1.r) * p) + rgb1.r, 12619 g: ((rgb2.g - rgb1.g) * p) + rgb1.g, 12620 b: ((rgb2.b - rgb1.b) * p) + rgb1.b, 12621 a: ((rgb2.a - rgb1.a) * p) + rgb1.a 12622 }; 12623 12624 return tinycolor(rgba); 12625 }; 12626 12627 12628 // Readability Functions 12629 // --------------------- 12630 // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2) 12631 12632 // `contrast` 12633 // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2) 12634 tinycolor.readability = function(color1, color2) { 12635 var c1 = tinycolor(color1); 12636 var c2 = tinycolor(color2); 12637 return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05); 12638 }; 12639 12640 // `isReadable` 12641 // Ensure that foreground and background color combinations meet WCAG2 guidelines. 12642 // The third argument is an optional Object. 12643 // the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA'; 12644 // the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'. 12645 // If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}. 12646 12647 // *Example* 12648 // tinycolor.isReadable("#000", "#111") => false 12649 // tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false 12650 tinycolor.isReadable = function(color1, color2, wcag2) { 12651 var readability = tinycolor.readability(color1, color2); 12652 var wcag2Parms, out; 12653 12654 out = false; 12655 12656 wcag2Parms = validateWCAG2Parms(wcag2); 12657 switch (wcag2Parms.level + wcag2Parms.size) { 12658 case "AAsmall": 12659 case "AAAlarge": 12660 out = readability >= 4.5; 12661 break; 12662 case "AAlarge": 12663 out = readability >= 3; 12664 break; 12665 case "AAAsmall": 12666 out = readability >= 7; 12667 break; 12668 } 12669 return out; 12670 12671 }; 12672 12673 // `mostReadable` 12674 // Given a base color and a list of possible foreground or background 12675 // colors for that base, returns the most readable color. 12676 // Optionally returns Black or White if the most readable color is unreadable. 12677 // *Example* 12678 // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" 12679 // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" 12680 // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" 12681 // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" 12682 tinycolor.mostReadable = function(baseColor, colorList, args) { 12683 var bestColor = null; 12684 var bestScore = 0; 12685 var readability; 12686 var includeFallbackColors, level, size ; 12687 args = args || {}; 12688 includeFallbackColors = args.includeFallbackColors ; 12689 level = args.level; 12690 size = args.size; 12691 12692 for (var i= 0; i < colorList.length ; i++) { 12693 readability = tinycolor.readability(baseColor, colorList[i]); 12694 if (readability > bestScore) { 12695 bestScore = readability; 12696 bestColor = tinycolor(colorList[i]); 12697 } 12698 } 12699 12700 if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { 12701 return bestColor; 12702 } 12703 else { 12704 args.includeFallbackColors=false; 12705 return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); 12706 } 12707 }; 12708 12709 12710 // Big List of Colors 12711 // ------------------ 12712 // <http://www.w3.org/TR/css3-color/#svg-color> 12713 var names = tinycolor.names = { 12714 aliceblue: "f0f8ff", 12715 antiquewhite: "faebd7", 12716 aqua: "0ff", 12717 aquamarine: "7fffd4", 12718 azure: "f0ffff", 12719 beige: "f5f5dc", 12720 bisque: "ffe4c4", 12721 black: "000", 12722 blanchedalmond: "ffebcd", 12723 blue: "00f", 12724 blueviolet: "8a2be2", 12725 brown: "a52a2a", 12726 burlywood: "deb887", 12727 burntsienna: "ea7e5d", 12728 cadetblue: "5f9ea0", 12729 chartreuse: "7fff00", 12730 chocolate: "d2691e", 12731 coral: "ff7f50", 12732 cornflowerblue: "6495ed", 12733 cornsilk: "fff8dc", 12734 crimson: "dc143c", 12735 cyan: "0ff", 12736 darkblue: "00008b", 12737 darkcyan: "008b8b", 12738 darkgoldenrod: "b8860b", 12739 darkgray: "a9a9a9", 12740 darkgreen: "006400", 12741 darkgrey: "a9a9a9", 12742 darkkhaki: "bdb76b", 12743 darkmagenta: "8b008b", 12744 darkolivegreen: "556b2f", 12745 darkorange: "ff8c00", 12746 darkorchid: "9932cc", 12747 darkred: "8b0000", 12748 darksalmon: "e9967a", 12749 darkseagreen: "8fbc8f", 12750 darkslateblue: "483d8b", 12751 darkslategray: "2f4f4f", 12752 darkslategrey: "2f4f4f", 12753 darkturquoise: "00ced1", 12754 darkviolet: "9400d3", 12755 deeppink: "ff1493", 12756 deepskyblue: "00bfff", 12757 dimgray: "696969", 12758 dimgrey: "696969", 12759 dodgerblue: "1e90ff", 12760 firebrick: "b22222", 12761 floralwhite: "fffaf0", 12762 forestgreen: "228b22", 12763 fuchsia: "f0f", 12764 gainsboro: "dcdcdc", 12765 ghostwhite: "f8f8ff", 12766 gold: "ffd700", 12767 goldenrod: "daa520", 12768 gray: "808080", 12769 green: "008000", 12770 greenyellow: "adff2f", 12771 grey: "808080", 12772 honeydew: "f0fff0", 12773 hotpink: "ff69b4", 12774 indianred: "cd5c5c", 12775 indigo: "4b0082", 12776 ivory: "fffff0", 12777 khaki: "f0e68c", 12778 lavender: "e6e6fa", 12779 lavenderblush: "fff0f5", 12780 lawngreen: "7cfc00", 12781 lemonchiffon: "fffacd", 12782 lightblue: "add8e6", 12783 lightcoral: "f08080", 12784 lightcyan: "e0ffff", 12785 lightgoldenrodyellow: "fafad2", 12786 lightgray: "d3d3d3", 12787 lightgreen: "90ee90", 12788 lightgrey: "d3d3d3", 12789 lightpink: "ffb6c1", 12790 lightsalmon: "ffa07a", 12791 lightseagreen: "20b2aa", 12792 lightskyblue: "87cefa", 12793 lightslategray: "789", 12794 lightslategrey: "789", 12795 lightsteelblue: "b0c4de", 12796 lightyellow: "ffffe0", 12797 lime: "0f0", 12798 limegreen: "32cd32", 12799 linen: "faf0e6", 12800 magenta: "f0f", 12801 maroon: "800000", 12802 mediumaquamarine: "66cdaa", 12803 mediumblue: "0000cd", 12804 mediumorchid: "ba55d3", 12805 mediumpurple: "9370db", 12806 mediumseagreen: "3cb371", 12807 mediumslateblue: "7b68ee", 12808 mediumspringgreen: "00fa9a", 12809 mediumturquoise: "48d1cc", 12810 mediumvioletred: "c71585", 12811 midnightblue: "191970", 12812 mintcream: "f5fffa", 12813 mistyrose: "ffe4e1", 12814 moccasin: "ffe4b5", 12815 navajowhite: "ffdead", 12816 navy: "000080", 12817 oldlace: "fdf5e6", 12818 olive: "808000", 12819 olivedrab: "6b8e23", 12820 orange: "ffa500", 12821 orangered: "ff4500", 12822 orchid: "da70d6", 12823 palegoldenrod: "eee8aa", 12824 palegreen: "98fb98", 12825 paleturquoise: "afeeee", 12826 palevioletred: "db7093", 12827 papayawhip: "ffefd5", 12828 peachpuff: "ffdab9", 12829 peru: "cd853f", 12830 pink: "ffc0cb", 12831 plum: "dda0dd", 12832 powderblue: "b0e0e6", 12833 purple: "800080", 12834 rebeccapurple: "663399", 12835 red: "f00", 12836 rosybrown: "bc8f8f", 12837 royalblue: "4169e1", 12838 saddlebrown: "8b4513", 12839 salmon: "fa8072", 12840 sandybrown: "f4a460", 12841 seagreen: "2e8b57", 12842 seashell: "fff5ee", 12843 sienna: "a0522d", 12844 silver: "c0c0c0", 12845 skyblue: "87ceeb", 12846 slateblue: "6a5acd", 12847 slategray: "708090", 12848 slategrey: "708090", 12849 snow: "fffafa", 12850 springgreen: "00ff7f", 12851 steelblue: "4682b4", 12852 tan: "d2b48c", 12853 teal: "008080", 12854 thistle: "d8bfd8", 12855 tomato: "ff6347", 12856 turquoise: "40e0d0", 12857 violet: "ee82ee", 12858 wheat: "f5deb3", 12859 white: "fff", 12860 whitesmoke: "f5f5f5", 12861 yellow: "ff0", 12862 yellowgreen: "9acd32" 12863 }; 12864 12865 // Make it easy to access colors via `hexNames[hex]` 12866 var hexNames = tinycolor.hexNames = flip(names); 12867 12868 12869 // Utilities 12870 // --------- 12871 12872 // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` 12873 function flip(o) { 12874 var flipped = { }; 12875 for (var i in o) { 12876 if (o.hasOwnProperty(i)) { 12877 flipped[o[i]] = i; 12878 } 12879 } 12880 return flipped; 12881 } 12882 12883 // Return a valid alpha value [0,1] with all invalid values being set to 1 12884 function boundAlpha(a) { 12885 a = parseFloat(a); 12886 12887 if (isNaN(a) || a < 0 || a > 1) { 12888 a = 1; 12889 } 12890 12891 return a; 12892 } 12893 12894 // Take input from [0, n] and return it as [0, 1] 12895 function bound01(n, max) { 12896 if (isOnePointZero(n)) { n = "100%"; } 12897 12898 var processPercent = isPercentage(n); 12899 n = mathMin(max, mathMax(0, parseFloat(n))); 12900 12901 // Automatically convert percentage into number 12902 if (processPercent) { 12903 n = parseInt(n * max, 10) / 100; 12904 } 12905 12906 // Handle floating point rounding errors 12907 if ((Math.abs(n - max) < 0.000001)) { 12908 return 1; 12909 } 12910 12911 // Convert into [0, 1] range if it isn't already 12912 return (n % max) / parseFloat(max); 12913 } 12914 12915 // Force a number between 0 and 1 12916 function clamp01(val) { 12917 return mathMin(1, mathMax(0, val)); 12918 } 12919 12920 // Parse a base-16 hex value into a base-10 integer 12921 function parseIntFromHex(val) { 12922 return parseInt(val, 16); 12923 } 12924 12925 // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 12926 // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0> 12927 function isOnePointZero(n) { 12928 return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; 12929 } 12930 12931 // Check to see if string passed in is a percentage 12932 function isPercentage(n) { 12933 return typeof n === "string" && n.indexOf('%') != -1; 12934 } 12935 12936 // Force a hex value to have 2 characters 12937 function pad2(c) { 12938 return c.length == 1 ? '0' + c : '' + c; 12939 } 12940 12941 // Replace a decimal with it's percentage value 12942 function convertToPercentage(n) { 12943 if (n <= 1) { 12944 n = (n * 100) + "%"; 12945 } 12946 12947 return n; 12948 } 12949 12950 // Converts a decimal to a hex value 12951 function convertDecimalToHex(d) { 12952 return Math.round(parseFloat(d) * 255).toString(16); 12953 } 12954 // Converts a hex value to a decimal 12955 function convertHexToDecimal(h) { 12956 return (parseIntFromHex(h) / 255); 12957 } 12958 12959 var matchers = (function() { 12960 12961 // <http://www.w3.org/TR/css3-values/#integers> 12962 var CSS_INTEGER = "[-\\+]?\\d+%?"; 12963 12964 // <http://www.w3.org/TR/css3-values/#number-value> 12965 var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; 12966 12967 // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. 12968 var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; 12969 12970 // Actual matching. 12971 // Parentheses and commas are optional, but not required. 12972 // Whitespace can take the place of commas or opening paren 12973 var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; 12974 var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; 12975 12976 return { 12977 CSS_UNIT: new RegExp(CSS_UNIT), 12978 rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), 12979 rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), 12980 hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), 12981 hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), 12982 hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), 12983 hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), 12984 hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, 12985 hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, 12986 hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, 12987 hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ 12988 }; 12989 })(); 12990 12991 // `isValidCSSUnit` 12992 // Take in a single string / number and check to see if it looks like a CSS unit 12993 // (see `matchers` above for definition). 12994 function isValidCSSUnit(color) { 12995 return !!matchers.CSS_UNIT.exec(color); 12996 } 12997 12998 // `stringInputToObject` 12999 // Permissive string parsing. Take in a number of formats, and output an object 13000 // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` 13001 function stringInputToObject(color) { 13002 13003 color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); 13004 var named = false; 13005 if (names[color]) { 13006 color = names[color]; 13007 named = true; 13008 } 13009 else if (color == 'transparent') { 13010 return { r: 0, g: 0, b: 0, a: 0, format: "name" }; 13011 } 13012 13013 // Try to match string input using regular expressions. 13014 // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] 13015 // Just return an object and let the conversion functions handle that. 13016 // This way the result will be the same whether the tinycolor is initialized with string or object. 13017 var match; 13018 if ((match = matchers.rgb.exec(color))) { 13019 return { r: match[1], g: match[2], b: match[3] }; 13020 } 13021 if ((match = matchers.rgba.exec(color))) { 13022 return { r: match[1], g: match[2], b: match[3], a: match[4] }; 13023 } 13024 if ((match = matchers.hsl.exec(color))) { 13025 return { h: match[1], s: match[2], l: match[3] }; 13026 } 13027 if ((match = matchers.hsla.exec(color))) { 13028 return { h: match[1], s: match[2], l: match[3], a: match[4] }; 13029 } 13030 if ((match = matchers.hsv.exec(color))) { 13031 return { h: match[1], s: match[2], v: match[3] }; 13032 } 13033 if ((match = matchers.hsva.exec(color))) { 13034 return { h: match[1], s: match[2], v: match[3], a: match[4] }; 13035 } 13036 if ((match = matchers.hex8.exec(color))) { 13037 return { 13038 r: parseIntFromHex(match[1]), 13039 g: parseIntFromHex(match[2]), 13040 b: parseIntFromHex(match[3]), 13041 a: convertHexToDecimal(match[4]), 13042 format: named ? "name" : "hex8" 13043 }; 13044 } 13045 if ((match = matchers.hex6.exec(color))) { 13046 return { 13047 r: parseIntFromHex(match[1]), 13048 g: parseIntFromHex(match[2]), 13049 b: parseIntFromHex(match[3]), 13050 format: named ? "name" : "hex" 13051 }; 13052 } 13053 if ((match = matchers.hex4.exec(color))) { 13054 return { 13055 r: parseIntFromHex(match[1] + '' + match[1]), 13056 g: parseIntFromHex(match[2] + '' + match[2]), 13057 b: parseIntFromHex(match[3] + '' + match[3]), 13058 a: convertHexToDecimal(match[4] + '' + match[4]), 13059 format: named ? "name" : "hex8" 13060 }; 13061 } 13062 if ((match = matchers.hex3.exec(color))) { 13063 return { 13064 r: parseIntFromHex(match[1] + '' + match[1]), 13065 g: parseIntFromHex(match[2] + '' + match[2]), 13066 b: parseIntFromHex(match[3] + '' + match[3]), 13067 format: named ? "name" : "hex" 13068 }; 13069 } 13070 13071 return false; 13072 } 13073 13074 function validateWCAG2Parms(parms) { 13075 // return valid WCAG2 parms for isReadable. 13076 // If input parms are invalid, return {"level":"AA", "size":"small"} 13077 var level, size; 13078 parms = parms || {"level":"AA", "size":"small"}; 13079 level = (parms.level || "AA").toUpperCase(); 13080 size = (parms.size || "small").toLowerCase(); 13081 if (level !== "AA" && level !== "AAA") { 13082 level = "AA"; 13083 } 13084 if (size !== "small" && size !== "large") { 13085 size = "small"; 13086 } 13087 return {"level":level, "size":size}; 13088 } 13089 13090 // Node: Export function 13091 if ( true && module.exports) { 13092 module.exports = tinycolor; 13093 } 13094 // AMD/requirejs: Define the module 13095 else if (true) { 13096 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {return tinycolor;}).call(exports, __webpack_require__, exports, module), 13097 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 13098 } 13099 // Browser: Expose to window 13100 else {} 13101 13102 })(Math); 13103 13104 13105 /***/ }), 13106 13107 /***/ "./node_modules/uuid/lib/bytesToUuid.js": 13108 /*!**********************************************!*\ 13109 !*** ./node_modules/uuid/lib/bytesToUuid.js ***! 13110 \**********************************************/ 13111 /*! no static exports found */ 13112 /***/ (function(module, exports) { 13113 13114 /** 13115 * Convert array of 16 byte values to UUID string format of the form: 13116 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 13117 */ 13118 var byteToHex = []; 13119 for (var i = 0; i < 256; ++i) { 13120 byteToHex[i] = (i + 0x100).toString(16).substr(1); 13121 } 13122 13123 function bytesToUuid(buf, offset) { 13124 var i = offset || 0; 13125 var bth = byteToHex; 13126 // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 13127 return ([bth[buf[i++]], bth[buf[i++]], 13128 bth[buf[i++]], bth[buf[i++]], '-', 13129 bth[buf[i++]], bth[buf[i++]], '-', 13130 bth[buf[i++]], bth[buf[i++]], '-', 13131 bth[buf[i++]], bth[buf[i++]], '-', 13132 bth[buf[i++]], bth[buf[i++]], 13133 bth[buf[i++]], bth[buf[i++]], 13134 bth[buf[i++]], bth[buf[i++]]]).join(''); 13135 } 13136 13137 module.exports = bytesToUuid; 13138 13139 13140 /***/ }), 13141 13142 /***/ "./node_modules/uuid/lib/rng-browser.js": 13143 /*!**********************************************!*\ 13144 !*** ./node_modules/uuid/lib/rng-browser.js ***! 13145 \**********************************************/ 13146 /*! no static exports found */ 13147 /***/ (function(module, exports) { 13148 13149 // Unique ID creation requires a high quality random # generator. In the 13150 // browser this is a little complicated due to unknown quality of Math.random() 13151 // and inconsistent support for the `crypto` API. We do the best we can via 13152 // feature-detection 13153 13154 // getRandomValues needs to be invoked in a context where "this" is a Crypto 13155 // implementation. Also, find the complete implementation of crypto on IE11. 13156 var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) || 13157 (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto)); 13158 13159 if (getRandomValues) { 13160 // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto 13161 var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef 13162 13163 module.exports = function whatwgRNG() { 13164 getRandomValues(rnds8); 13165 return rnds8; 13166 }; 13167 } else { 13168 // Math.random()-based (RNG) 13169 // 13170 // If all else fails, use Math.random(). It's fast, but is of unspecified 13171 // quality. 13172 var rnds = new Array(16); 13173 13174 module.exports = function mathRNG() { 13175 for (var i = 0, r; i < 16; i++) { 13176 if ((i & 0x03) === 0) r = Math.random() * 0x100000000; 13177 rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; 13178 } 13179 13180 return rnds; 13181 }; 13182 } 13183 13184 13185 /***/ }), 13186 13187 /***/ "./node_modules/uuid/v4.js": 13188 /*!*********************************!*\ 13189 !*** ./node_modules/uuid/v4.js ***! 13190 \*********************************/ 13191 /*! no static exports found */ 13192 /***/ (function(module, exports, __webpack_require__) { 13193 13194 var rng = __webpack_require__(/*! ./lib/rng */ "./node_modules/uuid/lib/rng-browser.js"); 13195 var bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ "./node_modules/uuid/lib/bytesToUuid.js"); 13196 13197 function v4(options, buf, offset) { 13198 var i = buf && offset || 0; 13199 13200 if (typeof(options) == 'string') { 13201 buf = options === 'binary' ? new Array(16) : null; 13202 options = null; 13203 } 13204 options = options || {}; 13205 13206 var rnds = options.random || (options.rng || rng)(); 13207 13208 // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 13209 rnds[6] = (rnds[6] & 0x0f) | 0x40; 13210 rnds[8] = (rnds[8] & 0x3f) | 0x80; 13211 13212 // Copy bytes to buffer, if provided 13213 if (buf) { 13214 for (var ii = 0; ii < 16; ++ii) { 13215 buf[i + ii] = rnds[ii]; 13216 } 13217 } 13218 13219 return buf || bytesToUuid(rnds); 13220 } 13221 13222 module.exports = v4; 13223 13224 13225 /***/ }), 13226 13227 /***/ "@wordpress/autop": 13228 /*!****************************************!*\ 13229 !*** external {"this":["wp","autop"]} ***! 13230 \****************************************/ 13231 /*! no static exports found */ 13232 /***/ (function(module, exports) { 13233 13234 (function() { module.exports = this["wp"]["autop"]; }()); 13235 13236 /***/ }), 13237 13238 /***/ "@wordpress/blob": 13239 /*!***************************************!*\ 13240 !*** external {"this":["wp","blob"]} ***! 13241 \***************************************/ 13242 /*! no static exports found */ 13243 /***/ (function(module, exports) { 13244 13245 (function() { module.exports = this["wp"]["blob"]; }()); 13246 13247 /***/ }), 13248 13249 /***/ "@wordpress/block-serialization-default-parser": 13250 /*!******************************************************************!*\ 13251 !*** external {"this":["wp","blockSerializationDefaultParser"]} ***! 13252 \******************************************************************/ 13253 /*! no static exports found */ 13254 /***/ (function(module, exports) { 13255 13256 (function() { module.exports = this["wp"]["blockSerializationDefaultParser"]; }()); 13257 13258 /***/ }), 13259 13260 /***/ "@wordpress/compose": 13261 /*!******************************************!*\ 13262 !*** external {"this":["wp","compose"]} ***! 13263 \******************************************/ 13264 /*! no static exports found */ 13265 /***/ (function(module, exports) { 13266 13267 (function() { module.exports = this["wp"]["compose"]; }()); 13268 13269 /***/ }), 13270 13271 /***/ "@wordpress/data": 13272 /*!***************************************!*\ 13273 !*** external {"this":["wp","data"]} ***! 13274 \***************************************/ 13275 /*! no static exports found */ 13276 /***/ (function(module, exports) { 13277 13278 (function() { module.exports = this["wp"]["data"]; }()); 13279 13280 /***/ }), 13281 13282 /***/ "@wordpress/deprecated": 13283 /*!*********************************************!*\ 13284 !*** external {"this":["wp","deprecated"]} ***! 13285 \*********************************************/ 13286 /*! no static exports found */ 13287 /***/ (function(module, exports) { 13288 13289 (function() { module.exports = this["wp"]["deprecated"]; }()); 13290 13291 /***/ }), 13292 13293 /***/ "@wordpress/dom": 13294 /*!**************************************!*\ 13295 !*** external {"this":["wp","dom"]} ***! 13296 \**************************************/ 13297 /*! no static exports found */ 13298 /***/ (function(module, exports) { 13299 13300 (function() { module.exports = this["wp"]["dom"]; }()); 13301 13302 /***/ }), 13303 13304 /***/ "@wordpress/element": 13305 /*!******************************************!*\ 13306 !*** external {"this":["wp","element"]} ***! 13307 \******************************************/ 13308 /*! no static exports found */ 13309 /***/ (function(module, exports) { 13310 13311 (function() { module.exports = this["wp"]["element"]; }()); 13312 13313 /***/ }), 13314 13315 /***/ "@wordpress/hooks": 13316 /*!****************************************!*\ 13317 !*** external {"this":["wp","hooks"]} ***! 13318 \****************************************/ 13319 /*! no static exports found */ 13320 /***/ (function(module, exports) { 13321 13322 (function() { module.exports = this["wp"]["hooks"]; }()); 13323 13324 /***/ }), 13325 13326 /***/ "@wordpress/i18n": 13327 /*!***************************************!*\ 13328 !*** external {"this":["wp","i18n"]} ***! 13329 \***************************************/ 13330 /*! no static exports found */ 13331 /***/ (function(module, exports) { 13332 13333 (function() { module.exports = this["wp"]["i18n"]; }()); 13334 13335 /***/ }), 13336 13337 /***/ "@wordpress/is-shallow-equal": 13338 /*!*************************************************!*\ 13339 !*** external {"this":["wp","isShallowEqual"]} ***! 13340 \*************************************************/ 13341 /*! no static exports found */ 13342 /***/ (function(module, exports) { 13343 13344 (function() { module.exports = this["wp"]["isShallowEqual"]; }()); 13345 13346 /***/ }), 13347 13348 /***/ "@wordpress/shortcode": 13349 /*!********************************************!*\ 13350 !*** external {"this":["wp","shortcode"]} ***! 13351 \********************************************/ 13352 /*! no static exports found */ 13353 /***/ (function(module, exports) { 13354 13355 (function() { module.exports = this["wp"]["shortcode"]; }()); 13356 13357 /***/ }), 13358 13359 /***/ "lodash": 13360 /*!*************************!*\ 13361 !*** external "lodash" ***! 13362 \*************************/ 13363 /*! no static exports found */ 13364 /***/ (function(module, exports) { 13365 13366 (function() { module.exports = this["lodash"]; }()); 13367 13368 /***/ }) 13369 13370 /******/ }); 13371 //# sourceMappingURL=blocks.js.map
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Jan 7 01:00:05 2019 | Cross-referenced by PHPXref 0.7.1 |