mirror of
https://github.com/WordPress/WordPress.git
synced 2025-02-20 19:56:49 +01:00
Updated packages: @wordpress/annotations@1.7.1 @wordpress/api-fetch@3.6.1 @wordpress/babel-plugin-makepot@3.2.1 @wordpress/babel-preset-default@4.6.1 @wordpress/block-directory@1.0.1 @wordpress/block-editor@3.2.1 @wordpress/block-library@2.9.1 @wordpress/blocks@6.7.1 @wordpress/components@8.3.1 @wordpress/compose@3.7.1 @wordpress/core-data@2.7.1 @wordpress/data-controls@1.3.1 @wordpress/data@4.9.1 @wordpress/docgen@1.4.1 @wordpress/dom@2.5.1 @wordpress/e2e-test-utils@2.4.1 @wordpress/e2e-tests@1.7.1 @wordpress/edit-post@3.8.1 @wordpress/editor@9.7.1 @wordpress/element@2.8.1 @wordpress/format-library@1.9.1 @wordpress/i18n@3.6.1 @wordpress/jest-console@3.3.1 @wordpress/jest-preset-default@5.1.1 @wordpress/keycodes@2.6.1 @wordpress/library-export-default-webpack-plugin@1.4.1 @wordpress/list-reusable-blocks@1.8.1 @wordpress/media-utils@1.2.1 @wordpress/notices@1.8.1 @wordpress/nux@3.7.1 @wordpress/plugins@2.7.1 @wordpress/redux-routine@3.6.1 @wordpress/rich-text@3.7.1 @wordpress/scripts@5.0.1 @wordpress/server-side-render@1.3.1 @wordpress/shortcode@2.4.1 @wordpress/token-list@1.6.1 @wordpress/viewport@2.8.1 @wordpress/wordcount@2.6.1 Props epiqueras, youknowriad, donmhico, jorgefilipecosta, soean, mcsf, noisysocks, andraganescu, gziolo, talldanwp, iseulde, nrqsnchz, mapk, karmatosed, joen, afercia, kjellr, desrosj. Fixes #48186. Built from https://develop.svn.wordpress.org/trunk@46364 git-svn-id: http://core.svn.wordpress.org/trunk@46163 1a063a9b-81f0-0310-95a4-ce76da25c4cd
28149 lines
1.0 MiB
28149 lines
1.0 MiB
this["wp"] = this["wp"] || {}; this["wp"]["blockEditor"] =
|
||
/******/ (function(modules) { // webpackBootstrap
|
||
/******/ // The module cache
|
||
/******/ var installedModules = {};
|
||
/******/
|
||
/******/ // The require function
|
||
/******/ function __webpack_require__(moduleId) {
|
||
/******/
|
||
/******/ // Check if module is in cache
|
||
/******/ if(installedModules[moduleId]) {
|
||
/******/ return installedModules[moduleId].exports;
|
||
/******/ }
|
||
/******/ // Create a new module (and put it into the cache)
|
||
/******/ var module = installedModules[moduleId] = {
|
||
/******/ i: moduleId,
|
||
/******/ l: false,
|
||
/******/ exports: {}
|
||
/******/ };
|
||
/******/
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
/******/
|
||
/******/ // Flag the module as loaded
|
||
/******/ module.l = true;
|
||
/******/
|
||
/******/ // Return the exports of the module
|
||
/******/ return module.exports;
|
||
/******/ }
|
||
/******/
|
||
/******/
|
||
/******/ // expose the modules object (__webpack_modules__)
|
||
/******/ __webpack_require__.m = modules;
|
||
/******/
|
||
/******/ // expose the module cache
|
||
/******/ __webpack_require__.c = installedModules;
|
||
/******/
|
||
/******/ // define getter function for harmony exports
|
||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
||
/******/ }
|
||
/******/ };
|
||
/******/
|
||
/******/ // define __esModule on exports
|
||
/******/ __webpack_require__.r = function(exports) {
|
||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||
/******/ }
|
||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||
/******/ };
|
||
/******/
|
||
/******/ // create a fake namespace object
|
||
/******/ // mode & 1: value is a module id, require it
|
||
/******/ // mode & 2: merge all properties of value into the ns
|
||
/******/ // mode & 4: return value when already ns object
|
||
/******/ // mode & 8|1: behave like require
|
||
/******/ __webpack_require__.t = function(value, mode) {
|
||
/******/ if(mode & 1) value = __webpack_require__(value);
|
||
/******/ if(mode & 8) return value;
|
||
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
||
/******/ var ns = Object.create(null);
|
||
/******/ __webpack_require__.r(ns);
|
||
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
||
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
||
/******/ return ns;
|
||
/******/ };
|
||
/******/
|
||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||
/******/ __webpack_require__.n = function(module) {
|
||
/******/ var getter = module && module.__esModule ?
|
||
/******/ function getDefault() { return module['default']; } :
|
||
/******/ function getModuleExports() { return module; };
|
||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||
/******/ return getter;
|
||
/******/ };
|
||
/******/
|
||
/******/ // Object.prototype.hasOwnProperty.call
|
||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||
/******/
|
||
/******/ // __webpack_public_path__
|
||
/******/ __webpack_require__.p = "";
|
||
/******/
|
||
/******/
|
||
/******/ // Load entry module and return exports
|
||
/******/ return __webpack_require__(__webpack_require__.s = 381);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ({
|
||
|
||
/***/ 0:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["element"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 1:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["i18n"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 10:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; });
|
||
function _defineProperty(obj, key, value) {
|
||
if (key in obj) {
|
||
Object.defineProperty(obj, key, {
|
||
value: value,
|
||
enumerable: true,
|
||
configurable: true,
|
||
writable: true
|
||
});
|
||
} else {
|
||
obj[key] = value;
|
||
}
|
||
|
||
return obj;
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 104:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["wordcount"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 11:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _createClass; });
|
||
function _defineProperties(target, props) {
|
||
for (var i = 0; i < props.length; i++) {
|
||
var descriptor = props[i];
|
||
descriptor.enumerable = descriptor.enumerable || false;
|
||
descriptor.configurable = true;
|
||
if ("value" in descriptor) descriptor.writable = true;
|
||
Object.defineProperty(target, descriptor.key, descriptor);
|
||
}
|
||
}
|
||
|
||
function _createClass(Constructor, protoProps, staticProps) {
|
||
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
||
if (staticProps) _defineProperties(Constructor, staticProps);
|
||
return Constructor;
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 12:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _classCallCheck; });
|
||
function _classCallCheck(instance, Constructor) {
|
||
if (!(instance instanceof Constructor)) {
|
||
throw new TypeError("Cannot call a class as a function");
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 122:
|
||
/***/ (function(module, exports) {
|
||
|
||
if (typeof Object.create === 'function') {
|
||
// implementation from standard node.js 'util' module
|
||
module.exports = function inherits(ctor, superCtor) {
|
||
if (superCtor) {
|
||
ctor.super_ = superCtor
|
||
ctor.prototype = Object.create(superCtor.prototype, {
|
||
constructor: {
|
||
value: ctor,
|
||
enumerable: false,
|
||
writable: true,
|
||
configurable: true
|
||
}
|
||
})
|
||
}
|
||
};
|
||
} else {
|
||
// old school shim for old browsers
|
||
module.exports = function inherits(ctor, superCtor) {
|
||
if (superCtor) {
|
||
ctor.super_ = superCtor
|
||
var TempCtor = function () {}
|
||
TempCtor.prototype = superCtor.prototype
|
||
ctor.prototype = new TempCtor()
|
||
ctor.prototype.constructor = ctor
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 13:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _possibleConstructorReturn; });
|
||
/* harmony import */ var _helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(31);
|
||
/* harmony import */ var _assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
|
||
|
||
|
||
function _possibleConstructorReturn(self, call) {
|
||
if (call && (Object(_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(call) === "object" || typeof call === "function")) {
|
||
return call;
|
||
}
|
||
|
||
return Object(_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(self);
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 130:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var util = __webpack_require__(131);
|
||
|
||
function scrollIntoView(elem, container, config) {
|
||
config = config || {};
|
||
// document 归一化到 window
|
||
if (container.nodeType === 9) {
|
||
container = util.getWindow(container);
|
||
}
|
||
|
||
var allowHorizontalScroll = config.allowHorizontalScroll;
|
||
var onlyScrollIfNeeded = config.onlyScrollIfNeeded;
|
||
var alignWithTop = config.alignWithTop;
|
||
var alignWithLeft = config.alignWithLeft;
|
||
var offsetTop = config.offsetTop || 0;
|
||
var offsetLeft = config.offsetLeft || 0;
|
||
var offsetBottom = config.offsetBottom || 0;
|
||
var offsetRight = config.offsetRight || 0;
|
||
|
||
allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;
|
||
|
||
var isWin = util.isWindow(container);
|
||
var elemOffset = util.offset(elem);
|
||
var eh = util.outerHeight(elem);
|
||
var ew = util.outerWidth(elem);
|
||
var containerOffset = undefined;
|
||
var ch = undefined;
|
||
var cw = undefined;
|
||
var containerScroll = undefined;
|
||
var diffTop = undefined;
|
||
var diffBottom = undefined;
|
||
var win = undefined;
|
||
var winScroll = undefined;
|
||
var ww = undefined;
|
||
var wh = undefined;
|
||
|
||
if (isWin) {
|
||
win = container;
|
||
wh = util.height(win);
|
||
ww = util.width(win);
|
||
winScroll = {
|
||
left: util.scrollLeft(win),
|
||
top: util.scrollTop(win)
|
||
};
|
||
// elem 相对 container 可视视窗的距离
|
||
diffTop = {
|
||
left: elemOffset.left - winScroll.left - offsetLeft,
|
||
top: elemOffset.top - winScroll.top - offsetTop
|
||
};
|
||
diffBottom = {
|
||
left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,
|
||
top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom
|
||
};
|
||
containerScroll = winScroll;
|
||
} else {
|
||
containerOffset = util.offset(container);
|
||
ch = container.clientHeight;
|
||
cw = container.clientWidth;
|
||
containerScroll = {
|
||
left: container.scrollLeft,
|
||
top: container.scrollTop
|
||
};
|
||
// elem 相对 container 可视视窗的距离
|
||
// 注意边框, offset 是边框到根节点
|
||
diffTop = {
|
||
left: elemOffset.left - (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) - offsetLeft,
|
||
top: elemOffset.top - (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) - offsetTop
|
||
};
|
||
diffBottom = {
|
||
left: elemOffset.left + ew - (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) + offsetRight,
|
||
top: elemOffset.top + eh - (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) + offsetBottom
|
||
};
|
||
}
|
||
|
||
if (diffTop.top < 0 || diffBottom.top > 0) {
|
||
// 强制向上
|
||
if (alignWithTop === true) {
|
||
util.scrollTop(container, containerScroll.top + diffTop.top);
|
||
} else if (alignWithTop === false) {
|
||
util.scrollTop(container, containerScroll.top + diffBottom.top);
|
||
} else {
|
||
// 自动调整
|
||
if (diffTop.top < 0) {
|
||
util.scrollTop(container, containerScroll.top + diffTop.top);
|
||
} else {
|
||
util.scrollTop(container, containerScroll.top + diffBottom.top);
|
||
}
|
||
}
|
||
} else {
|
||
if (!onlyScrollIfNeeded) {
|
||
alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;
|
||
if (alignWithTop) {
|
||
util.scrollTop(container, containerScroll.top + diffTop.top);
|
||
} else {
|
||
util.scrollTop(container, containerScroll.top + diffBottom.top);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (allowHorizontalScroll) {
|
||
if (diffTop.left < 0 || diffBottom.left > 0) {
|
||
// 强制向上
|
||
if (alignWithLeft === true) {
|
||
util.scrollLeft(container, containerScroll.left + diffTop.left);
|
||
} else if (alignWithLeft === false) {
|
||
util.scrollLeft(container, containerScroll.left + diffBottom.left);
|
||
} else {
|
||
// 自动调整
|
||
if (diffTop.left < 0) {
|
||
util.scrollLeft(container, containerScroll.left + diffTop.left);
|
||
} else {
|
||
util.scrollLeft(container, containerScroll.left + diffBottom.left);
|
||
}
|
||
}
|
||
} else {
|
||
if (!onlyScrollIfNeeded) {
|
||
alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;
|
||
if (alignWithLeft) {
|
||
util.scrollLeft(container, containerScroll.left + diffTop.left);
|
||
} else {
|
||
util.scrollLeft(container, containerScroll.left + diffBottom.left);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = scrollIntoView;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 131:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||
|
||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
|
||
|
||
var RE_NUM = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source;
|
||
|
||
function getClientPosition(elem) {
|
||
var box = undefined;
|
||
var x = undefined;
|
||
var y = undefined;
|
||
var doc = elem.ownerDocument;
|
||
var body = doc.body;
|
||
var docElem = doc && doc.documentElement;
|
||
// 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式
|
||
box = elem.getBoundingClientRect();
|
||
|
||
// 注:jQuery 还考虑减去 docElem.clientLeft/clientTop
|
||
// 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确
|
||
// 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin
|
||
|
||
x = box.left;
|
||
y = box.top;
|
||
|
||
// In IE, most of the time, 2 extra pixels are added to the top and left
|
||
// due to the implicit 2-pixel inset border. In IE6/7 quirks mode and
|
||
// IE6 standards mode, this border can be overridden by setting the
|
||
// document element's border to zero -- thus, we cannot rely on the
|
||
// offset always being 2 pixels.
|
||
|
||
// In quirks mode, the offset can be determined by querying the body's
|
||
// clientLeft/clientTop, but in standards mode, it is found by querying
|
||
// the document element's clientLeft/clientTop. Since we already called
|
||
// getClientBoundingRect we have already forced a reflow, so it is not
|
||
// too expensive just to query them all.
|
||
|
||
// ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的
|
||
// 窗口边框标准是设 documentElement ,quirks 时设置 body
|
||
// 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去
|
||
// 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置
|
||
// 标准 ie 下 docElem.clientTop 就是 border-top
|
||
// ie7 html 即窗口边框改变不了。永远为 2
|
||
// 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0
|
||
|
||
x -= docElem.clientLeft || body.clientLeft || 0;
|
||
y -= docElem.clientTop || body.clientTop || 0;
|
||
|
||
return {
|
||
left: x,
|
||
top: y
|
||
};
|
||
}
|
||
|
||
function getScroll(w, top) {
|
||
var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];
|
||
var method = 'scroll' + (top ? 'Top' : 'Left');
|
||
if (typeof ret !== 'number') {
|
||
var d = w.document;
|
||
// ie6,7,8 standard mode
|
||
ret = d.documentElement[method];
|
||
if (typeof ret !== 'number') {
|
||
// quirks mode
|
||
ret = d.body[method];
|
||
}
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
function getScrollLeft(w) {
|
||
return getScroll(w);
|
||
}
|
||
|
||
function getScrollTop(w) {
|
||
return getScroll(w, true);
|
||
}
|
||
|
||
function getOffset(el) {
|
||
var pos = getClientPosition(el);
|
||
var doc = el.ownerDocument;
|
||
var w = doc.defaultView || doc.parentWindow;
|
||
pos.left += getScrollLeft(w);
|
||
pos.top += getScrollTop(w);
|
||
return pos;
|
||
}
|
||
function _getComputedStyle(elem, name, computedStyle_) {
|
||
var val = '';
|
||
var d = elem.ownerDocument;
|
||
var computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null);
|
||
|
||
// https://github.com/kissyteam/kissy/issues/61
|
||
if (computedStyle) {
|
||
val = computedStyle.getPropertyValue(name) || computedStyle[name];
|
||
}
|
||
|
||
return val;
|
||
}
|
||
|
||
var _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');
|
||
var RE_POS = /^(top|right|bottom|left)$/;
|
||
var CURRENT_STYLE = 'currentStyle';
|
||
var RUNTIME_STYLE = 'runtimeStyle';
|
||
var LEFT = 'left';
|
||
var PX = 'px';
|
||
|
||
function _getComputedStyleIE(elem, name) {
|
||
// currentStyle maybe null
|
||
// http://msdn.microsoft.com/en-us/library/ms535231.aspx
|
||
var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];
|
||
|
||
// 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值
|
||
// 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19
|
||
// 在 ie 下不对,需要直接用 offset 方式
|
||
// borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了
|
||
|
||
// From the awesome hack by Dean Edwards
|
||
// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
|
||
// If we're not dealing with a regular pixel number
|
||
// but a number that has a weird ending, we need to convert it to pixels
|
||
// exclude left right for relativity
|
||
if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {
|
||
// Remember the original values
|
||
var style = elem.style;
|
||
var left = style[LEFT];
|
||
var rsLeft = elem[RUNTIME_STYLE][LEFT];
|
||
|
||
// prevent flashing of content
|
||
elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];
|
||
|
||
// Put in the new values to get a computed value out
|
||
style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;
|
||
ret = style.pixelLeft + PX;
|
||
|
||
// Revert the changed values
|
||
style[LEFT] = left;
|
||
|
||
elem[RUNTIME_STYLE][LEFT] = rsLeft;
|
||
}
|
||
return ret === '' ? 'auto' : ret;
|
||
}
|
||
|
||
var getComputedStyleX = undefined;
|
||
if (typeof window !== 'undefined') {
|
||
getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;
|
||
}
|
||
|
||
function each(arr, fn) {
|
||
for (var i = 0; i < arr.length; i++) {
|
||
fn(arr[i]);
|
||
}
|
||
}
|
||
|
||
function isBorderBoxFn(elem) {
|
||
return getComputedStyleX(elem, 'boxSizing') === 'border-box';
|
||
}
|
||
|
||
var BOX_MODELS = ['margin', 'border', 'padding'];
|
||
var CONTENT_INDEX = -1;
|
||
var PADDING_INDEX = 2;
|
||
var BORDER_INDEX = 1;
|
||
var MARGIN_INDEX = 0;
|
||
|
||
function swap(elem, options, callback) {
|
||
var old = {};
|
||
var style = elem.style;
|
||
var name = undefined;
|
||
|
||
// Remember the old values, and insert the new ones
|
||
for (name in options) {
|
||
if (options.hasOwnProperty(name)) {
|
||
old[name] = style[name];
|
||
style[name] = options[name];
|
||
}
|
||
}
|
||
|
||
callback.call(elem);
|
||
|
||
// Revert the old values
|
||
for (name in options) {
|
||
if (options.hasOwnProperty(name)) {
|
||
style[name] = old[name];
|
||
}
|
||
}
|
||
}
|
||
|
||
function getPBMWidth(elem, props, which) {
|
||
var value = 0;
|
||
var prop = undefined;
|
||
var j = undefined;
|
||
var i = undefined;
|
||
for (j = 0; j < props.length; j++) {
|
||
prop = props[j];
|
||
if (prop) {
|
||
for (i = 0; i < which.length; i++) {
|
||
var cssProp = undefined;
|
||
if (prop === 'border') {
|
||
cssProp = prop + which[i] + 'Width';
|
||
} else {
|
||
cssProp = prop + which[i];
|
||
}
|
||
value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;
|
||
}
|
||
}
|
||
}
|
||
return value;
|
||
}
|
||
|
||
/**
|
||
* A crude way of determining if an object is a window
|
||
* @member util
|
||
*/
|
||
function isWindow(obj) {
|
||
// must use == for ie8
|
||
/* eslint eqeqeq:0 */
|
||
return obj != null && obj == obj.window;
|
||
}
|
||
|
||
var domUtils = {};
|
||
|
||
each(['Width', 'Height'], function (name) {
|
||
domUtils['doc' + name] = function (refWin) {
|
||
var d = refWin.document;
|
||
return Math.max(
|
||
// firefox chrome documentElement.scrollHeight< body.scrollHeight
|
||
// ie standard mode : documentElement.scrollHeight> body.scrollHeight
|
||
d.documentElement['scroll' + name],
|
||
// quirks : documentElement.scrollHeight 最大等于可视窗口多一点?
|
||
d.body['scroll' + name], domUtils['viewport' + name](d));
|
||
};
|
||
|
||
domUtils['viewport' + name] = function (win) {
|
||
// pc browser includes scrollbar in window.innerWidth
|
||
var prop = 'client' + name;
|
||
var doc = win.document;
|
||
var body = doc.body;
|
||
var documentElement = doc.documentElement;
|
||
var documentElementProp = documentElement[prop];
|
||
// 标准模式取 documentElement
|
||
// backcompat 取 body
|
||
return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;
|
||
};
|
||
});
|
||
|
||
/*
|
||
得到元素的大小信息
|
||
@param elem
|
||
@param name
|
||
@param {String} [extra] 'padding' : (css width) + padding
|
||
'border' : (css width) + padding + border
|
||
'margin' : (css width) + padding + border + margin
|
||
*/
|
||
function getWH(elem, name, extra) {
|
||
if (isWindow(elem)) {
|
||
return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);
|
||
} else if (elem.nodeType === 9) {
|
||
return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);
|
||
}
|
||
var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];
|
||
var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;
|
||
var computedStyle = getComputedStyleX(elem);
|
||
var isBorderBox = isBorderBoxFn(elem, computedStyle);
|
||
var cssBoxValue = 0;
|
||
if (borderBoxValue == null || borderBoxValue <= 0) {
|
||
borderBoxValue = undefined;
|
||
// Fall back to computed then un computed css if necessary
|
||
cssBoxValue = getComputedStyleX(elem, name);
|
||
if (cssBoxValue == null || Number(cssBoxValue) < 0) {
|
||
cssBoxValue = elem.style[name] || 0;
|
||
}
|
||
// Normalize '', auto, and prepare for extra
|
||
cssBoxValue = parseFloat(cssBoxValue) || 0;
|
||
}
|
||
if (extra === undefined) {
|
||
extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;
|
||
}
|
||
var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;
|
||
var val = borderBoxValue || cssBoxValue;
|
||
if (extra === CONTENT_INDEX) {
|
||
if (borderBoxValueOrIsBorderBox) {
|
||
return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);
|
||
}
|
||
return cssBoxValue;
|
||
}
|
||
if (borderBoxValueOrIsBorderBox) {
|
||
var padding = extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle);
|
||
return val + (extra === BORDER_INDEX ? 0 : padding);
|
||
}
|
||
return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);
|
||
}
|
||
|
||
var cssShow = {
|
||
position: 'absolute',
|
||
visibility: 'hidden',
|
||
display: 'block'
|
||
};
|
||
|
||
// fix #119 : https://github.com/kissyteam/kissy/issues/119
|
||
function getWHIgnoreDisplay(elem) {
|
||
var val = undefined;
|
||
var args = arguments;
|
||
// in case elem is window
|
||
// elem.offsetWidth === undefined
|
||
if (elem.offsetWidth !== 0) {
|
||
val = getWH.apply(undefined, args);
|
||
} else {
|
||
swap(elem, cssShow, function () {
|
||
val = getWH.apply(undefined, args);
|
||
});
|
||
}
|
||
return val;
|
||
}
|
||
|
||
function css(el, name, v) {
|
||
var value = v;
|
||
if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {
|
||
for (var i in name) {
|
||
if (name.hasOwnProperty(i)) {
|
||
css(el, i, name[i]);
|
||
}
|
||
}
|
||
return undefined;
|
||
}
|
||
if (typeof value !== 'undefined') {
|
||
if (typeof value === 'number') {
|
||
value += 'px';
|
||
}
|
||
el.style[name] = value;
|
||
return undefined;
|
||
}
|
||
return getComputedStyleX(el, name);
|
||
}
|
||
|
||
each(['width', 'height'], function (name) {
|
||
var first = name.charAt(0).toUpperCase() + name.slice(1);
|
||
domUtils['outer' + first] = function (el, includeMargin) {
|
||
return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);
|
||
};
|
||
var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];
|
||
|
||
domUtils[name] = function (elem, val) {
|
||
if (val !== undefined) {
|
||
if (elem) {
|
||
var computedStyle = getComputedStyleX(elem);
|
||
var isBorderBox = isBorderBoxFn(elem);
|
||
if (isBorderBox) {
|
||
val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);
|
||
}
|
||
return css(elem, name, val);
|
||
}
|
||
return undefined;
|
||
}
|
||
return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);
|
||
};
|
||
});
|
||
|
||
// 设置 elem 相对 elem.ownerDocument 的坐标
|
||
function setOffset(elem, offset) {
|
||
// set position first, in-case top/left are set even on static elem
|
||
if (css(elem, 'position') === 'static') {
|
||
elem.style.position = 'relative';
|
||
}
|
||
|
||
var old = getOffset(elem);
|
||
var ret = {};
|
||
var current = undefined;
|
||
var key = undefined;
|
||
|
||
for (key in offset) {
|
||
if (offset.hasOwnProperty(key)) {
|
||
current = parseFloat(css(elem, key)) || 0;
|
||
ret[key] = current + offset[key] - old[key];
|
||
}
|
||
}
|
||
css(elem, ret);
|
||
}
|
||
|
||
module.exports = _extends({
|
||
getWindow: function getWindow(node) {
|
||
var doc = node.ownerDocument || node;
|
||
return doc.defaultView || doc.parentWindow;
|
||
},
|
||
offset: function offset(el, value) {
|
||
if (typeof value !== 'undefined') {
|
||
setOffset(el, value);
|
||
} else {
|
||
return getOffset(el);
|
||
}
|
||
},
|
||
|
||
isWindow: isWindow,
|
||
each: each,
|
||
css: css,
|
||
clone: function clone(obj) {
|
||
var ret = {};
|
||
for (var i in obj) {
|
||
if (obj.hasOwnProperty(i)) {
|
||
ret[i] = obj[i];
|
||
}
|
||
}
|
||
var overflow = obj.overflow;
|
||
if (overflow) {
|
||
for (var i in obj) {
|
||
if (obj.hasOwnProperty(i)) {
|
||
ret.overflow[i] = obj.overflow[i];
|
||
}
|
||
}
|
||
}
|
||
return ret;
|
||
},
|
||
scrollLeft: function scrollLeft(w, v) {
|
||
if (isWindow(w)) {
|
||
if (v === undefined) {
|
||
return getScrollLeft(w);
|
||
}
|
||
window.scrollTo(v, getScrollTop(w));
|
||
} else {
|
||
if (v === undefined) {
|
||
return w.scrollLeft;
|
||
}
|
||
w.scrollLeft = v;
|
||
}
|
||
},
|
||
scrollTop: function scrollTop(w, v) {
|
||
if (isWindow(w)) {
|
||
if (v === undefined) {
|
||
return getScrollTop(w);
|
||
}
|
||
window.scrollTo(getScrollLeft(w), v);
|
||
} else {
|
||
if (v === undefined) {
|
||
return w.scrollTop;
|
||
}
|
||
w.scrollTop = v;
|
||
}
|
||
},
|
||
|
||
viewportWidth: 0,
|
||
viewportHeight: 0
|
||
}, domUtils);
|
||
|
||
/***/ }),
|
||
|
||
/***/ 132:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || (function () {
|
||
var extendStatics = Object.setPrototypeOf ||
|
||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||
return function (d, b) {
|
||
extendStatics(d, b);
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
})();
|
||
var __assign = (this && this.__assign) || Object.assign || function(t) {
|
||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||
s = arguments[i];
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||
t[p] = s[p];
|
||
}
|
||
return t;
|
||
};
|
||
var __rest = (this && this.__rest) || function (s, e) {
|
||
var t = {};
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
||
t[p] = s[p];
|
||
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
||
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
|
||
t[p[i]] = s[p[i]];
|
||
return t;
|
||
};
|
||
exports.__esModule = true;
|
||
var React = __webpack_require__(28);
|
||
var PropTypes = __webpack_require__(34);
|
||
var autosize = __webpack_require__(133);
|
||
var _getLineHeight = __webpack_require__(134);
|
||
var getLineHeight = _getLineHeight;
|
||
var UPDATE = 'autosize:update';
|
||
var DESTROY = 'autosize:destroy';
|
||
var RESIZED = 'autosize:resized';
|
||
/**
|
||
* A light replacement for built-in textarea component
|
||
* which automaticaly adjusts its height to match the content
|
||
*/
|
||
var TextareaAutosize = /** @class */ (function (_super) {
|
||
__extends(TextareaAutosize, _super);
|
||
function TextareaAutosize() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.state = {
|
||
lineHeight: null
|
||
};
|
||
_this.dispatchEvent = function (EVENT_TYPE) {
|
||
var event = document.createEvent('Event');
|
||
event.initEvent(EVENT_TYPE, true, false);
|
||
_this.textarea.dispatchEvent(event);
|
||
};
|
||
_this.updateLineHeight = function () {
|
||
_this.setState({
|
||
lineHeight: getLineHeight(_this.textarea)
|
||
});
|
||
};
|
||
_this.onChange = function (e) {
|
||
var onChange = _this.props.onChange;
|
||
_this.currentValue = e.currentTarget.value;
|
||
onChange && onChange(e);
|
||
};
|
||
_this.saveDOMNodeRef = function (ref) {
|
||
var innerRef = _this.props.innerRef;
|
||
if (innerRef) {
|
||
innerRef(ref);
|
||
}
|
||
_this.textarea = ref;
|
||
};
|
||
_this.getLocals = function () {
|
||
var _a = _this, _b = _a.props, onResize = _b.onResize, maxRows = _b.maxRows, onChange = _b.onChange, style = _b.style, innerRef = _b.innerRef, props = __rest(_b, ["onResize", "maxRows", "onChange", "style", "innerRef"]), lineHeight = _a.state.lineHeight, saveDOMNodeRef = _a.saveDOMNodeRef;
|
||
var maxHeight = maxRows && lineHeight ? lineHeight * maxRows : null;
|
||
return __assign({}, props, { saveDOMNodeRef: saveDOMNodeRef, style: maxHeight ? __assign({}, style, { maxHeight: maxHeight }) : style, onChange: _this.onChange });
|
||
};
|
||
return _this;
|
||
}
|
||
TextareaAutosize.prototype.componentDidMount = function () {
|
||
var _this = this;
|
||
var _a = this.props, onResize = _a.onResize, maxRows = _a.maxRows;
|
||
if (typeof maxRows === 'number') {
|
||
this.updateLineHeight();
|
||
}
|
||
/*
|
||
the defer is needed to:
|
||
- force "autosize" to activate the scrollbar when this.props.maxRows is passed
|
||
- support StyledComponents (see #71)
|
||
*/
|
||
setTimeout(function () { return autosize(_this.textarea); });
|
||
if (onResize) {
|
||
this.textarea.addEventListener(RESIZED, onResize);
|
||
}
|
||
};
|
||
TextareaAutosize.prototype.componentWillUnmount = function () {
|
||
var onResize = this.props.onResize;
|
||
if (onResize) {
|
||
this.textarea.removeEventListener(RESIZED, onResize);
|
||
}
|
||
this.dispatchEvent(DESTROY);
|
||
};
|
||
TextareaAutosize.prototype.render = function () {
|
||
var _a = this.getLocals(), children = _a.children, saveDOMNodeRef = _a.saveDOMNodeRef, locals = __rest(_a, ["children", "saveDOMNodeRef"]);
|
||
return (React.createElement("textarea", __assign({}, locals, { ref: saveDOMNodeRef }), children));
|
||
};
|
||
TextareaAutosize.prototype.componentDidUpdate = function (prevProps) {
|
||
if (this.props.value !== this.currentValue || this.props.rows !== prevProps.rows) {
|
||
this.dispatchEvent(UPDATE);
|
||
}
|
||
};
|
||
TextareaAutosize.defaultProps = {
|
||
rows: 1
|
||
};
|
||
TextareaAutosize.propTypes = {
|
||
rows: PropTypes.number,
|
||
maxRows: PropTypes.number,
|
||
onResize: PropTypes.func,
|
||
innerRef: PropTypes.func
|
||
};
|
||
return TextareaAutosize;
|
||
}(React.Component));
|
||
exports["default"] = TextareaAutosize;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 133:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
|
||
autosize 4.0.2
|
||
license: MIT
|
||
http://www.jacklmoore.com/autosize
|
||
*/
|
||
(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (module, exports) {
|
||
'use strict';
|
||
|
||
var map = typeof Map === "function" ? new Map() : function () {
|
||
var keys = [];
|
||
var values = [];
|
||
|
||
return {
|
||
has: function has(key) {
|
||
return keys.indexOf(key) > -1;
|
||
},
|
||
get: function get(key) {
|
||
return values[keys.indexOf(key)];
|
||
},
|
||
set: function set(key, value) {
|
||
if (keys.indexOf(key) === -1) {
|
||
keys.push(key);
|
||
values.push(value);
|
||
}
|
||
},
|
||
delete: function _delete(key) {
|
||
var index = keys.indexOf(key);
|
||
if (index > -1) {
|
||
keys.splice(index, 1);
|
||
values.splice(index, 1);
|
||
}
|
||
}
|
||
};
|
||
}();
|
||
|
||
var createEvent = function createEvent(name) {
|
||
return new Event(name, { bubbles: true });
|
||
};
|
||
try {
|
||
new Event('test');
|
||
} catch (e) {
|
||
// IE does not support `new Event()`
|
||
createEvent = function createEvent(name) {
|
||
var evt = document.createEvent('Event');
|
||
evt.initEvent(name, true, false);
|
||
return evt;
|
||
};
|
||
}
|
||
|
||
function assign(ta) {
|
||
if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
|
||
|
||
var heightOffset = null;
|
||
var clientWidth = null;
|
||
var cachedHeight = null;
|
||
|
||
function init() {
|
||
var style = window.getComputedStyle(ta, null);
|
||
|
||
if (style.resize === 'vertical') {
|
||
ta.style.resize = 'none';
|
||
} else if (style.resize === 'both') {
|
||
ta.style.resize = 'horizontal';
|
||
}
|
||
|
||
if (style.boxSizing === 'content-box') {
|
||
heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
|
||
} else {
|
||
heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
|
||
}
|
||
// Fix when a textarea is not on document body and heightOffset is Not a Number
|
||
if (isNaN(heightOffset)) {
|
||
heightOffset = 0;
|
||
}
|
||
|
||
update();
|
||
}
|
||
|
||
function changeOverflow(value) {
|
||
{
|
||
// Chrome/Safari-specific fix:
|
||
// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
|
||
// made available by removing the scrollbar. The following forces the necessary text reflow.
|
||
var width = ta.style.width;
|
||
ta.style.width = '0px';
|
||
// Force reflow:
|
||
/* jshint ignore:start */
|
||
ta.offsetWidth;
|
||
/* jshint ignore:end */
|
||
ta.style.width = width;
|
||
}
|
||
|
||
ta.style.overflowY = value;
|
||
}
|
||
|
||
function getParentOverflows(el) {
|
||
var arr = [];
|
||
|
||
while (el && el.parentNode && el.parentNode instanceof Element) {
|
||
if (el.parentNode.scrollTop) {
|
||
arr.push({
|
||
node: el.parentNode,
|
||
scrollTop: el.parentNode.scrollTop
|
||
});
|
||
}
|
||
el = el.parentNode;
|
||
}
|
||
|
||
return arr;
|
||
}
|
||
|
||
function resize() {
|
||
if (ta.scrollHeight === 0) {
|
||
// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
|
||
return;
|
||
}
|
||
|
||
var overflows = getParentOverflows(ta);
|
||
var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
|
||
|
||
ta.style.height = '';
|
||
ta.style.height = ta.scrollHeight + heightOffset + 'px';
|
||
|
||
// used to check if an update is actually necessary on window.resize
|
||
clientWidth = ta.clientWidth;
|
||
|
||
// prevents scroll-position jumping
|
||
overflows.forEach(function (el) {
|
||
el.node.scrollTop = el.scrollTop;
|
||
});
|
||
|
||
if (docTop) {
|
||
document.documentElement.scrollTop = docTop;
|
||
}
|
||
}
|
||
|
||
function update() {
|
||
resize();
|
||
|
||
var styleHeight = Math.round(parseFloat(ta.style.height));
|
||
var computed = window.getComputedStyle(ta, null);
|
||
|
||
// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
|
||
var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
|
||
|
||
// The actual height not matching the style height (set via the resize method) indicates that
|
||
// the max-height has been exceeded, in which case the overflow should be allowed.
|
||
if (actualHeight < styleHeight) {
|
||
if (computed.overflowY === 'hidden') {
|
||
changeOverflow('scroll');
|
||
resize();
|
||
actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
|
||
}
|
||
} else {
|
||
// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
|
||
if (computed.overflowY !== 'hidden') {
|
||
changeOverflow('hidden');
|
||
resize();
|
||
actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
|
||
}
|
||
}
|
||
|
||
if (cachedHeight !== actualHeight) {
|
||
cachedHeight = actualHeight;
|
||
var evt = createEvent('autosize:resized');
|
||
try {
|
||
ta.dispatchEvent(evt);
|
||
} catch (err) {
|
||
// Firefox will throw an error on dispatchEvent for a detached element
|
||
// https://bugzilla.mozilla.org/show_bug.cgi?id=889376
|
||
}
|
||
}
|
||
}
|
||
|
||
var pageResize = function pageResize() {
|
||
if (ta.clientWidth !== clientWidth) {
|
||
update();
|
||
}
|
||
};
|
||
|
||
var destroy = function (style) {
|
||
window.removeEventListener('resize', pageResize, false);
|
||
ta.removeEventListener('input', update, false);
|
||
ta.removeEventListener('keyup', update, false);
|
||
ta.removeEventListener('autosize:destroy', destroy, false);
|
||
ta.removeEventListener('autosize:update', update, false);
|
||
|
||
Object.keys(style).forEach(function (key) {
|
||
ta.style[key] = style[key];
|
||
});
|
||
|
||
map.delete(ta);
|
||
}.bind(ta, {
|
||
height: ta.style.height,
|
||
resize: ta.style.resize,
|
||
overflowY: ta.style.overflowY,
|
||
overflowX: ta.style.overflowX,
|
||
wordWrap: ta.style.wordWrap
|
||
});
|
||
|
||
ta.addEventListener('autosize:destroy', destroy, false);
|
||
|
||
// IE9 does not fire onpropertychange or oninput for deletions,
|
||
// so binding to onkeyup to catch most of those events.
|
||
// There is no way that I know of to detect something like 'cut' in IE9.
|
||
if ('onpropertychange' in ta && 'oninput' in ta) {
|
||
ta.addEventListener('keyup', update, false);
|
||
}
|
||
|
||
window.addEventListener('resize', pageResize, false);
|
||
ta.addEventListener('input', update, false);
|
||
ta.addEventListener('autosize:update', update, false);
|
||
ta.style.overflowX = 'hidden';
|
||
ta.style.wordWrap = 'break-word';
|
||
|
||
map.set(ta, {
|
||
destroy: destroy,
|
||
update: update
|
||
});
|
||
|
||
init();
|
||
}
|
||
|
||
function destroy(ta) {
|
||
var methods = map.get(ta);
|
||
if (methods) {
|
||
methods.destroy();
|
||
}
|
||
}
|
||
|
||
function update(ta) {
|
||
var methods = map.get(ta);
|
||
if (methods) {
|
||
methods.update();
|
||
}
|
||
}
|
||
|
||
var autosize = null;
|
||
|
||
// Do nothing in Node.js environment and IE8 (or lower)
|
||
if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
|
||
autosize = function autosize(el) {
|
||
return el;
|
||
};
|
||
autosize.destroy = function (el) {
|
||
return el;
|
||
};
|
||
autosize.update = function (el) {
|
||
return el;
|
||
};
|
||
} else {
|
||
autosize = function autosize(el, options) {
|
||
if (el) {
|
||
Array.prototype.forEach.call(el.length ? el : [el], function (x) {
|
||
return assign(x, options);
|
||
});
|
||
}
|
||
return el;
|
||
};
|
||
autosize.destroy = function (el) {
|
||
if (el) {
|
||
Array.prototype.forEach.call(el.length ? el : [el], destroy);
|
||
}
|
||
return el;
|
||
};
|
||
autosize.update = function (el) {
|
||
if (el) {
|
||
Array.prototype.forEach.call(el.length ? el : [el], update);
|
||
}
|
||
return el;
|
||
};
|
||
}
|
||
|
||
exports.default = autosize;
|
||
module.exports = exports['default'];
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ 134:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// Load in dependencies
|
||
var computedStyle = __webpack_require__(135);
|
||
|
||
/**
|
||
* Calculate the `line-height` of a given node
|
||
* @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.
|
||
* @returns {Number} `line-height` of the element in pixels
|
||
*/
|
||
function lineHeight(node) {
|
||
// Grab the line-height via style
|
||
var lnHeightStr = computedStyle(node, 'line-height');
|
||
var lnHeight = parseFloat(lnHeightStr, 10);
|
||
|
||
// If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')
|
||
if (lnHeightStr === lnHeight + '') {
|
||
// Save the old lineHeight style and update the em unit to the element
|
||
var _lnHeightStyle = node.style.lineHeight;
|
||
node.style.lineHeight = lnHeightStr + 'em';
|
||
|
||
// Calculate the em based height
|
||
lnHeightStr = computedStyle(node, 'line-height');
|
||
lnHeight = parseFloat(lnHeightStr, 10);
|
||
|
||
// Revert the lineHeight style
|
||
if (_lnHeightStyle) {
|
||
node.style.lineHeight = _lnHeightStyle;
|
||
} else {
|
||
delete node.style.lineHeight;
|
||
}
|
||
}
|
||
|
||
// If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)
|
||
// DEV: `em` units are converted to `pt` in IE6
|
||
// Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length
|
||
if (lnHeightStr.indexOf('pt') !== -1) {
|
||
lnHeight *= 4;
|
||
lnHeight /= 3;
|
||
// Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)
|
||
} else if (lnHeightStr.indexOf('mm') !== -1) {
|
||
lnHeight *= 96;
|
||
lnHeight /= 25.4;
|
||
// Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)
|
||
} else if (lnHeightStr.indexOf('cm') !== -1) {
|
||
lnHeight *= 96;
|
||
lnHeight /= 2.54;
|
||
// Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)
|
||
} else if (lnHeightStr.indexOf('in') !== -1) {
|
||
lnHeight *= 96;
|
||
// Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)
|
||
} else if (lnHeightStr.indexOf('pc') !== -1) {
|
||
lnHeight *= 16;
|
||
}
|
||
|
||
// Continue our computation
|
||
lnHeight = Math.round(lnHeight);
|
||
|
||
// If the line-height is "normal", calculate by font-size
|
||
if (lnHeightStr === 'normal') {
|
||
// Create a temporary node
|
||
var nodeName = node.nodeName;
|
||
var _node = document.createElement(nodeName);
|
||
_node.innerHTML = ' ';
|
||
|
||
// If we have a text area, reset it to only 1 row
|
||
// https://github.com/twolfson/line-height/issues/4
|
||
if (nodeName.toUpperCase() === 'TEXTAREA') {
|
||
_node.setAttribute('rows', '1');
|
||
}
|
||
|
||
// Set the font-size of the element
|
||
var fontSizeStr = computedStyle(node, 'font-size');
|
||
_node.style.fontSize = fontSizeStr;
|
||
|
||
// Remove default padding/border which can affect offset height
|
||
// https://github.com/twolfson/line-height/issues/4
|
||
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
|
||
_node.style.padding = '0px';
|
||
_node.style.border = '0px';
|
||
|
||
// Append it to the body
|
||
var body = document.body;
|
||
body.appendChild(_node);
|
||
|
||
// Assume the line height of the element is the height
|
||
var height = _node.offsetHeight;
|
||
lnHeight = height;
|
||
|
||
// Remove our child from the DOM
|
||
body.removeChild(_node);
|
||
}
|
||
|
||
// Return the calculated height
|
||
return lnHeight;
|
||
}
|
||
|
||
// Export lineHeight
|
||
module.exports = lineHeight;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 135:
|
||
/***/ (function(module, exports) {
|
||
|
||
// This code has been refactored for 140 bytes
|
||
// You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js
|
||
var computedStyle = function (el, prop, getComputedStyle) {
|
||
getComputedStyle = window.getComputedStyle;
|
||
|
||
// In one fell swoop
|
||
return (
|
||
// If we have getComputedStyle
|
||
getComputedStyle ?
|
||
// Query it
|
||
// TODO: From CSS-Query notes, we might need (node, null) for FF
|
||
getComputedStyle(el) :
|
||
|
||
// Otherwise, we are in IE and use currentStyle
|
||
el.currentStyle
|
||
)[
|
||
// Switch to camelCase for CSSOM
|
||
// DEV: Grabbed from jQuery
|
||
// https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194
|
||
// https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597
|
||
prop.replace(/-(\w)/gi, function (word, letter) {
|
||
return letter.toUpperCase();
|
||
})
|
||
];
|
||
};
|
||
|
||
module.exports = computedStyle;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 136:
|
||
/***/ (function(module, exports) {
|
||
|
||
function _extends() {
|
||
module.exports = _extends = Object.assign || function (target) {
|
||
for (var i = 1; i < arguments.length; i++) {
|
||
var source = arguments[i];
|
||
|
||
for (var key in source) {
|
||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||
target[key] = source[key];
|
||
}
|
||
}
|
||
}
|
||
|
||
return target;
|
||
};
|
||
|
||
return _extends.apply(this, arguments);
|
||
}
|
||
|
||
module.exports = _extends;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 137:
|
||
/***/ (function(module, exports) {
|
||
|
||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||
if (source == null) return {};
|
||
var target = {};
|
||
var sourceKeys = Object.keys(source);
|
||
var key, i;
|
||
|
||
for (i = 0; i < sourceKeys.length; i++) {
|
||
key = sourceKeys[i];
|
||
if (excluded.indexOf(key) >= 0) continue;
|
||
target[key] = source[key];
|
||
}
|
||
|
||
return target;
|
||
}
|
||
|
||
module.exports = _objectWithoutPropertiesLoose;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 138:
|
||
/***/ (function(module, exports) {
|
||
|
||
function _inheritsLoose(subClass, superClass) {
|
||
subClass.prototype = Object.create(superClass.prototype);
|
||
subClass.prototype.constructor = subClass;
|
||
subClass.__proto__ = superClass;
|
||
}
|
||
|
||
module.exports = _inheritsLoose;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 139:
|
||
/***/ (function(module, exports) {
|
||
|
||
function _assertThisInitialized(self) {
|
||
if (self === void 0) {
|
||
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
||
}
|
||
|
||
return self;
|
||
}
|
||
|
||
module.exports = _assertThisInitialized;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 14:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _getPrototypeOf; });
|
||
function _getPrototypeOf(o) {
|
||
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
||
return o.__proto__ || Object.getPrototypeOf(o);
|
||
};
|
||
return _getPrototypeOf(o);
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 140:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.3.2 by @mathias */
|
||
;(function(root) {
|
||
|
||
/** Detect free variables */
|
||
var freeExports = true && exports &&
|
||
!exports.nodeType && exports;
|
||
var freeModule = true && module &&
|
||
!module.nodeType && module;
|
||
var freeGlobal = typeof global == 'object' && global;
|
||
if (
|
||
freeGlobal.global === freeGlobal ||
|
||
freeGlobal.window === freeGlobal ||
|
||
freeGlobal.self === freeGlobal
|
||
) {
|
||
root = freeGlobal;
|
||
}
|
||
|
||
/**
|
||
* The `punycode` object.
|
||
* @name punycode
|
||
* @type Object
|
||
*/
|
||
var punycode,
|
||
|
||
/** Highest positive signed 32-bit float value */
|
||
maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
|
||
|
||
/** Bootstring parameters */
|
||
base = 36,
|
||
tMin = 1,
|
||
tMax = 26,
|
||
skew = 38,
|
||
damp = 700,
|
||
initialBias = 72,
|
||
initialN = 128, // 0x80
|
||
delimiter = '-', // '\x2D'
|
||
|
||
/** Regular expressions */
|
||
regexPunycode = /^xn--/,
|
||
regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
|
||
regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
|
||
|
||
/** Error messages */
|
||
errors = {
|
||
'overflow': 'Overflow: input needs wider integers to process',
|
||
'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
|
||
'invalid-input': 'Invalid input'
|
||
},
|
||
|
||
/** Convenience shortcuts */
|
||
baseMinusTMin = base - tMin,
|
||
floor = Math.floor,
|
||
stringFromCharCode = String.fromCharCode,
|
||
|
||
/** Temporary variable */
|
||
key;
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* A generic error utility function.
|
||
* @private
|
||
* @param {String} type The error type.
|
||
* @returns {Error} Throws a `RangeError` with the applicable error message.
|
||
*/
|
||
function error(type) {
|
||
throw RangeError(errors[type]);
|
||
}
|
||
|
||
/**
|
||
* A generic `Array#map` utility function.
|
||
* @private
|
||
* @param {Array} array The array to iterate over.
|
||
* @param {Function} callback The function that gets called for every array
|
||
* item.
|
||
* @returns {Array} A new array of values returned by the callback function.
|
||
*/
|
||
function map(array, fn) {
|
||
var length = array.length;
|
||
var result = [];
|
||
while (length--) {
|
||
result[length] = fn(array[length]);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* A simple `Array#map`-like wrapper to work with domain name strings or email
|
||
* addresses.
|
||
* @private
|
||
* @param {String} domain The domain name or email address.
|
||
* @param {Function} callback The function that gets called for every
|
||
* character.
|
||
* @returns {Array} A new string of characters returned by the callback
|
||
* function.
|
||
*/
|
||
function mapDomain(string, fn) {
|
||
var parts = string.split('@');
|
||
var result = '';
|
||
if (parts.length > 1) {
|
||
// In email addresses, only the domain name should be punycoded. Leave
|
||
// the local part (i.e. everything up to `@`) intact.
|
||
result = parts[0] + '@';
|
||
string = parts[1];
|
||
}
|
||
// Avoid `split(regex)` for IE8 compatibility. See #17.
|
||
string = string.replace(regexSeparators, '\x2E');
|
||
var labels = string.split('.');
|
||
var encoded = map(labels, fn).join('.');
|
||
return result + encoded;
|
||
}
|
||
|
||
/**
|
||
* Creates an array containing the numeric code points of each Unicode
|
||
* character in the string. While JavaScript uses UCS-2 internally,
|
||
* this function will convert a pair of surrogate halves (each of which
|
||
* UCS-2 exposes as separate characters) into a single code point,
|
||
* matching UTF-16.
|
||
* @see `punycode.ucs2.encode`
|
||
* @see <https://mathiasbynens.be/notes/javascript-encoding>
|
||
* @memberOf punycode.ucs2
|
||
* @name decode
|
||
* @param {String} string The Unicode input string (UCS-2).
|
||
* @returns {Array} The new array of code points.
|
||
*/
|
||
function ucs2decode(string) {
|
||
var output = [],
|
||
counter = 0,
|
||
length = string.length,
|
||
value,
|
||
extra;
|
||
while (counter < length) {
|
||
value = string.charCodeAt(counter++);
|
||
if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
|
||
// high surrogate, and there is a next character
|
||
extra = string.charCodeAt(counter++);
|
||
if ((extra & 0xFC00) == 0xDC00) { // low surrogate
|
||
output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
|
||
} else {
|
||
// unmatched surrogate; only append this code unit, in case the next
|
||
// code unit is the high surrogate of a surrogate pair
|
||
output.push(value);
|
||
counter--;
|
||
}
|
||
} else {
|
||
output.push(value);
|
||
}
|
||
}
|
||
return output;
|
||
}
|
||
|
||
/**
|
||
* Creates a string based on an array of numeric code points.
|
||
* @see `punycode.ucs2.decode`
|
||
* @memberOf punycode.ucs2
|
||
* @name encode
|
||
* @param {Array} codePoints The array of numeric code points.
|
||
* @returns {String} The new Unicode string (UCS-2).
|
||
*/
|
||
function ucs2encode(array) {
|
||
return map(array, function(value) {
|
||
var output = '';
|
||
if (value > 0xFFFF) {
|
||
value -= 0x10000;
|
||
output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
|
||
value = 0xDC00 | value & 0x3FF;
|
||
}
|
||
output += stringFromCharCode(value);
|
||
return output;
|
||
}).join('');
|
||
}
|
||
|
||
/**
|
||
* Converts a basic code point into a digit/integer.
|
||
* @see `digitToBasic()`
|
||
* @private
|
||
* @param {Number} codePoint The basic numeric code point value.
|
||
* @returns {Number} The numeric value of a basic code point (for use in
|
||
* representing integers) in the range `0` to `base - 1`, or `base` if
|
||
* the code point does not represent a value.
|
||
*/
|
||
function basicToDigit(codePoint) {
|
||
if (codePoint - 48 < 10) {
|
||
return codePoint - 22;
|
||
}
|
||
if (codePoint - 65 < 26) {
|
||
return codePoint - 65;
|
||
}
|
||
if (codePoint - 97 < 26) {
|
||
return codePoint - 97;
|
||
}
|
||
return base;
|
||
}
|
||
|
||
/**
|
||
* Converts a digit/integer into a basic code point.
|
||
* @see `basicToDigit()`
|
||
* @private
|
||
* @param {Number} digit The numeric value of a basic code point.
|
||
* @returns {Number} The basic code point whose value (when used for
|
||
* representing integers) is `digit`, which needs to be in the range
|
||
* `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
|
||
* used; else, the lowercase form is used. The behavior is undefined
|
||
* if `flag` is non-zero and `digit` has no uppercase form.
|
||
*/
|
||
function digitToBasic(digit, flag) {
|
||
// 0..25 map to ASCII a..z or A..Z
|
||
// 26..35 map to ASCII 0..9
|
||
return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
|
||
}
|
||
|
||
/**
|
||
* Bias adaptation function as per section 3.4 of RFC 3492.
|
||
* http://tools.ietf.org/html/rfc3492#section-3.4
|
||
* @private
|
||
*/
|
||
function adapt(delta, numPoints, firstTime) {
|
||
var k = 0;
|
||
delta = firstTime ? floor(delta / damp) : delta >> 1;
|
||
delta += floor(delta / numPoints);
|
||
for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
|
||
delta = floor(delta / baseMinusTMin);
|
||
}
|
||
return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
|
||
}
|
||
|
||
/**
|
||
* Converts a Punycode string of ASCII-only symbols to a string of Unicode
|
||
* symbols.
|
||
* @memberOf punycode
|
||
* @param {String} input The Punycode string of ASCII-only symbols.
|
||
* @returns {String} The resulting string of Unicode symbols.
|
||
*/
|
||
function decode(input) {
|
||
// Don't use UCS-2
|
||
var output = [],
|
||
inputLength = input.length,
|
||
out,
|
||
i = 0,
|
||
n = initialN,
|
||
bias = initialBias,
|
||
basic,
|
||
j,
|
||
index,
|
||
oldi,
|
||
w,
|
||
k,
|
||
digit,
|
||
t,
|
||
/** Cached calculation results */
|
||
baseMinusT;
|
||
|
||
// Handle the basic code points: let `basic` be the number of input code
|
||
// points before the last delimiter, or `0` if there is none, then copy
|
||
// the first basic code points to the output.
|
||
|
||
basic = input.lastIndexOf(delimiter);
|
||
if (basic < 0) {
|
||
basic = 0;
|
||
}
|
||
|
||
for (j = 0; j < basic; ++j) {
|
||
// if it's not a basic code point
|
||
if (input.charCodeAt(j) >= 0x80) {
|
||
error('not-basic');
|
||
}
|
||
output.push(input.charCodeAt(j));
|
||
}
|
||
|
||
// Main decoding loop: start just after the last delimiter if any basic code
|
||
// points were copied; start at the beginning otherwise.
|
||
|
||
for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
|
||
|
||
// `index` is the index of the next character to be consumed.
|
||
// Decode a generalized variable-length integer into `delta`,
|
||
// which gets added to `i`. The overflow checking is easier
|
||
// if we increase `i` as we go, then subtract off its starting
|
||
// value at the end to obtain `delta`.
|
||
for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
|
||
|
||
if (index >= inputLength) {
|
||
error('invalid-input');
|
||
}
|
||
|
||
digit = basicToDigit(input.charCodeAt(index++));
|
||
|
||
if (digit >= base || digit > floor((maxInt - i) / w)) {
|
||
error('overflow');
|
||
}
|
||
|
||
i += digit * w;
|
||
t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
|
||
|
||
if (digit < t) {
|
||
break;
|
||
}
|
||
|
||
baseMinusT = base - t;
|
||
if (w > floor(maxInt / baseMinusT)) {
|
||
error('overflow');
|
||
}
|
||
|
||
w *= baseMinusT;
|
||
|
||
}
|
||
|
||
out = output.length + 1;
|
||
bias = adapt(i - oldi, out, oldi == 0);
|
||
|
||
// `i` was supposed to wrap around from `out` to `0`,
|
||
// incrementing `n` each time, so we'll fix that now:
|
||
if (floor(i / out) > maxInt - n) {
|
||
error('overflow');
|
||
}
|
||
|
||
n += floor(i / out);
|
||
i %= out;
|
||
|
||
// Insert `n` at position `i` of the output
|
||
output.splice(i++, 0, n);
|
||
|
||
}
|
||
|
||
return ucs2encode(output);
|
||
}
|
||
|
||
/**
|
||
* Converts a string of Unicode symbols (e.g. a domain name label) to a
|
||
* Punycode string of ASCII-only symbols.
|
||
* @memberOf punycode
|
||
* @param {String} input The string of Unicode symbols.
|
||
* @returns {String} The resulting Punycode string of ASCII-only symbols.
|
||
*/
|
||
function encode(input) {
|
||
var n,
|
||
delta,
|
||
handledCPCount,
|
||
basicLength,
|
||
bias,
|
||
j,
|
||
m,
|
||
q,
|
||
k,
|
||
t,
|
||
currentValue,
|
||
output = [],
|
||
/** `inputLength` will hold the number of code points in `input`. */
|
||
inputLength,
|
||
/** Cached calculation results */
|
||
handledCPCountPlusOne,
|
||
baseMinusT,
|
||
qMinusT;
|
||
|
||
// Convert the input in UCS-2 to Unicode
|
||
input = ucs2decode(input);
|
||
|
||
// Cache the length
|
||
inputLength = input.length;
|
||
|
||
// Initialize the state
|
||
n = initialN;
|
||
delta = 0;
|
||
bias = initialBias;
|
||
|
||
// Handle the basic code points
|
||
for (j = 0; j < inputLength; ++j) {
|
||
currentValue = input[j];
|
||
if (currentValue < 0x80) {
|
||
output.push(stringFromCharCode(currentValue));
|
||
}
|
||
}
|
||
|
||
handledCPCount = basicLength = output.length;
|
||
|
||
// `handledCPCount` is the number of code points that have been handled;
|
||
// `basicLength` is the number of basic code points.
|
||
|
||
// Finish the basic string - if it is not empty - with a delimiter
|
||
if (basicLength) {
|
||
output.push(delimiter);
|
||
}
|
||
|
||
// Main encoding loop:
|
||
while (handledCPCount < inputLength) {
|
||
|
||
// All non-basic code points < n have been handled already. Find the next
|
||
// larger one:
|
||
for (m = maxInt, j = 0; j < inputLength; ++j) {
|
||
currentValue = input[j];
|
||
if (currentValue >= n && currentValue < m) {
|
||
m = currentValue;
|
||
}
|
||
}
|
||
|
||
// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
|
||
// but guard against overflow
|
||
handledCPCountPlusOne = handledCPCount + 1;
|
||
if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
|
||
error('overflow');
|
||
}
|
||
|
||
delta += (m - n) * handledCPCountPlusOne;
|
||
n = m;
|
||
|
||
for (j = 0; j < inputLength; ++j) {
|
||
currentValue = input[j];
|
||
|
||
if (currentValue < n && ++delta > maxInt) {
|
||
error('overflow');
|
||
}
|
||
|
||
if (currentValue == n) {
|
||
// Represent delta as a generalized variable-length integer
|
||
for (q = delta, k = base; /* no condition */; k += base) {
|
||
t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
|
||
if (q < t) {
|
||
break;
|
||
}
|
||
qMinusT = q - t;
|
||
baseMinusT = base - t;
|
||
output.push(
|
||
stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
|
||
);
|
||
q = floor(qMinusT / baseMinusT);
|
||
}
|
||
|
||
output.push(stringFromCharCode(digitToBasic(q, 0)));
|
||
bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
|
||
delta = 0;
|
||
++handledCPCount;
|
||
}
|
||
}
|
||
|
||
++delta;
|
||
++n;
|
||
|
||
}
|
||
return output.join('');
|
||
}
|
||
|
||
/**
|
||
* Converts a Punycode string representing a domain name or an email address
|
||
* to Unicode. Only the Punycoded parts of the input will be converted, i.e.
|
||
* it doesn't matter if you call it on a string that has already been
|
||
* converted to Unicode.
|
||
* @memberOf punycode
|
||
* @param {String} input The Punycoded domain name or email address to
|
||
* convert to Unicode.
|
||
* @returns {String} The Unicode representation of the given Punycode
|
||
* string.
|
||
*/
|
||
function toUnicode(input) {
|
||
return mapDomain(input, function(string) {
|
||
return regexPunycode.test(string)
|
||
? decode(string.slice(4).toLowerCase())
|
||
: string;
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Converts a Unicode string representing a domain name or an email address to
|
||
* Punycode. Only the non-ASCII parts of the domain name will be converted,
|
||
* i.e. it doesn't matter if you call it with a domain that's already in
|
||
* ASCII.
|
||
* @memberOf punycode
|
||
* @param {String} input The domain name or email address to convert, as a
|
||
* Unicode string.
|
||
* @returns {String} The Punycode representation of the given domain name or
|
||
* email address.
|
||
*/
|
||
function toASCII(input) {
|
||
return mapDomain(input, function(string) {
|
||
return regexNonASCII.test(string)
|
||
? 'xn--' + encode(string)
|
||
: string;
|
||
});
|
||
}
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
/** Define the public API */
|
||
punycode = {
|
||
/**
|
||
* A string representing the current Punycode.js version number.
|
||
* @memberOf punycode
|
||
* @type String
|
||
*/
|
||
'version': '1.3.2',
|
||
/**
|
||
* An object of methods to convert from JavaScript's internal character
|
||
* representation (UCS-2) to Unicode code points, and back.
|
||
* @see <https://mathiasbynens.be/notes/javascript-encoding>
|
||
* @memberOf punycode
|
||
* @type Object
|
||
*/
|
||
'ucs2': {
|
||
'decode': ucs2decode,
|
||
'encode': ucs2encode
|
||
},
|
||
'decode': decode,
|
||
'encode': encode,
|
||
'toASCII': toASCII,
|
||
'toUnicode': toUnicode
|
||
};
|
||
|
||
/** Expose `punycode` */
|
||
// Some AMD build optimizers, like r.js, check for specific condition patterns
|
||
// like the following:
|
||
if (
|
||
true
|
||
) {
|
||
!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
|
||
return punycode;
|
||
}).call(exports, __webpack_require__, exports, module),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else {}
|
||
|
||
}(this));
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(141)(module), __webpack_require__(67)))
|
||
|
||
/***/ }),
|
||
|
||
/***/ 141:
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function(module) {
|
||
if (!module.webpackPolyfill) {
|
||
module.deprecate = function() {};
|
||
module.paths = [];
|
||
// module.parent = undefined by default
|
||
if (!module.children) module.children = [];
|
||
Object.defineProperty(module, "loaded", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return module.l;
|
||
}
|
||
});
|
||
Object.defineProperty(module, "id", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return module.i;
|
||
}
|
||
});
|
||
module.webpackPolyfill = 1;
|
||
}
|
||
return module;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 142:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
module.exports = {
|
||
isString: function(arg) {
|
||
return typeof(arg) === 'string';
|
||
},
|
||
isObject: function(arg) {
|
||
return typeof(arg) === 'object' && arg !== null;
|
||
},
|
||
isNull: function(arg) {
|
||
return arg === null;
|
||
},
|
||
isNullOrUndefined: function(arg) {
|
||
return arg == null;
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 143:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
exports.decode = exports.parse = __webpack_require__(144);
|
||
exports.encode = exports.stringify = __webpack_require__(145);
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 144:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
// Copyright Joyent, Inc. and other Node contributors.
|
||
//
|
||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||
// copy of this software and associated documentation files (the
|
||
// "Software"), to deal in the Software without restriction, including
|
||
// without limitation the rights to use, copy, modify, merge, publish,
|
||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||
// persons to whom the Software is furnished to do so, subject to the
|
||
// following conditions:
|
||
//
|
||
// The above copyright notice and this permission notice shall be included
|
||
// in all copies or substantial portions of the Software.
|
||
//
|
||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
||
|
||
|
||
// If obj.hasOwnProperty has been overridden, then calling
|
||
// obj.hasOwnProperty(prop) will break.
|
||
// See: https://github.com/joyent/node/issues/1707
|
||
function hasOwnProperty(obj, prop) {
|
||
return Object.prototype.hasOwnProperty.call(obj, prop);
|
||
}
|
||
|
||
module.exports = function(qs, sep, eq, options) {
|
||
sep = sep || '&';
|
||
eq = eq || '=';
|
||
var obj = {};
|
||
|
||
if (typeof qs !== 'string' || qs.length === 0) {
|
||
return obj;
|
||
}
|
||
|
||
var regexp = /\+/g;
|
||
qs = qs.split(sep);
|
||
|
||
var maxKeys = 1000;
|
||
if (options && typeof options.maxKeys === 'number') {
|
||
maxKeys = options.maxKeys;
|
||
}
|
||
|
||
var len = qs.length;
|
||
// maxKeys <= 0 means that we should not limit keys count
|
||
if (maxKeys > 0 && len > maxKeys) {
|
||
len = maxKeys;
|
||
}
|
||
|
||
for (var i = 0; i < len; ++i) {
|
||
var x = qs[i].replace(regexp, '%20'),
|
||
idx = x.indexOf(eq),
|
||
kstr, vstr, k, v;
|
||
|
||
if (idx >= 0) {
|
||
kstr = x.substr(0, idx);
|
||
vstr = x.substr(idx + 1);
|
||
} else {
|
||
kstr = x;
|
||
vstr = '';
|
||
}
|
||
|
||
k = decodeURIComponent(kstr);
|
||
v = decodeURIComponent(vstr);
|
||
|
||
if (!hasOwnProperty(obj, k)) {
|
||
obj[k] = v;
|
||
} else if (isArray(obj[k])) {
|
||
obj[k].push(v);
|
||
} else {
|
||
obj[k] = [obj[k], v];
|
||
}
|
||
}
|
||
|
||
return obj;
|
||
};
|
||
|
||
var isArray = Array.isArray || function (xs) {
|
||
return Object.prototype.toString.call(xs) === '[object Array]';
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 145:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
// Copyright Joyent, Inc. and other Node contributors.
|
||
//
|
||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||
// copy of this software and associated documentation files (the
|
||
// "Software"), to deal in the Software without restriction, including
|
||
// without limitation the rights to use, copy, modify, merge, publish,
|
||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||
// persons to whom the Software is furnished to do so, subject to the
|
||
// following conditions:
|
||
//
|
||
// The above copyright notice and this permission notice shall be included
|
||
// in all copies or substantial portions of the Software.
|
||
//
|
||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
||
|
||
|
||
var stringifyPrimitive = function(v) {
|
||
switch (typeof v) {
|
||
case 'string':
|
||
return v;
|
||
|
||
case 'boolean':
|
||
return v ? 'true' : 'false';
|
||
|
||
case 'number':
|
||
return isFinite(v) ? v : '';
|
||
|
||
default:
|
||
return '';
|
||
}
|
||
};
|
||
|
||
module.exports = function(obj, sep, eq, name) {
|
||
sep = sep || '&';
|
||
eq = eq || '=';
|
||
if (obj === null) {
|
||
obj = undefined;
|
||
}
|
||
|
||
if (typeof obj === 'object') {
|
||
return map(objectKeys(obj), function(k) {
|
||
var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
|
||
if (isArray(obj[k])) {
|
||
return map(obj[k], function(v) {
|
||
return ks + encodeURIComponent(stringifyPrimitive(v));
|
||
}).join(sep);
|
||
} else {
|
||
return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
|
||
}
|
||
}).join(sep);
|
||
|
||
}
|
||
|
||
if (!name) return '';
|
||
return encodeURIComponent(stringifyPrimitive(name)) + eq +
|
||
encodeURIComponent(stringifyPrimitive(obj));
|
||
};
|
||
|
||
var isArray = Array.isArray || function (xs) {
|
||
return Object.prototype.toString.call(xs) === '[object Array]';
|
||
};
|
||
|
||
function map (xs, f) {
|
||
if (xs.map) return xs.map(f);
|
||
var res = [];
|
||
for (var i = 0; i < xs.length; i++) {
|
||
res.push(f(xs[i], i));
|
||
}
|
||
return res;
|
||
}
|
||
|
||
var objectKeys = Object.keys || function (obj) {
|
||
var res = [];
|
||
for (var key in obj) {
|
||
if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
|
||
}
|
||
return res;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 15:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js
|
||
function _setPrototypeOf(o, p) {
|
||
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
||
o.__proto__ = p;
|
||
return o;
|
||
};
|
||
|
||
return _setPrototypeOf(o, p);
|
||
}
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/inherits.js
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _inherits; });
|
||
|
||
function _inherits(subClass, superClass) {
|
||
if (typeof superClass !== "function" && superClass !== null) {
|
||
throw new TypeError("Super expression must either be null or a function");
|
||
}
|
||
|
||
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
||
constructor: {
|
||
value: subClass,
|
||
writable: true,
|
||
configurable: true
|
||
}
|
||
});
|
||
if (superClass) _setPrototypeOf(subClass, superClass);
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 158:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["tokenList"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 16:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
|
||
Copyright (c) 2017 Jed Watson.
|
||
Licensed under the MIT License (MIT), see
|
||
http://jedwatson.github.io/classnames
|
||
*/
|
||
/* global define */
|
||
|
||
(function () {
|
||
'use strict';
|
||
|
||
var hasOwn = {}.hasOwnProperty;
|
||
|
||
function classNames () {
|
||
var classes = [];
|
||
|
||
for (var i = 0; i < arguments.length; i++) {
|
||
var arg = arguments[i];
|
||
if (!arg) continue;
|
||
|
||
var argType = typeof arg;
|
||
|
||
if (argType === 'string' || argType === 'number') {
|
||
classes.push(arg);
|
||
} else if (Array.isArray(arg) && arg.length) {
|
||
var inner = classNames.apply(null, arg);
|
||
if (inner) {
|
||
classes.push(inner);
|
||
}
|
||
} else if (argType === 'object') {
|
||
for (var key in arg) {
|
||
if (hasOwn.call(arg, key) && arg[key]) {
|
||
classes.push(key);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return classes.join(' ');
|
||
}
|
||
|
||
if ( true && module.exports) {
|
||
classNames.default = classNames;
|
||
module.exports = classNames;
|
||
} else if (true) {
|
||
// register as 'classnames', consistent with npm package name
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
|
||
return classNames;
|
||
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else {}
|
||
}());
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 17:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js
|
||
function _arrayWithoutHoles(arr) {
|
||
if (Array.isArray(arr)) {
|
||
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
|
||
arr2[i] = arr[i];
|
||
}
|
||
|
||
return arr2;
|
||
}
|
||
}
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js
|
||
var iterableToArray = __webpack_require__(30);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
|
||
function _nonIterableSpread() {
|
||
throw new TypeError("Invalid attempt to spread non-iterable instance");
|
||
}
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _toConsumableArray; });
|
||
|
||
|
||
|
||
function _toConsumableArray(arr) {
|
||
return _arrayWithoutHoles(arr) || Object(iterableToArray["a" /* default */])(arr) || _nonIterableSpread();
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 18:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; });
|
||
function _extends() {
|
||
_extends = Object.assign || function (target) {
|
||
for (var i = 1; i < arguments.length; i++) {
|
||
var source = arguments[i];
|
||
|
||
for (var key in source) {
|
||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||
target[key] = source[key];
|
||
}
|
||
}
|
||
}
|
||
|
||
return target;
|
||
};
|
||
|
||
return _extends.apply(this, arguments);
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 19:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["keycodes"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["lodash"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 20:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__(48);
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 21:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js
|
||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||
if (source == null) return {};
|
||
var target = {};
|
||
var sourceKeys = Object.keys(source);
|
||
var key, i;
|
||
|
||
for (i = 0; i < sourceKeys.length; i++) {
|
||
key = sourceKeys[i];
|
||
if (excluded.indexOf(key) >= 0) continue;
|
||
target[key] = source[key];
|
||
}
|
||
|
||
return target;
|
||
}
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _objectWithoutProperties; });
|
||
|
||
function _objectWithoutProperties(source, excluded) {
|
||
if (source == null) return {};
|
||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||
var key, i;
|
||
|
||
if (Object.getOwnPropertySymbols) {
|
||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||
|
||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||
key = sourceSymbolKeys[i];
|
||
if (excluded.indexOf(key) >= 0) continue;
|
||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||
target[key] = source[key];
|
||
}
|
||
}
|
||
|
||
return target;
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 22:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["richText"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 226:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
/**
|
||
* Redux dispatch multiple actions
|
||
*/
|
||
|
||
function multi(_ref) {
|
||
var dispatch = _ref.dispatch;
|
||
|
||
return function (next) {
|
||
return function (action) {
|
||
return Array.isArray(action) ? action.filter(Boolean).map(dispatch) : next(action);
|
||
};
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Exports
|
||
*/
|
||
|
||
exports.default = multi;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 227:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*!
|
||
|
||
diff v3.5.0
|
||
|
||
Software License Agreement (BSD License)
|
||
|
||
Copyright (c) 2009-2015, Kevin Decker <kpdecker@gmail.com>
|
||
|
||
All rights reserved.
|
||
|
||
Redistribution and use of this software in source and binary forms, with or without modification,
|
||
are permitted provided that the following conditions are met:
|
||
|
||
* Redistributions of source code must retain the above
|
||
copyright notice, this list of conditions and the
|
||
following disclaimer.
|
||
|
||
* Redistributions in binary form must reproduce the above
|
||
copyright notice, this list of conditions and the
|
||
following disclaimer in the documentation and/or other
|
||
materials provided with the distribution.
|
||
|
||
* Neither the name of Kevin Decker nor the names of its
|
||
contributors may be used to endorse or promote products
|
||
derived from this software without specific prior
|
||
written permission.
|
||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
@license
|
||
*/
|
||
(function webpackUniversalModuleDefinition(root, factory) {
|
||
if(true)
|
||
module.exports = factory();
|
||
else {}
|
||
})(this, function() {
|
||
return /******/ (function(modules) { // webpackBootstrap
|
||
/******/ // The module cache
|
||
/******/ var installedModules = {};
|
||
|
||
/******/ // The require function
|
||
/******/ function __webpack_require__(moduleId) {
|
||
|
||
/******/ // Check if module is in cache
|
||
/******/ if(installedModules[moduleId])
|
||
/******/ return installedModules[moduleId].exports;
|
||
|
||
/******/ // Create a new module (and put it into the cache)
|
||
/******/ var module = installedModules[moduleId] = {
|
||
/******/ exports: {},
|
||
/******/ id: moduleId,
|
||
/******/ loaded: false
|
||
/******/ };
|
||
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
|
||
/******/ // Flag the module as loaded
|
||
/******/ module.loaded = true;
|
||
|
||
/******/ // Return the exports of the module
|
||
/******/ return module.exports;
|
||
/******/ }
|
||
|
||
|
||
/******/ // expose the modules object (__webpack_modules__)
|
||
/******/ __webpack_require__.m = modules;
|
||
|
||
/******/ // expose the module cache
|
||
/******/ __webpack_require__.c = installedModules;
|
||
|
||
/******/ // __webpack_public_path__
|
||
/******/ __webpack_require__.p = "";
|
||
|
||
/******/ // Load entry module and return exports
|
||
/******/ return __webpack_require__(0);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ([
|
||
/* 0 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports.canonicalize = exports.convertChangesToXML = exports.convertChangesToDMP = exports.merge = exports.parsePatch = exports.applyPatches = exports.applyPatch = exports.createPatch = exports.createTwoFilesPatch = exports.structuredPatch = exports.diffArrays = exports.diffJson = exports.diffCss = exports.diffSentences = exports.diffTrimmedLines = exports.diffLines = exports.diffWordsWithSpace = exports.diffWords = exports.diffChars = exports.Diff = undefined;
|
||
|
||
/*istanbul ignore end*/var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
|
||
|
||
/*istanbul ignore end*/var /*istanbul ignore start*/_character = __webpack_require__(2) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_word = __webpack_require__(3) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_sentence = __webpack_require__(6) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_css = __webpack_require__(7) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_json = __webpack_require__(8) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_array = __webpack_require__(9) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_apply = __webpack_require__(10) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_merge = __webpack_require__(13) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_create = __webpack_require__(14) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_dmp = __webpack_require__(16) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_xml = __webpack_require__(17) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/* See LICENSE file for terms of use */
|
||
|
||
/*
|
||
* Text diff implementation.
|
||
*
|
||
* This library supports the following APIS:
|
||
* JsDiff.diffChars: Character by character diff
|
||
* JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace
|
||
* JsDiff.diffLines: Line based diff
|
||
*
|
||
* JsDiff.diffCss: Diff targeted at CSS content
|
||
*
|
||
* These methods are based on the implementation proposed in
|
||
* "An O(ND) Difference Algorithm and its Variations" (Myers, 1986).
|
||
* http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927
|
||
*/
|
||
exports. /*istanbul ignore end*/Diff = _base2['default'];
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffChars = _character.diffChars;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffWords = _word.diffWords;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffWordsWithSpace = _word.diffWordsWithSpace;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffLines = _line.diffLines;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffTrimmedLines = _line.diffTrimmedLines;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffSentences = _sentence.diffSentences;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffCss = _css.diffCss;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffJson = _json.diffJson;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffArrays = _array.diffArrays;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/structuredPatch = _create.structuredPatch;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/createTwoFilesPatch = _create.createTwoFilesPatch;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/createPatch = _create.createPatch;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatch = _apply.applyPatch;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatches = _apply.applyPatches;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/parsePatch = _parse.parsePatch;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/merge = _merge.merge;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/convertChangesToDMP = _dmp.convertChangesToDMP;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/convertChangesToXML = _xml.convertChangesToXML;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/canonicalize = _json.canonicalize;
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJEaWZmIiwiZGlmZkNoYXJzIiwiZGlmZldvcmRzIiwiZGlmZldvcmRzV2l0aFNwYWNlIiwiZGlmZkxpbmVzIiwiZGlmZlRyaW1tZWRMaW5lcyIsImRpZmZTZW50ZW5jZXMiLCJkaWZmQ3NzIiwiZGlmZkpzb24iLCJkaWZmQXJyYXlzIiwic3RydWN0dXJlZFBhdGNoIiwiY3JlYXRlVHdvRmlsZXNQYXRjaCIsImNyZWF0ZVBhdGNoIiwiYXBwbHlQYXRjaCIsImFwcGx5UGF0Y2hlcyIsInBhcnNlUGF0Y2giLCJtZXJnZSIsImNvbnZlcnRDaGFuZ2VzVG9ETVAiLCJjb252ZXJ0Q2hhbmdlc1RvWE1MIiwiY2Fub25pY2FsaXplIl0sIm1hcHBpbmdzIjoiOzs7Ozt1QkFnQkE7Ozs7dUJBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7QUFqQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7O2dDQWtDRUEsSTt5REFFQUMsUzt5REFDQUMsUzt5REFDQUMsa0I7eURBQ0FDLFM7eURBQ0FDLGdCO3lEQUNBQyxhO3lEQUVBQyxPO3lEQUNBQyxRO3lEQUVBQyxVO3lEQUVBQyxlO3lEQUNBQyxtQjt5REFDQUMsVzt5REFDQUMsVTt5REFDQUMsWTt5REFDQUMsVTt5REFDQUMsSzt5REFDQUMsbUI7eURBQ0FDLG1CO3lEQUNBQyxZIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogU2VlIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMgb2YgdXNlICovXG5cbi8qXG4gKiBUZXh0IGRpZmYgaW1wbGVtZW50YXRpb24uXG4gKlxuICogVGhpcyBsaWJyYXJ5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgQVBJUzpcbiAqIEpzRGlmZi5kaWZmQ2hhcnM6IENoYXJhY3RlciBieSBjaGFyYWN0ZXIgZGlmZlxuICogSnNEaWZmLmRpZmZXb3JkczogV29yZCAoYXMgZGVmaW5lZCBieSBcXGIgcmVnZXgpIGRpZmYgd2hpY2ggaWdub3JlcyB3aGl0ZXNwYWNlXG4gKiBKc0RpZmYuZGlmZkxpbmVzOiBMaW5lIGJhc2VkIGRpZmZcbiAqXG4gKiBKc0RpZmYuZGlmZkNzczogRGlmZiB0YXJnZXRlZCBhdCBDU1MgY29udGVudFxuICpcbiAqIFRoZXNlIG1ldGhvZHMgYXJlIGJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBwcm9wb3NlZCBpblxuICogXCJBbiBPKE5EKSBEaWZmZXJlbmNlIEFsZ29yaXRobSBhbmQgaXRzIFZhcmlhdGlvbnNcIiAoTXllcnMsIDE5ODYpLlxuICogaHR0cDovL2NpdGVzZWVyeC5pc3QucHN1LmVkdS92aWV3ZG9jL3N1bW1hcnk/ZG9pPTEwLjEuMS40LjY5MjdcbiAqL1xuaW1wb3J0IERpZmYgZnJvbSAnLi9kaWZmL2Jhc2UnO1xuaW1wb3J0IHtkaWZmQ2hhcnN9IGZyb20gJy4vZGlmZi9jaGFyYWN0ZXInO1xuaW1wb3J0IHtkaWZmV29yZHMsIGRpZmZXb3Jkc1dpdGhTcGFjZX0gZnJvbSAnLi9kaWZmL3dvcmQnO1xuaW1wb3J0IHtkaWZmTGluZXMsIGRpZmZUcmltbWVkTGluZXN9IGZyb20gJy4vZGlmZi9saW5lJztcbmltcG9ydCB7ZGlmZlNlbnRlbmNlc30gZnJvbSAnLi9kaWZmL3NlbnRlbmNlJztcblxuaW1wb3J0IHtkaWZmQ3NzfSBmcm9tICcuL2RpZmYvY3NzJztcbmltcG9ydCB7ZGlmZkpzb24sIGNhbm9uaWNhbGl6ZX0gZnJvbSAnLi9kaWZmL2pzb24nO1xuXG5pbXBvcnQge2RpZmZBcnJheXN9IGZyb20gJy4vZGlmZi9hcnJheSc7XG5cbmltcG9ydCB7YXBwbHlQYXRjaCwgYXBwbHlQYXRjaGVzfSBmcm9tICcuL3BhdGNoL2FwcGx5JztcbmltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXRjaC9wYXJzZSc7XG5pbXBvcnQge21lcmdlfSBmcm9tICcuL3BhdGNoL21lcmdlJztcbmltcG9ydCB7c3RydWN0dXJlZFBhdGNoLCBjcmVhdGVUd29GaWxlc1BhdGNoLCBjcmVhdGVQYXRjaH0gZnJvbSAnLi9wYXRjaC9jcmVhdGUnO1xuXG5pbXBvcnQge2NvbnZlcnRDaGFuZ2VzVG9ETVB9IGZyb20gJy4vY29udmVydC9kbXAnO1xuaW1wb3J0IHtjb252ZXJ0Q2hhbmdlc1RvWE1MfSBmcm9tICcuL2NvbnZlcnQveG1sJztcblxuZXhwb3J0IHtcbiAgRGlmZixcblxuICBkaWZmQ2hhcnMsXG4gIGRpZmZXb3JkcyxcbiAgZGlmZldvcmRzV2l0aFNwYWNlLFxuICBkaWZmTGluZXMsXG4gIGRpZmZUcmltbWVkTGluZXMsXG4gIGRpZmZTZW50ZW5jZXMsXG5cbiAgZGlmZkNzcyxcbiAgZGlmZkpzb24sXG5cbiAgZGlmZkFycmF5cyxcblxuICBzdHJ1Y3R1cmVkUGF0Y2gsXG4gIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gsXG4gIGNyZWF0ZVBhdGNoLFxuICBhcHBseVBhdGNoLFxuICBhcHBseVBhdGNoZXMsXG4gIHBhcnNlUGF0Y2gsXG4gIG1lcmdlLFxuICBjb252ZXJ0Q2hhbmdlc1RvRE1QLFxuICBjb252ZXJ0Q2hhbmdlc1RvWE1MLFxuICBjYW5vbmljYWxpemVcbn07XG4iXX0=
|
||
|
||
|
||
/***/ }),
|
||
/* 1 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports['default'] = /*istanbul ignore end*/Diff;
|
||
function Diff() {}
|
||
|
||
Diff.prototype = {
|
||
/*istanbul ignore start*/ /*istanbul ignore end*/diff: function diff(oldString, newString) {
|
||
/*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||
|
||
var callback = options.callback;
|
||
if (typeof options === 'function') {
|
||
callback = options;
|
||
options = {};
|
||
}
|
||
this.options = options;
|
||
|
||
var self = this;
|
||
|
||
function done(value) {
|
||
if (callback) {
|
||
setTimeout(function () {
|
||
callback(undefined, value);
|
||
}, 0);
|
||
return true;
|
||
} else {
|
||
return value;
|
||
}
|
||
}
|
||
|
||
// Allow subclasses to massage the input prior to running
|
||
oldString = this.castInput(oldString);
|
||
newString = this.castInput(newString);
|
||
|
||
oldString = this.removeEmpty(this.tokenize(oldString));
|
||
newString = this.removeEmpty(this.tokenize(newString));
|
||
|
||
var newLen = newString.length,
|
||
oldLen = oldString.length;
|
||
var editLength = 1;
|
||
var maxEditLength = newLen + oldLen;
|
||
var bestPath = [{ newPos: -1, components: [] }];
|
||
|
||
// Seed editLength = 0, i.e. the content starts with the same values
|
||
var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
|
||
if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
|
||
// Identity per the equality and tokenizer
|
||
return done([{ value: this.join(newString), count: newString.length }]);
|
||
}
|
||
|
||
// Main worker method. checks all permutations of a given edit length for acceptance.
|
||
function execEditLength() {
|
||
for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
|
||
var basePath = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
|
||
var addPath = bestPath[diagonalPath - 1],
|
||
removePath = bestPath[diagonalPath + 1],
|
||
_oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
|
||
if (addPath) {
|
||
// No one else is going to attempt to use this value, clear it
|
||
bestPath[diagonalPath - 1] = undefined;
|
||
}
|
||
|
||
var canAdd = addPath && addPath.newPos + 1 < newLen,
|
||
canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
|
||
if (!canAdd && !canRemove) {
|
||
// If this path is a terminal then prune
|
||
bestPath[diagonalPath] = undefined;
|
||
continue;
|
||
}
|
||
|
||
// Select the diagonal that we want to branch from. We select the prior
|
||
// path whose position in the new string is the farthest from the origin
|
||
// and does not pass the bounds of the diff graph
|
||
if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
|
||
basePath = clonePath(removePath);
|
||
self.pushComponent(basePath.components, undefined, true);
|
||
} else {
|
||
basePath = addPath; // No need to clone, we've pulled it from the list
|
||
basePath.newPos++;
|
||
self.pushComponent(basePath.components, true, undefined);
|
||
}
|
||
|
||
_oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
|
||
|
||
// If we have hit the end of both strings, then we are done
|
||
if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
|
||
return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
|
||
} else {
|
||
// Otherwise track this path as a potential candidate and continue.
|
||
bestPath[diagonalPath] = basePath;
|
||
}
|
||
}
|
||
|
||
editLength++;
|
||
}
|
||
|
||
// Performs the length of edit iteration. Is a bit fugly as this has to support the
|
||
// sync and async mode which is never fun. Loops over execEditLength until a value
|
||
// is produced.
|
||
if (callback) {
|
||
(function exec() {
|
||
setTimeout(function () {
|
||
// This should not happen, but we want to be safe.
|
||
/* istanbul ignore next */
|
||
if (editLength > maxEditLength) {
|
||
return callback();
|
||
}
|
||
|
||
if (!execEditLength()) {
|
||
exec();
|
||
}
|
||
}, 0);
|
||
})();
|
||
} else {
|
||
while (editLength <= maxEditLength) {
|
||
var ret = execEditLength();
|
||
if (ret) {
|
||
return ret;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
/*istanbul ignore start*/ /*istanbul ignore end*/pushComponent: function pushComponent(components, added, removed) {
|
||
var last = components[components.length - 1];
|
||
if (last && last.added === added && last.removed === removed) {
|
||
// We need to clone here as the component clone operation is just
|
||
// as shallow array clone
|
||
components[components.length - 1] = { count: last.count + 1, added: added, removed: removed };
|
||
} else {
|
||
components.push({ count: 1, added: added, removed: removed });
|
||
}
|
||
},
|
||
/*istanbul ignore start*/ /*istanbul ignore end*/extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
|
||
var newLen = newString.length,
|
||
oldLen = oldString.length,
|
||
newPos = basePath.newPos,
|
||
oldPos = newPos - diagonalPath,
|
||
commonCount = 0;
|
||
while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
|
||
newPos++;
|
||
oldPos++;
|
||
commonCount++;
|
||
}
|
||
|
||
if (commonCount) {
|
||
basePath.components.push({ count: commonCount });
|
||
}
|
||
|
||
basePath.newPos = newPos;
|
||
return oldPos;
|
||
},
|
||
/*istanbul ignore start*/ /*istanbul ignore end*/equals: function equals(left, right) {
|
||
if (this.options.comparator) {
|
||
return this.options.comparator(left, right);
|
||
} else {
|
||
return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();
|
||
}
|
||
},
|
||
/*istanbul ignore start*/ /*istanbul ignore end*/removeEmpty: function removeEmpty(array) {
|
||
var ret = [];
|
||
for (var i = 0; i < array.length; i++) {
|
||
if (array[i]) {
|
||
ret.push(array[i]);
|
||
}
|
||
}
|
||
return ret;
|
||
},
|
||
/*istanbul ignore start*/ /*istanbul ignore end*/castInput: function castInput(value) {
|
||
return value;
|
||
},
|
||
/*istanbul ignore start*/ /*istanbul ignore end*/tokenize: function tokenize(value) {
|
||
return value.split('');
|
||
},
|
||
/*istanbul ignore start*/ /*istanbul ignore end*/join: function join(chars) {
|
||
return chars.join('');
|
||
}
|
||
};
|
||
|
||
function buildValues(diff, components, newString, oldString, useLongestToken) {
|
||
var componentPos = 0,
|
||
componentLen = components.length,
|
||
newPos = 0,
|
||
oldPos = 0;
|
||
|
||
for (; componentPos < componentLen; componentPos++) {
|
||
var component = components[componentPos];
|
||
if (!component.removed) {
|
||
if (!component.added && useLongestToken) {
|
||
var value = newString.slice(newPos, newPos + component.count);
|
||
value = value.map(function (value, i) {
|
||
var oldValue = oldString[oldPos + i];
|
||
return oldValue.length > value.length ? oldValue : value;
|
||
});
|
||
|
||
component.value = diff.join(value);
|
||
} else {
|
||
component.value = diff.join(newString.slice(newPos, newPos + component.count));
|
||
}
|
||
newPos += component.count;
|
||
|
||
// Common case
|
||
if (!component.added) {
|
||
oldPos += component.count;
|
||
}
|
||
} else {
|
||
component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
|
||
oldPos += component.count;
|
||
|
||
// Reverse add and remove so removes are output first to match common convention
|
||
// The diffing algorithm is tied to add then remove output and this is the simplest
|
||
// route to get the desired output with minimal overhead.
|
||
if (componentPos && components[componentPos - 1].added) {
|
||
var tmp = components[componentPos - 1];
|
||
components[componentPos - 1] = components[componentPos];
|
||
components[componentPos] = tmp;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Special case handle for when one terminal is ignored (i.e. whitespace).
|
||
// For this case we merge the terminal into the prior string and drop the change.
|
||
// This is only available for string mode.
|
||
var lastComponent = components[componentLen - 1];
|
||
if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
|
||
components[componentLen - 2].value += lastComponent.value;
|
||
components.pop();
|
||
}
|
||
|
||
return components;
|
||
}
|
||
|
||
function clonePath(path) {
|
||
return { newPos: path.newPos, components: path.components.slice(0) };
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsImJlc3RQYXRoIiwibmV3UG9zIiwiY29tcG9uZW50cyIsIm9sZFBvcyIsImV4dHJhY3RDb21tb24iLCJqb2luIiwiY291bnQiLCJleGVjRWRpdExlbmd0aCIsImRpYWdvbmFsUGF0aCIsImJhc2VQYXRoIiwiYWRkUGF0aCIsInJlbW92ZVBhdGgiLCJjYW5BZGQiLCJjYW5SZW1vdmUiLCJjbG9uZVBhdGgiLCJwdXNoQ29tcG9uZW50IiwiYnVpbGRWYWx1ZXMiLCJ1c2VMb25nZXN0VG9rZW4iLCJleGVjIiwicmV0IiwiYWRkZWQiLCJyZW1vdmVkIiwibGFzdCIsInB1c2giLCJjb21tb25Db3VudCIsImVxdWFscyIsImxlZnQiLCJyaWdodCIsImNvbXBhcmF0b3IiLCJpZ25vcmVDYXNlIiwidG9Mb3dlckNhc2UiLCJhcnJheSIsImkiLCJzcGxpdCIsImNoYXJzIiwiY29tcG9uZW50UG9zIiwiY29tcG9uZW50TGVuIiwiY29tcG9uZW50Iiwic2xpY2UiLCJtYXAiLCJvbGRWYWx1ZSIsInRtcCIsImxhc3RDb21wb25lbnQiLCJwb3AiLCJwYXRoIl0sIm1hcHBpbmdzIjoiOzs7NENBQXdCQSxJO0FBQVQsU0FBU0EsSUFBVCxHQUFnQixDQUFFOztBQUVqQ0EsS0FBS0MsU0FBTCxHQUFpQjtBQUFBLG1EQUNmQyxJQURlLGdCQUNWQyxTQURVLEVBQ0NDLFNBREQsRUFDMEI7QUFBQSx3REFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUN2QyxRQUFJQyxXQUFXRCxRQUFRQyxRQUF2QjtBQUNBLFFBQUksT0FBT0QsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNqQ0MsaUJBQVdELE9BQVg7QUFDQUEsZ0JBQVUsRUFBVjtBQUNEO0FBQ0QsU0FBS0EsT0FBTCxHQUFlQSxPQUFmOztBQUVBLFFBQUlFLE9BQU8sSUFBWDs7QUFFQSxhQUFTQyxJQUFULENBQWNDLEtBQWQsRUFBcUI7QUFDbkIsVUFBSUgsUUFBSixFQUFjO0FBQ1pJLG1CQUFXLFlBQVc7QUFBRUosbUJBQVNLLFNBQVQsRUFBb0JGLEtBQXBCO0FBQTZCLFNBQXJELEVBQXVELENBQXZEO0FBQ0EsZUFBTyxJQUFQO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsZUFBT0EsS0FBUDtBQUNEO0FBQ0Y7O0FBRUQ7QUFDQU4sZ0JBQVksS0FBS1MsU0FBTCxDQUFlVCxTQUFmLENBQVo7QUFDQUMsZ0JBQVksS0FBS1EsU0FBTCxDQUFlUixTQUFmLENBQVo7O0FBRUFELGdCQUFZLEtBQUtVLFdBQUwsQ0FBaUIsS0FBS0MsUUFBTCxDQUFjWCxTQUFkLENBQWpCLENBQVo7QUFDQUMsZ0JBQVksS0FBS1MsV0FBTCxDQUFpQixLQUFLQyxRQUFMLENBQWNWLFNBQWQsQ0FBakIsQ0FBWjs7QUFFQSxRQUFJVyxTQUFTWCxVQUFVWSxNQUF2QjtBQUFBLFFBQStCQyxTQUFTZCxVQUFVYSxNQUFsRDtBQUNBLFFBQUlFLGFBQWEsQ0FBakI7QUFDQSxRQUFJQyxnQkFBZ0JKLFNBQVNFLE1BQTdCO0FBQ0EsUUFBSUcsV0FBVyxDQUFDLEVBQUVDLFFBQVEsQ0FBQyxDQUFYLEVBQWNDLFlBQVksRUFBMUIsRUFBRCxDQUFmOztBQUVBO0FBQ0EsUUFBSUMsU0FBUyxLQUFLQyxhQUFMLENBQW1CSixTQUFTLENBQVQsQ0FBbkIsRUFBZ0NoQixTQUFoQyxFQUEyQ0QsU0FBM0MsRUFBc0QsQ0FBdEQsQ0FBYjtBQUNBLFFBQUlpQixTQUFTLENBQVQsRUFBWUMsTUFBWixHQUFxQixDQUFyQixJQUEwQk4sTUFBMUIsSUFBb0NRLFNBQVMsQ0FBVCxJQUFjTixNQUF0RCxFQUE4RDtBQUM1RDtBQUNBLGFBQU9ULEtBQUssQ0FBQyxFQUFDQyxPQUFPLEtBQUtnQixJQUFMLENBQVVyQixTQUFWLENBQVIsRUFBOEJzQixPQUFPdEIsVUFBVVksTUFBL0MsRUFBRCxDQUFMLENBQVA7QUFDRDs7QUFFRDtBQUNBLGFBQVNXLGNBQVQsR0FBMEI7QUFDeEIsV0FBSyxJQUFJQyxlQUFlLENBQUMsQ0FBRCxHQUFLVixVQUE3QixFQUF5Q1UsZ0JBQWdCVixVQUF6RCxFQUFxRVUsZ0JBQWdCLENBQXJGLEVBQXdGO0FBQ3RGLFlBQUlDLDBDQUFKO0FBQ0EsWUFBSUMsVUFBVVYsU0FBU1EsZUFBZSxDQUF4QixDQUFkO0FBQUEsWUFDSUcsYUFBYVgsU0FBU1EsZUFBZSxDQUF4QixDQURqQjtBQUFBLFlBRUlMLFVBQVMsQ0FBQ1EsYUFBYUEsV0FBV1YsTUFBeEIsR0FBaUMsQ0FBbEMsSUFBdUNPLFlBRnBEO0FBR0EsWUFBSUUsT0FBSixFQUFhO0FBQ1g7QUFDQVYsbUJBQVNRLGVBQWUsQ0FBeEIsSUFBNkJqQixTQUE3QjtBQUNEOztBQUVELFlBQUlxQixTQUFTRixXQUFXQSxRQUFRVCxNQUFSLEdBQWlCLENBQWpCLEdBQXFCTixNQUE3QztBQUFBLFlBQ0lrQixZQUFZRixjQUFjLEtBQUtSLE9BQW5CLElBQTZCQSxVQUFTTixNQUR0RDtBQUVBLFlBQUksQ0FBQ2UsTUFBRCxJQUFXLENBQUNDLFNBQWhCLEVBQTJCO0FBQ3pCO0FBQ0FiLG1CQUFTUSxZQUFULElBQXlCakIsU0FBekI7QUFDQTtBQUNEOztBQUVEO0FBQ0E7QUFDQTtBQUNBLFlBQUksQ0FBQ3FCLE1BQUQsSUFBWUMsYUFBYUgsUUFBUVQsTUFBUixHQUFpQlUsV0FBV1YsTUFBekQsRUFBa0U7QUFDaEVRLHFCQUFXSyxVQUFVSCxVQUFWLENBQVg7QUFDQXhCLGVBQUs0QixhQUFMLENBQW1CTixTQUFTUCxVQUE1QixFQUF3Q1gsU0FBeEMsRUFBbUQsSUFBbkQ7QUFDRCxTQUhELE1BR087QUFDTGtCLHFCQUFXQyxPQUFYLENBREssQ0FDaUI7QUFDdEJELG1CQUFTUixNQUFUO0FBQ0FkLGVBQUs0QixhQUFMLENBQW1CTixTQUFTUCxVQUE1QixFQUF3QyxJQUF4QyxFQUE4Q1gsU0FBOUM7QUFDRDs7QUFFRFksa0JBQVNoQixLQUFLaUIsYUFBTCxDQUFtQkssUUFBbkIsRUFBNkJ6QixTQUE3QixFQUF3Q0QsU0FBeEMsRUFBbUR5QixZQUFuRCxDQUFUOztBQUVBO0FBQ0EsWUFBSUMsU0FBU1IsTUFBVCxHQUFrQixDQUFsQixJQUF1Qk4sTUFBdkIsSUFBaUNRLFVBQVMsQ0FBVCxJQUFjTixNQUFuRCxFQUEyRDtBQUN6RCxpQkFBT1QsS0FBSzRCLFlBQVk3QixJQUFaLEVBQWtCc0IsU0FBU1AsVUFBM0IsRUFBdUNsQixTQUF2QyxFQUFrREQsU0FBbEQsRUFBNkRJLEtBQUs4QixlQUFsRSxDQUFMLENBQVA7QUFDRCxTQUZELE1BRU87QUFDTDtBQUNBakIsbUJBQVNRLFlBQVQsSUFBeUJDLFFBQXpCO0FBQ0Q7QUFDRjs7QUFFRFg7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxRQUFJWixRQUFKLEVBQWM7QUFDWCxnQkFBU2dDLElBQVQsR0FBZ0I7QUFDZjVCLG1CQUFXLFlBQVc7QUFDcEI7QUFDQTtBQUNBLGNBQUlRLGFBQWFDLGFBQWpCLEVBQWdDO0FBQzlCLG1CQUFPYixVQUFQO0FBQ0Q7O0FBRUQsY0FBSSxDQUFDcUIsZ0JBQUwsRUFBdUI7QUFDckJXO0FBQ0Q7QUFDRixTQVZELEVBVUcsQ0FWSDtBQVdELE9BWkEsR0FBRDtBQWFELEtBZEQsTUFjTztBQUNMLGFBQU9wQixjQUFjQyxhQUFyQixFQUFvQztBQUNsQyxZQUFJb0IsTUFBTVosZ0JBQVY7QUFDQSxZQUFJWSxHQUFKLEVBQVM7QUFDUCxpQkFBT0EsR0FBUDtBQUNEO0FBQ0Y7QUFDRjtBQUNGLEdBOUdjO0FBQUEsbURBZ0hmSixhQWhIZSx5QkFnSERiLFVBaEhDLEVBZ0hXa0IsS0FoSFgsRUFnSGtCQyxPQWhIbEIsRUFnSDJCO0FBQ3hDLFFBQUlDLE9BQU9wQixXQUFXQSxXQUFXTixNQUFYLEdBQW9CLENBQS9CLENBQVg7QUFDQSxRQUFJMEIsUUFBUUEsS0FBS0YsS0FBTCxLQUFlQSxLQUF2QixJQUFnQ0UsS0FBS0QsT0FBTCxLQUFpQkEsT0FBckQsRUFBOEQ7QUFDNUQ7QUFDQTtBQUNBbkIsaUJBQVdBLFdBQVdOLE1BQVgsR0FBb0IsQ0FBL0IsSUFBb0MsRUFBQ1UsT0FBT2dCLEtBQUtoQixLQUFMLEdBQWEsQ0FBckIsRUFBd0JjLE9BQU9BLEtBQS9CLEVBQXNDQyxTQUFTQSxPQUEvQyxFQUFwQztBQUNELEtBSkQsTUFJTztBQUNMbkIsaUJBQVdxQixJQUFYLENBQWdCLEVBQUNqQixPQUFPLENBQVIsRUFBV2MsT0FBT0EsS0FBbEIsRUFBeUJDLFNBQVNBLE9BQWxDLEVBQWhCO0FBQ0Q7QUFDRixHQXpIYztBQUFBLG1EQTBIZmpCLGFBMUhlLHlCQTBIREssUUExSEMsRUEwSFN6QixTQTFIVCxFQTBIb0JELFNBMUhwQixFQTBIK0J5QixZQTFIL0IsRUEwSDZDO0FBQzFELFFBQUliLFNBQVNYLFVBQVVZLE1BQXZCO0FBQUEsUUFDSUMsU0FBU2QsVUFBVWEsTUFEdkI7QUFBQSxRQUVJSyxTQUFTUSxTQUFTUixNQUZ0QjtBQUFBLFFBR0lFLFNBQVNGLFNBQVNPLFlBSHRCO0FBQUEsUUFLSWdCLGNBQWMsQ0FMbEI7QUFNQSxXQUFPdkIsU0FBUyxDQUFULEdBQWFOLE1BQWIsSUFBdUJRLFNBQVMsQ0FBVCxHQUFhTixNQUFwQyxJQUE4QyxLQUFLNEIsTUFBTCxDQUFZekMsVUFBVWlCLFNBQVMsQ0FBbkIsQ0FBWixFQUFtQ2xCLFVBQVVvQixTQUFTLENBQW5CLENBQW5DLENBQXJELEVBQWdIO0FBQzlHRjtBQUNBRTtBQUNBcUI7QUFDRDs7QUFFRCxRQUFJQSxXQUFKLEVBQWlCO0FBQ2ZmLGVBQVNQLFVBQVQsQ0FBb0JxQixJQUFwQixDQUF5QixFQUFDakIsT0FBT2tCLFdBQVIsRUFBekI7QUFDRDs7QUFFRGYsYUFBU1IsTUFBVCxHQUFrQkEsTUFBbEI7QUFDQSxXQUFPRSxNQUFQO0FBQ0QsR0E3SWM7QUFBQSxtREErSWZzQixNQS9JZSxrQkErSVJDLElBL0lRLEVBK0lGQyxLQS9JRSxFQStJSztBQUNsQixRQUFJLEtBQUsxQyxPQUFMLENBQWEyQyxVQUFqQixFQUE2QjtBQUMzQixhQUFPLEtBQUszQyxPQUFMLENBQWEyQyxVQUFiLENBQXdCRixJQUF4QixFQUE4QkMsS0FBOUIsQ0FBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU9ELFNBQVNDLEtBQVQsSUFDRCxLQUFLMUMsT0FBTCxDQUFhNEMsVUFBYixJQUEyQkgsS0FBS0ksV0FBTCxPQUF1QkgsTUFBTUcsV0FBTixFQUR4RDtBQUVEO0FBQ0YsR0F0SmM7QUFBQSxtREF1SmZyQyxXQXZKZSx1QkF1SkhzQyxLQXZKRyxFQXVKSTtBQUNqQixRQUFJWixNQUFNLEVBQVY7QUFDQSxTQUFLLElBQUlhLElBQUksQ0FBYixFQUFnQkEsSUFBSUQsTUFBTW5DLE1BQTFCLEVBQWtDb0MsR0FBbEMsRUFBdUM7QUFDckMsVUFBSUQsTUFBTUMsQ0FBTixDQUFKLEVBQWM7QUFDWmIsWUFBSUksSUFBSixDQUFTUSxNQUFNQyxDQUFOLENBQVQ7QUFDRDtBQUNGO0FBQ0QsV0FBT2IsR0FBUDtBQUNELEdBL0pjO0FBQUEsbURBZ0tmM0IsU0FoS2UscUJBZ0tMSCxLQWhLSyxFQWdLRTtBQUNmLFdBQU9BLEtBQVA7QUFDRCxHQWxLYztBQUFBLG1EQW1LZkssUUFuS2Usb0JBbUtOTCxLQW5LTSxFQW1LQztBQUNkLFdBQU9BLE1BQU00QyxLQUFOLENBQVksRUFBWixDQUFQO0FBQ0QsR0FyS2M7QUFBQSxtREFzS2Y1QixJQXRLZSxnQkFzS1Y2QixLQXRLVSxFQXNLSDtBQUNWLFdBQU9BLE1BQU03QixJQUFOLENBQVcsRUFBWCxDQUFQO0FBQ0Q7QUF4S2MsQ0FBakI7O0FBMktBLFNBQVNXLFdBQVQsQ0FBcUJsQyxJQUFyQixFQUEyQm9CLFVBQTNCLEVBQXVDbEIsU0FBdkMsRUFBa0RELFNBQWxELEVBQTZEa0MsZUFBN0QsRUFBOEU7QUFDNUUsTUFBSWtCLGVBQWUsQ0FBbkI7QUFBQSxNQUNJQyxlQUFlbEMsV0FBV04sTUFEOUI7QUFBQSxNQUVJSyxTQUFTLENBRmI7QUFBQSxNQUdJRSxTQUFTLENBSGI7O0FBS0EsU0FBT2dDLGVBQWVDLFlBQXRCLEVBQW9DRCxjQUFwQyxFQUFvRDtBQUNsRCxRQUFJRSxZQUFZbkMsV0FBV2lDLFlBQVgsQ0FBaEI7QUFDQSxRQUFJLENBQUNFLFVBQVVoQixPQUFmLEVBQXdCO0FBQ3RCLFVBQUksQ0FBQ2dCLFVBQVVqQixLQUFYLElBQW9CSCxlQUF4QixFQUF5QztBQUN2QyxZQUFJNUIsUUFBUUwsVUFBVXNELEtBQVYsQ0FBZ0JyQyxNQUFoQixFQUF3QkEsU0FBU29DLFVBQVUvQixLQUEzQyxDQUFaO0FBQ0FqQixnQkFBUUEsTUFBTWtELEdBQU4sQ0FBVSxVQUFTbEQsS0FBVCxFQUFnQjJDLENBQWhCLEVBQW1CO0FBQ25DLGNBQUlRLFdBQVd6RCxVQUFVb0IsU0FBUzZCLENBQW5CLENBQWY7QUFDQSxpQkFBT1EsU0FBUzVDLE1BQVQsR0FBa0JQLE1BQU1PLE1BQXhCLEdBQWlDNEMsUUFBakMsR0FBNENuRCxLQUFuRDtBQUNELFNBSE8sQ0FBUjs7QUFLQWdELGtCQUFVaEQsS0FBVixHQUFrQlAsS0FBS3VCLElBQUwsQ0FBVWhCLEtBQVYsQ0FBbEI7QUFDRCxPQVJELE1BUU87QUFDTGdELGtCQUFVaEQsS0FBVixHQUFrQlAsS0FBS3VCLElBQUwsQ0FBVXJCLFVBQVVzRCxLQUFWLENBQWdCckMsTUFBaEIsRUFBd0JBLFNBQVNvQyxVQUFVL0IsS0FBM0MsQ0FBVixDQUFsQjtBQUNEO0FBQ0RMLGdCQUFVb0MsVUFBVS9CLEtBQXBCOztBQUVBO0FBQ0EsVUFBSSxDQUFDK0IsVUFBVWpCLEtBQWYsRUFBc0I7QUFDcEJqQixrQkFBVWtDLFVBQVUvQixLQUFwQjtBQUNEO0FBQ0YsS0FsQkQsTUFrQk87QUFDTCtCLGdCQUFVaEQsS0FBVixHQUFrQlAsS0FBS3VCLElBQUwsQ0FBVXRCLFVBQVV1RCxLQUFWLENBQWdCbkMsTUFBaEIsRUFBd0JBLFNBQVNrQyxVQUFVL0IsS0FBM0MsQ0FBVixDQUFsQjtBQUNBSCxnQkFBVWtDLFVBQVUvQixLQUFwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFJNkIsZ0JBQWdCakMsV0FBV2lDLGVBQWUsQ0FBMUIsRUFBNkJmLEtBQWpELEVBQXdEO0FBQ3RELFlBQUlxQixNQUFNdkMsV0FBV2lDLGVBQWUsQ0FBMUIsQ0FBVjtBQUNBakMsbUJBQVdpQyxlQUFlLENBQTFCLElBQStCakMsV0FBV2lDLFlBQVgsQ0FBL0I7QUFDQWpDLG1CQUFXaUMsWUFBWCxJQUEyQk0sR0FBM0I7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsTUFBSUMsZ0JBQWdCeEMsV0FBV2tDLGVBQWUsQ0FBMUIsQ0FBcEI7QUFDQSxNQUFJQSxlQUFlLENBQWYsSUFDRyxPQUFPTSxjQUFjckQsS0FBckIsS0FBK0IsUUFEbEMsS0FFSXFELGNBQWN0QixLQUFkLElBQXVCc0IsY0FBY3JCLE9BRnpDLEtBR0d2QyxLQUFLMkMsTUFBTCxDQUFZLEVBQVosRUFBZ0JpQixjQUFjckQsS0FBOUIsQ0FIUCxFQUc2QztBQUMzQ2EsZUFBV2tDLGVBQWUsQ0FBMUIsRUFBNkIvQyxLQUE3QixJQUFzQ3FELGNBQWNyRCxLQUFwRDtBQUNBYSxlQUFXeUMsR0FBWDtBQUNEOztBQUVELFNBQU96QyxVQUFQO0FBQ0Q7O0FBRUQsU0FBU1ksU0FBVCxDQUFtQjhCLElBQW5CLEVBQXlCO0FBQ3ZCLFNBQU8sRUFBRTNDLFFBQVEyQyxLQUFLM0MsTUFBZixFQUF1QkMsWUFBWTBDLEtBQUsxQyxVQUFMLENBQWdCb0MsS0FBaEIsQ0FBc0IsQ0FBdEIsQ0FBbkMsRUFBUDtBQUNEIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaWZmKCkge31cblxuRGlmZi5wcm90b3R5cGUgPSB7XG4gIGRpZmYob2xkU3RyaW5nLCBuZXdTdHJpbmcsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBjYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBkb25lKHZhbHVlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2sodW5kZWZpbmVkLCB2YWx1ZSk7IH0sIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbGxvdyBzdWJjbGFzc2VzIHRvIG1hc3NhZ2UgdGhlIGlucHV0IHByaW9yIHRvIHJ1bm5pbmdcbiAgICBvbGRTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChvbGRTdHJpbmcpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG5cbiAgICBvbGRTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUob2xkU3RyaW5nKSk7XG4gICAgbmV3U3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG5ld1N0cmluZykpO1xuXG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGg7XG4gICAgbGV0IGVkaXRMZW5ndGggPSAxO1xuICAgIGxldCBtYXhFZGl0TGVuZ3RoID0gbmV3TGVuICsgb2xkTGVuO1xuICAgIGxldCBiZXN0UGF0aCA9IFt7IG5ld1BvczogLTEsIGNvbXBvbmVudHM6IFtdIH1dO1xuXG4gICAgLy8gU2VlZCBlZGl0TGVuZ3RoID0gMCwgaS5lLiB0aGUgY29udGVudCBzdGFydHMgd2l0aCB0aGUgc2FtZSB2YWx1ZXNcbiAgICBsZXQgb2xkUG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCk7XG4gICAgaWYgKGJlc3RQYXRoWzBdLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAvLyBJZGVudGl0eSBwZXIgdGhlIGVxdWFsaXR5IGFuZCB0b2tlbml6ZXJcbiAgICAgIHJldHVybiBkb25lKFt7dmFsdWU6IHRoaXMuam9pbihuZXdTdHJpbmcpLCBjb3VudDogbmV3U3RyaW5nLmxlbmd0aH1dKTtcbiAgICB9XG5cbiAgICAvLyBNYWluIHdvcmtlciBtZXRob2QuIGNoZWNrcyBhbGwgcGVybXV0YXRpb25zIG9mIGEgZ2l2ZW4gZWRpdCBsZW5ndGggZm9yIGFjY2VwdGFuY2UuXG4gICAgZnVuY3Rpb24gZXhlY0VkaXRMZW5ndGgoKSB7XG4gICAgICBmb3IgKGxldCBkaWFnb25hbFBhdGggPSAtMSAqIGVkaXRMZW5ndGg7IGRpYWdvbmFsUGF0aCA8PSBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggKz0gMikge1xuICAgICAgICBsZXQgYmFzZVBhdGg7XG4gICAgICAgIGxldCBhZGRQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0sXG4gICAgICAgICAgICByZW1vdmVQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoICsgMV0sXG4gICAgICAgICAgICBvbGRQb3MgPSAocmVtb3ZlUGF0aCA/IHJlbW92ZVBhdGgubmV3UG9zIDogMCkgLSBkaWFnb25hbFBhdGg7XG4gICAgICAgIGlmIChhZGRQYXRoKSB7XG4gICAgICAgICAgLy8gTm8gb25lIGVsc2UgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB1c2UgdGhpcyB2YWx1ZSwgY2xlYXIgaXRcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGggLSAxXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYW5BZGQgPSBhZGRQYXRoICYmIGFkZFBhdGgubmV3UG9zICsgMSA8IG5ld0xlbixcbiAgICAgICAgICAgIGNhblJlbW92ZSA9IHJlbW92ZVBhdGggJiYgMCA8PSBvbGRQb3MgJiYgb2xkUG9zIDwgb2xkTGVuO1xuICAgICAgICBpZiAoIWNhbkFkZCAmJiAhY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBwYXRoIGlzIGEgdGVybWluYWwgdGhlbiBwcnVuZVxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWxlY3QgdGhlIGRpYWdvbmFsIHRoYXQgd2Ugd2FudCB0byBicmFuY2ggZnJvbS4gV2Ugc2VsZWN0IHRoZSBwcmlvclxuICAgICAgICAvLyBwYXRoIHdob3NlIHBvc2l0aW9uIGluIHRoZSBuZXcgc3RyaW5nIGlzIHRoZSBmYXJ0aGVzdCBmcm9tIHRoZSBvcmlnaW5cbiAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuICAgICAgICBpZiAoIWNhbkFkZCB8fCAoY2FuUmVtb3ZlICYmIGFkZFBhdGgubmV3UG9zIDwgcmVtb3ZlUGF0aC5uZXdQb3MpKSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBjbG9uZVBhdGgocmVtb3ZlUGF0aCk7XG4gICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBhZGRQYXRoOyAgIC8vIE5vIG5lZWQgdG8gY2xvbmUsIHdlJ3ZlIHB1bGxlZCBpdCBmcm9tIHRoZSBsaXN0XG4gICAgICAgICAgYmFzZVBhdGgubmV3UG9zKys7XG4gICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHRydWUsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBvbGRQb3MgPSBzZWxmLmV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpO1xuXG4gICAgICAgIC8vIElmIHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgYm90aCBzdHJpbmdzLCB0aGVuIHdlIGFyZSBkb25lXG4gICAgICAgIGlmIChiYXNlUGF0aC5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgICAgIHJldHVybiBkb25lKGJ1aWxkVmFsdWVzKHNlbGYsIGJhc2VQYXRoLmNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBzZWxmLnVzZUxvbmdlc3RUb2tlbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSB0cmFjayB0aGlzIHBhdGggYXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlIGFuZCBjb250aW51ZS5cbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWRpdExlbmd0aCsrO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gc3luYyBhbmQgYXN5bmMgbW9kZSB3aGljaCBpcyBuZXZlciBmdW4uIExvb3BzIG92ZXIgZXhlY0VkaXRMZW5ndGggdW50aWwgYSB2YWx1ZVxuICAgIC8vIGlzIHByb2R1Y2VkLlxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIHdhbnQgdG8gYmUgc2FmZS5cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlmIChlZGl0TGVuZ3RoID4gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFleGVjRWRpdExlbmd0aCgpKSB7XG4gICAgICAgICAgICBleGVjKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICAgIH0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChlZGl0TGVuZ3RoIDw9IG1heEVkaXRMZW5ndGgpIHtcbiAgICAgICAgbGV0IHJldCA9IGV4ZWNFZGl0TGVuZ3RoKCk7XG4gICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHB1c2hDb21wb25lbnQoY29tcG9uZW50cywgYWRkZWQsIHJlbW92ZWQpIHtcbiAgICBsZXQgbGFzdCA9IGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXTtcbiAgICBpZiAobGFzdCAmJiBsYXN0LmFkZGVkID09PSBhZGRlZCAmJiBsYXN0LnJlbW92ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2xvbmUgaGVyZSBhcyB0aGUgY29tcG9uZW50IGNsb25lIG9wZXJhdGlvbiBpcyBqdXN0XG4gICAgICAvLyBhcyBzaGFsbG93IGFycmF5IGNsb25lXG4gICAgICBjb21wb25lbnRzW2NvbXBvbmVudHMubGVuZ3RoIC0gMV0gPSB7Y291bnQ6IGxhc3QuY291bnQgKyAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50cy5wdXNoKHtjb3VudDogMSwgYWRkZWQ6IGFkZGVkLCByZW1vdmVkOiByZW1vdmVkIH0pO1xuICAgIH1cbiAgfSxcbiAgZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCkge1xuICAgIGxldCBuZXdMZW4gPSBuZXdTdHJpbmcubGVuZ3RoLFxuICAgICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoLFxuICAgICAgICBuZXdQb3MgPSBiYXNlUGF0aC5uZXdQb3MsXG4gICAgICAgIG9sZFBvcyA9IG5ld1BvcyAtIGRpYWdvbmFsUGF0aCxcblxuICAgICAgICBjb21tb25Db3VudCA9IDA7XG4gICAgd2hpbGUgKG5ld1BvcyArIDEgPCBuZXdMZW4gJiYgb2xkUG9zICsgMSA8IG9sZExlbiAmJiB0aGlzLmVxdWFscyhuZXdTdHJpbmdbbmV3UG9zICsgMV0sIG9sZFN0cmluZ1tvbGRQb3MgKyAxXSkpIHtcbiAgICAgIG5ld1BvcysrO1xuICAgICAgb2xkUG9zKys7XG4gICAgICBjb21tb25Db3VudCsrO1xuICAgIH1cblxuICAgIGlmIChjb21tb25Db3VudCkge1xuICAgICAgYmFzZVBhdGguY29tcG9uZW50cy5wdXNoKHtjb3VudDogY29tbW9uQ291bnR9KTtcbiAgICB9XG5cbiAgICBiYXNlUGF0aC5uZXdQb3MgPSBuZXdQb3M7XG4gICAgcmV0dXJuIG9sZFBvcztcbiAgfSxcblxuICBlcXVhbHMobGVmdCwgcmlnaHQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29tcGFyYXRvcihsZWZ0LCByaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsZWZ0ID09PSByaWdodFxuICAgICAgICB8fCAodGhpcy5vcHRpb25zLmlnbm9yZUNhc2UgJiYgbGVmdC50b0xvd2VyQ2FzZSgpID09PSByaWdodC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZUVtcHR5KGFycmF5KSB7XG4gICAgbGV0IHJldCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJheVtpXSkge1xuICAgICAgICByZXQucHVzaChhcnJheVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG4gIGNhc3RJbnB1dCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgdG9rZW5pemUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJycpO1xuICB9LFxuICBqb2luKGNoYXJzKSB7XG4gICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBidWlsZFZhbHVlcyhkaWZmLCBjb21wb25lbnRzLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgdXNlTG9uZ2VzdFRva2VuKSB7XG4gIGxldCBjb21wb25lbnRQb3MgPSAwLFxuICAgICAgY29tcG9uZW50TGVuID0gY29tcG9uZW50cy5sZW5ndGgsXG4gICAgICBuZXdQb3MgPSAwLFxuICAgICAgb2xkUG9zID0gMDtcblxuICBmb3IgKDsgY29tcG9uZW50UG9zIDwgY29tcG9uZW50TGVuOyBjb21wb25lbnRQb3MrKykge1xuICAgIGxldCBjb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgaWYgKCFjb21wb25lbnQucmVtb3ZlZCkge1xuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQgJiYgdXNlTG9uZ2VzdFRva2VuKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKSB7XG4gICAgICAgICAgbGV0IG9sZFZhbHVlID0gb2xkU3RyaW5nW29sZFBvcyArIGldO1xuICAgICAgICAgIHJldHVybiBvbGRWYWx1ZS5sZW5ndGggPiB2YWx1ZS5sZW5ndGggPyBvbGRWYWx1ZSA6IHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4odmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgfVxuICAgICAgbmV3UG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gQ29tbW9uIGNhc2VcbiAgICAgIGlmICghY29tcG9uZW50LmFkZGVkKSB7XG4gICAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihvbGRTdHJpbmcuc2xpY2Uob2xkUG9zLCBvbGRQb3MgKyBjb21wb25lbnQuY291bnQpKTtcbiAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG5cbiAgICAgIC8vIFJldmVyc2UgYWRkIGFuZCByZW1vdmUgc28gcmVtb3ZlcyBhcmUgb3V0cHV0IGZpcnN0IHRvIG1hdGNoIGNvbW1vbiBjb252ZW50aW9uXG4gICAgICAvLyBUaGUgZGlmZmluZyBhbGdvcml0aG0gaXMgdGllZCB0byBhZGQgdGhlbiByZW1vdmUgb3V0cHV0IGFuZCB0aGlzIGlzIHRoZSBzaW1wbGVzdFxuICAgICAgLy8gcm91dGUgdG8gZ2V0IHRoZSBkZXNpcmVkIG91dHB1dCB3aXRoIG1pbmltYWwgb3ZlcmhlYWQuXG4gICAgICBpZiAoY29tcG9uZW50UG9zICYmIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0uYWRkZWQpIHtcbiAgICAgICAgbGV0IHRtcCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV07XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0gPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxlIGZvciB3aGVuIG9uZSB0ZXJtaW5hbCBpcyBpZ25vcmVkIChpLmUuIHdoaXRlc3BhY2UpLlxuICAvLyBGb3IgdGhpcyBjYXNlIHdlIG1lcmdlIHRoZSB0ZXJtaW5hbCBpbnRvIHRoZSBwcmlvciBzdHJpbmcgYW5kIGRyb3AgdGhlIGNoYW5nZS5cbiAgLy8gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3Igc3RyaW5nIG1vZGUuXG4gIGxldCBsYXN0Q29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAxXTtcbiAgaWYgKGNvbXBvbmVudExlbiA+IDFcbiAgICAgICYmIHR5cGVvZiBsYXN0Q29tcG9uZW50LnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgJiYgKGxhc3RDb21wb25lbnQuYWRkZWQgfHwgbGFzdENvbXBvbmVudC5yZW1vdmVkKVxuICAgICAgJiYgZGlmZi5lcXVhbHMoJycsIGxhc3RDb21wb25lbnQudmFsdWUpKSB7XG4gICAgY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAyXS52YWx1ZSArPSBsYXN0Q29tcG9uZW50LnZhbHVlO1xuICAgIGNvbXBvbmVudHMucG9wKCk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gY2xvbmVQYXRoKHBhdGgpIHtcbiAgcmV0dXJuIHsgbmV3UG9zOiBwYXRoLm5ld1BvcywgY29tcG9uZW50czogcGF0aC5jb21wb25lbnRzLnNsaWNlKDApIH07XG59XG4iXX0=
|
||
|
||
|
||
/***/ }),
|
||
/* 2 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports.characterDiff = undefined;
|
||
exports. /*istanbul ignore end*/diffChars = diffChars;
|
||
|
||
var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/*istanbul ignore end*/var characterDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/characterDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
|
||
function diffChars(oldStr, newStr, options) {
|
||
return characterDiff.diff(oldStr, newStr, options);
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2NoYXJhY3Rlci5qcyJdLCJuYW1lcyI6WyJkaWZmQ2hhcnMiLCJjaGFyYWN0ZXJEaWZmIiwib2xkU3RyIiwibmV3U3RyIiwib3B0aW9ucyIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Z0NBR2dCQSxTLEdBQUFBLFM7O0FBSGhCOzs7Ozs7dUJBRU8sSUFBTUMseUZBQWdCLHdFQUF0QjtBQUNBLFNBQVNELFNBQVQsQ0FBbUJFLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ0MsT0FBbkMsRUFBNEM7QUFBRSxTQUFPSCxjQUFjSSxJQUFkLENBQW1CSCxNQUFuQixFQUEyQkMsTUFBM0IsRUFBbUNDLE9BQW5DLENBQVA7QUFBcUQiLCJmaWxlIjoiY2hhcmFjdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZDaGFycyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykgeyByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTsgfVxuIl19
|
||
|
||
|
||
/***/ }),
|
||
/* 3 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports.wordDiff = undefined;
|
||
exports. /*istanbul ignore end*/diffWords = diffWords;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffWordsWithSpace = diffWordsWithSpace;
|
||
|
||
var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
|
||
|
||
/*istanbul ignore end*/var /*istanbul ignore start*/_params = __webpack_require__(4) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/*istanbul ignore end*/ // Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode
|
||
//
|
||
// Ranges and exceptions:
|
||
// Latin-1 Supplement, 0080–00FF
|
||
// - U+00D7 × Multiplication sign
|
||
// - U+00F7 ÷ Division sign
|
||
// Latin Extended-A, 0100–017F
|
||
// Latin Extended-B, 0180–024F
|
||
// IPA Extensions, 0250–02AF
|
||
// Spacing Modifier Letters, 02B0–02FF
|
||
// - U+02C7 ˇ ˇ Caron
|
||
// - U+02D8 ˘ ˘ Breve
|
||
// - U+02D9 ˙ ˙ Dot Above
|
||
// - U+02DA ˚ ˚ Ring Above
|
||
// - U+02DB ˛ ˛ Ogonek
|
||
// - U+02DC ˜ ˜ Small Tilde
|
||
// - U+02DD ˝ ˝ Double Acute Accent
|
||
// Latin Extended Additional, 1E00–1EFF
|
||
var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/;
|
||
|
||
var reWhitespace = /\S/;
|
||
|
||
var wordDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/wordDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
|
||
wordDiff.equals = function (left, right) {
|
||
if (this.options.ignoreCase) {
|
||
left = left.toLowerCase();
|
||
right = right.toLowerCase();
|
||
}
|
||
return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);
|
||
};
|
||
wordDiff.tokenize = function (value) {
|
||
var tokens = value.split(/(\s+|\b)/);
|
||
|
||
// Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.
|
||
for (var i = 0; i < tokens.length - 1; i++) {
|
||
// If we have an empty string in the next field and we have only word chars before and after, merge
|
||
if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {
|
||
tokens[i] += tokens[i + 2];
|
||
tokens.splice(i + 1, 2);
|
||
i--;
|
||
}
|
||
}
|
||
|
||
return tokens;
|
||
};
|
||
|
||
function diffWords(oldStr, newStr, options) {
|
||
options = /*istanbul ignore start*/(0, _params.generateOptions) /*istanbul ignore end*/(options, { ignoreWhitespace: true });
|
||
return wordDiff.diff(oldStr, newStr, options);
|
||
}
|
||
|
||
function diffWordsWithSpace(oldStr, newStr, options) {
|
||
return wordDiff.diff(oldStr, newStr, options);
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3dvcmQuanMiXSwibmFtZXMiOlsiZGlmZldvcmRzIiwiZGlmZldvcmRzV2l0aFNwYWNlIiwiZXh0ZW5kZWRXb3JkQ2hhcnMiLCJyZVdoaXRlc3BhY2UiLCJ3b3JkRGlmZiIsImVxdWFscyIsImxlZnQiLCJyaWdodCIsIm9wdGlvbnMiLCJpZ25vcmVDYXNlIiwidG9Mb3dlckNhc2UiLCJpZ25vcmVXaGl0ZXNwYWNlIiwidGVzdCIsInRva2VuaXplIiwidmFsdWUiLCJ0b2tlbnMiLCJzcGxpdCIsImkiLCJsZW5ndGgiLCJzcGxpY2UiLCJvbGRTdHIiLCJuZXdTdHIiLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7O2dDQW1EZ0JBLFMsR0FBQUEsUzt5REFLQUMsa0IsR0FBQUEsa0I7O0FBeERoQjs7Ozt1QkFDQTs7Ozt3QkFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxvQkFBb0IsK0RBQTFCOztBQUVBLElBQU1DLGVBQWUsSUFBckI7O0FBRU8sSUFBTUMsK0VBQVcsd0VBQWpCO0FBQ1BBLFNBQVNDLE1BQVQsR0FBa0IsVUFBU0MsSUFBVCxFQUFlQyxLQUFmLEVBQXNCO0FBQ3RDLE1BQUksS0FBS0MsT0FBTCxDQUFhQyxVQUFqQixFQUE2QjtBQUMzQkgsV0FBT0EsS0FBS0ksV0FBTCxFQUFQO0FBQ0FILFlBQVFBLE1BQU1HLFdBQU4sRUFBUjtBQUNEO0FBQ0QsU0FBT0osU0FBU0MsS0FBVCxJQUFtQixLQUFLQyxPQUFMLENBQWFHLGdCQUFiLElBQWlDLENBQUNSLGFBQWFTLElBQWIsQ0FBa0JOLElBQWxCLENBQWxDLElBQTZELENBQUNILGFBQWFTLElBQWIsQ0FBa0JMLEtBQWxCLENBQXhGO0FBQ0QsQ0FORDtBQU9BSCxTQUFTUyxRQUFULEdBQW9CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDbEMsTUFBSUMsU0FBU0QsTUFBTUUsS0FBTixDQUFZLFVBQVosQ0FBYjs7QUFFQTtBQUNBLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJRixPQUFPRyxNQUFQLEdBQWdCLENBQXBDLEVBQXVDRCxHQUF2QyxFQUE0QztBQUMxQztBQUNBLFFBQUksQ0FBQ0YsT0FBT0UsSUFBSSxDQUFYLENBQUQsSUFBa0JGLE9BQU9FLElBQUksQ0FBWCxDQUFsQixJQUNLZixrQkFBa0JVLElBQWxCLENBQXVCRyxPQUFPRSxDQUFQLENBQXZCLENBREwsSUFFS2Ysa0JBQWtCVSxJQUFsQixDQUF1QkcsT0FBT0UsSUFBSSxDQUFYLENBQXZCLENBRlQsRUFFZ0Q7QUFDOUNGLGFBQU9FLENBQVAsS0FBYUYsT0FBT0UsSUFBSSxDQUFYLENBQWI7QUFDQUYsYUFBT0ksTUFBUCxDQUFjRixJQUFJLENBQWxCLEVBQXFCLENBQXJCO0FBQ0FBO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPRixNQUFQO0FBQ0QsQ0FoQkQ7O0FBa0JPLFNBQVNmLFNBQVQsQ0FBbUJvQixNQUFuQixFQUEyQkMsTUFBM0IsRUFBbUNiLE9BQW5DLEVBQTRDO0FBQ2pEQSxZQUFVLDhFQUFnQkEsT0FBaEIsRUFBeUIsRUFBQ0csa0JBQWtCLElBQW5CLEVBQXpCLENBQVY7QUFDQSxTQUFPUCxTQUFTa0IsSUFBVCxDQUFjRixNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmIsT0FBOUIsQ0FBUDtBQUNEOztBQUVNLFNBQVNQLGtCQUFULENBQTRCbUIsTUFBNUIsRUFBb0NDLE1BQXBDLEVBQTRDYixPQUE1QyxFQUFxRDtBQUMxRCxTQUFPSixTQUFTa0IsSUFBVCxDQUFjRixNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmIsT0FBOUIsQ0FBUDtBQUNEIiwiZmlsZSI6IndvcmQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlmZiBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtnZW5lcmF0ZU9wdGlvbnN9IGZyb20gJy4uL3V0aWwvcGFyYW1zJztcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW5fc2NyaXB0X2luX1VuaWNvZGVcbi8vXG4vLyBSYW5nZXMgYW5kIGV4Y2VwdGlvbnM6XG4vLyBMYXRpbi0xIFN1cHBsZW1lbnQsIDAwODDigJMwMEZGXG4vLyAgLSBVKzAwRDcgIMOXIE11bHRpcGxpY2F0aW9uIHNpZ25cbi8vICAtIFUrMDBGNyAgw7cgRGl2aXNpb24gc2lnblxuLy8gTGF0aW4gRXh0ZW5kZWQtQSwgMDEwMOKAkzAxN0Zcbi8vIExhdGluIEV4dGVuZGVkLUIsIDAxODDigJMwMjRGXG4vLyBJUEEgRXh0ZW5zaW9ucywgMDI1MOKAkzAyQUZcbi8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycywgMDJCMOKAkzAyRkZcbi8vICAtIFUrMDJDNyAgy4cgJiM3MTE7ICBDYXJvblxuLy8gIC0gVSswMkQ4ICDLmCAmIzcyODsgIEJyZXZlXG4vLyAgLSBVKzAyRDkgIMuZICYjNzI5OyAgRG90IEFib3ZlXG4vLyAgLSBVKzAyREEgIMuaICYjNzMwOyAgUmluZyBBYm92ZVxuLy8gIC0gVSswMkRCICDLmyAmIzczMTsgIE9nb25la1xuLy8gIC0gVSswMkRDICDLnCAmIzczMjsgIFNtYWxsIFRpbGRlXG4vLyAgLSBVKzAyREQgIMudICYjNzMzOyAgRG91YmxlIEFjdXRlIEFjY2VudFxuLy8gTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCwgMUUwMOKAkzFFRkZcbmNvbnN0IGV4dGVuZGVkV29yZENoYXJzID0gL15bYS16QS1aXFx1e0MwfS1cXHV7RkZ9XFx1e0Q4fS1cXHV7RjZ9XFx1e0Y4fS1cXHV7MkM2fVxcdXsyQzh9LVxcdXsyRDd9XFx1ezJERX0tXFx1ezJGRn1cXHV7MUUwMH0tXFx1ezFFRkZ9XSskL3U7XG5cbmNvbnN0IHJlV2hpdGVzcGFjZSA9IC9cXFMvO1xuXG5leHBvcnQgY29uc3Qgd29yZERpZmYgPSBuZXcgRGlmZigpO1xud29yZERpZmYuZXF1YWxzID0gZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDYXNlKSB7XG4gICAgbGVmdCA9IGxlZnQudG9Mb3dlckNhc2UoKTtcbiAgICByaWdodCA9IHJpZ2h0LnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8ICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSAmJiAhcmVXaGl0ZXNwYWNlLnRlc3QobGVmdCkgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KHJpZ2h0KSk7XG59O1xud29yZERpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICBsZXQgdG9rZW5zID0gdmFsdWUuc3BsaXQoLyhcXHMrfFxcYikvKTtcblxuICAvLyBKb2luIHRoZSBib3VuZGFyeSBzcGxpdHMgdGhhdCB3ZSBkbyBub3QgY29uc2lkZXIgdG8gYmUgYm91bmRhcmllcy4gVGhpcyBpcyBwcmltYXJpbHkgdGhlIGV4dGVuZGVkIExhdGluIGNoYXJhY3RlciBzZXQuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaV0pXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaSArIDJdKSkge1xuICAgICAgdG9rZW5zW2ldICs9IHRva2Vuc1tpICsgMl07XG4gICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAyKTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIHtpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3Jkc1dpdGhTcGFjZShvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG59XG4iXX0=
|
||
|
||
|
||
/***/ }),
|
||
/* 4 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports. /*istanbul ignore end*/generateOptions = generateOptions;
|
||
function generateOptions(options, defaults) {
|
||
if (typeof options === 'function') {
|
||
defaults.callback = options;
|
||
} else if (options) {
|
||
for (var name in options) {
|
||
/* istanbul ignore else */
|
||
if (options.hasOwnProperty(name)) {
|
||
defaults[name] = options[name];
|
||
}
|
||
}
|
||
}
|
||
return defaults;
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3BhcmFtcy5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZU9wdGlvbnMiLCJvcHRpb25zIiwiZGVmYXVsdHMiLCJjYWxsYmFjayIsIm5hbWUiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7O2dDQUFnQkEsZSxHQUFBQSxlO0FBQVQsU0FBU0EsZUFBVCxDQUF5QkMsT0FBekIsRUFBa0NDLFFBQWxDLEVBQTRDO0FBQ2pELE1BQUksT0FBT0QsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNqQ0MsYUFBU0MsUUFBVCxHQUFvQkYsT0FBcEI7QUFDRCxHQUZELE1BRU8sSUFBSUEsT0FBSixFQUFhO0FBQ2xCLFNBQUssSUFBSUcsSUFBVCxJQUFpQkgsT0FBakIsRUFBMEI7QUFDeEI7QUFDQSxVQUFJQSxRQUFRSSxjQUFSLENBQXVCRCxJQUF2QixDQUFKLEVBQWtDO0FBQ2hDRixpQkFBU0UsSUFBVCxJQUFpQkgsUUFBUUcsSUFBUixDQUFqQjtBQUNEO0FBQ0Y7QUFDRjtBQUNELFNBQU9GLFFBQVA7QUFDRCIsImZpbGUiOiJwYXJhbXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRlZmF1bHRzLmNhbGxiYWNrID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgZGVmYXVsdHNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmYXVsdHM7XG59XG4iXX0=
|
||
|
||
|
||
/***/ }),
|
||
/* 5 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports.lineDiff = undefined;
|
||
exports. /*istanbul ignore end*/diffLines = diffLines;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/diffTrimmedLines = diffTrimmedLines;
|
||
|
||
var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
|
||
|
||
/*istanbul ignore end*/var /*istanbul ignore start*/_params = __webpack_require__(4) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/*istanbul ignore end*/var lineDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/lineDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
|
||
lineDiff.tokenize = function (value) {
|
||
var retLines = [],
|
||
linesAndNewlines = value.split(/(\n|\r\n)/);
|
||
|
||
// Ignore the final empty token that occurs if the string ends with a new line
|
||
if (!linesAndNewlines[linesAndNewlines.length - 1]) {
|
||
linesAndNewlines.pop();
|
||
}
|
||
|
||
// Merge the content and line separators into single tokens
|
||
for (var i = 0; i < linesAndNewlines.length; i++) {
|
||
var line = linesAndNewlines[i];
|
||
|
||
if (i % 2 && !this.options.newlineIsToken) {
|
||
retLines[retLines.length - 1] += line;
|
||
} else {
|
||
if (this.options.ignoreWhitespace) {
|
||
line = line.trim();
|
||
}
|
||
retLines.push(line);
|
||
}
|
||
}
|
||
|
||
return retLines;
|
||
};
|
||
|
||
function diffLines(oldStr, newStr, callback) {
|
||
return lineDiff.diff(oldStr, newStr, callback);
|
||
}
|
||
function diffTrimmedLines(oldStr, newStr, callback) {
|
||
var options = /*istanbul ignore start*/(0, _params.generateOptions) /*istanbul ignore end*/(callback, { ignoreWhitespace: true });
|
||
return lineDiff.diff(oldStr, newStr, options);
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2xpbmUuanMiXSwibmFtZXMiOlsiZGlmZkxpbmVzIiwiZGlmZlRyaW1tZWRMaW5lcyIsImxpbmVEaWZmIiwidG9rZW5pemUiLCJ2YWx1ZSIsInJldExpbmVzIiwibGluZXNBbmROZXdsaW5lcyIsInNwbGl0IiwibGVuZ3RoIiwicG9wIiwiaSIsImxpbmUiLCJvcHRpb25zIiwibmV3bGluZUlzVG9rZW4iLCJpZ25vcmVXaGl0ZXNwYWNlIiwidHJpbSIsInB1c2giLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Z0NBOEJnQkEsUyxHQUFBQSxTO3lEQUNBQyxnQixHQUFBQSxnQjs7QUEvQmhCOzs7O3VCQUNBOzs7O3VCQUVPLElBQU1DLCtFQUFXLHdFQUFqQjtBQUNQQSxTQUFTQyxRQUFULEdBQW9CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDbEMsTUFBSUMsV0FBVyxFQUFmO0FBQUEsTUFDSUMsbUJBQW1CRixNQUFNRyxLQUFOLENBQVksV0FBWixDQUR2Qjs7QUFHQTtBQUNBLE1BQUksQ0FBQ0QsaUJBQWlCQSxpQkFBaUJFLE1BQWpCLEdBQTBCLENBQTNDLENBQUwsRUFBb0Q7QUFDbERGLHFCQUFpQkcsR0FBakI7QUFDRDs7QUFFRDtBQUNBLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJSixpQkFBaUJFLE1BQXJDLEVBQTZDRSxHQUE3QyxFQUFrRDtBQUNoRCxRQUFJQyxPQUFPTCxpQkFBaUJJLENBQWpCLENBQVg7O0FBRUEsUUFBSUEsSUFBSSxDQUFKLElBQVMsQ0FBQyxLQUFLRSxPQUFMLENBQWFDLGNBQTNCLEVBQTJDO0FBQ3pDUixlQUFTQSxTQUFTRyxNQUFULEdBQWtCLENBQTNCLEtBQWlDRyxJQUFqQztBQUNELEtBRkQsTUFFTztBQUNMLFVBQUksS0FBS0MsT0FBTCxDQUFhRSxnQkFBakIsRUFBbUM7QUFDakNILGVBQU9BLEtBQUtJLElBQUwsRUFBUDtBQUNEO0FBQ0RWLGVBQVNXLElBQVQsQ0FBY0wsSUFBZDtBQUNEO0FBQ0Y7O0FBRUQsU0FBT04sUUFBUDtBQUNELENBeEJEOztBQTBCTyxTQUFTTCxTQUFULENBQW1CaUIsTUFBbkIsRUFBMkJDLE1BQTNCLEVBQW1DQyxRQUFuQyxFQUE2QztBQUFFLFNBQU9qQixTQUFTa0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QkMsUUFBOUIsQ0FBUDtBQUFpRDtBQUNoRyxTQUFTbEIsZ0JBQVQsQ0FBMEJnQixNQUExQixFQUFrQ0MsTUFBbEMsRUFBMENDLFFBQTFDLEVBQW9EO0FBQ3pELE1BQUlQLFVBQVUsOEVBQWdCTyxRQUFoQixFQUEwQixFQUFDTCxrQkFBa0IsSUFBbkIsRUFBMUIsQ0FBZDtBQUNBLFNBQU9aLFNBQVNrQixJQUFULENBQWNILE1BQWQsRUFBc0JDLE1BQXRCLEVBQThCTixPQUE5QixDQUFQO0FBQ0QiLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5pbXBvcnQge2dlbmVyYXRlT3B0aW9uc30gZnJvbSAnLi4vdXRpbC9wYXJhbXMnO1xuXG5leHBvcnQgY29uc3QgbGluZURpZmYgPSBuZXcgRGlmZigpO1xubGluZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICBsZXQgcmV0TGluZXMgPSBbXSxcbiAgICAgIGxpbmVzQW5kTmV3bGluZXMgPSB2YWx1ZS5zcGxpdCgvKFxcbnxcXHJcXG4pLyk7XG5cbiAgLy8gSWdub3JlIHRoZSBmaW5hbCBlbXB0eSB0b2tlbiB0aGF0IG9jY3VycyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBhIG5ldyBsaW5lXG4gIGlmICghbGluZXNBbmROZXdsaW5lc1tsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgbGluZXNBbmROZXdsaW5lcy5wb3AoKTtcbiAgfVxuXG4gIC8vIE1lcmdlIHRoZSBjb250ZW50IGFuZCBsaW5lIHNlcGFyYXRvcnMgaW50byBzaW5nbGUgdG9rZW5zXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNBbmROZXdsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBsaW5lID0gbGluZXNBbmROZXdsaW5lc1tpXTtcblxuICAgIGlmIChpICUgMiAmJiAhdGhpcy5vcHRpb25zLm5ld2xpbmVJc1Rva2VuKSB7XG4gICAgICByZXRMaW5lc1tyZXRMaW5lcy5sZW5ndGggLSAxXSArPSBsaW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgfVxuICAgICAgcmV0TGluZXMucHVzaChsaW5lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0TGluZXM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykgeyByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spOyB9XG5leHBvcnQgZnVuY3Rpb24gZGlmZlRyaW1tZWRMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgbGV0IG9wdGlvbnMgPSBnZW5lcmF0ZU9wdGlvbnMoY2FsbGJhY2ssIHtpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gIHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cbiJdfQ==
|
||
|
||
|
||
/***/ }),
|
||
/* 6 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports.sentenceDiff = undefined;
|
||
exports. /*istanbul ignore end*/diffSentences = diffSentences;
|
||
|
||
var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/*istanbul ignore end*/var sentenceDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/sentenceDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
|
||
sentenceDiff.tokenize = function (value) {
|
||
return value.split(/(\S.+?[.!?])(?=\s+|$)/);
|
||
};
|
||
|
||
function diffSentences(oldStr, newStr, callback) {
|
||
return sentenceDiff.diff(oldStr, newStr, callback);
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3NlbnRlbmNlLmpzIl0sIm5hbWVzIjpbImRpZmZTZW50ZW5jZXMiLCJzZW50ZW5jZURpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic3BsaXQiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Z0NBUWdCQSxhLEdBQUFBLGE7O0FBUmhCOzs7Ozs7dUJBR08sSUFBTUMsdUZBQWUsd0VBQXJCO0FBQ1BBLGFBQWFDLFFBQWIsR0FBd0IsVUFBU0MsS0FBVCxFQUFnQjtBQUN0QyxTQUFPQSxNQUFNQyxLQUFOLENBQVksdUJBQVosQ0FBUDtBQUNELENBRkQ7O0FBSU8sU0FBU0osYUFBVCxDQUF1QkssTUFBdkIsRUFBK0JDLE1BQS9CLEVBQXVDQyxRQUF2QyxFQUFpRDtBQUFFLFNBQU9OLGFBQWFPLElBQWIsQ0FBa0JILE1BQWxCLEVBQTBCQyxNQUExQixFQUFrQ0MsUUFBbEMsQ0FBUDtBQUFxRCIsImZpbGUiOiJzZW50ZW5jZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cblxuZXhwb3J0IGNvbnN0IHNlbnRlbmNlRGlmZiA9IG5ldyBEaWZmKCk7XG5zZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZlNlbnRlbmNlcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHsgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==
|
||
|
||
|
||
/***/ }),
|
||
/* 7 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports.cssDiff = undefined;
|
||
exports. /*istanbul ignore end*/diffCss = diffCss;
|
||
|
||
var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/*istanbul ignore end*/var cssDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/cssDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
|
||
cssDiff.tokenize = function (value) {
|
||
return value.split(/([{}:;,]|\s+)/);
|
||
};
|
||
|
||
function diffCss(oldStr, newStr, callback) {
|
||
return cssDiff.diff(oldStr, newStr, callback);
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Nzcy5qcyJdLCJuYW1lcyI6WyJkaWZmQ3NzIiwiY3NzRGlmZiIsInRva2VuaXplIiwidmFsdWUiLCJzcGxpdCIsIm9sZFN0ciIsIm5ld1N0ciIsImNhbGxiYWNrIiwiZGlmZiJdLCJtYXBwaW5ncyI6Ijs7OztnQ0FPZ0JBLE8sR0FBQUEsTzs7QUFQaEI7Ozs7Ozt1QkFFTyxJQUFNQyw2RUFBVSx3RUFBaEI7QUFDUEEsUUFBUUMsUUFBUixHQUFtQixVQUFTQyxLQUFULEVBQWdCO0FBQ2pDLFNBQU9BLE1BQU1DLEtBQU4sQ0FBWSxlQUFaLENBQVA7QUFDRCxDQUZEOztBQUlPLFNBQVNKLE9BQVQsQ0FBaUJLLE1BQWpCLEVBQXlCQyxNQUF6QixFQUFpQ0MsUUFBakMsRUFBMkM7QUFBRSxTQUFPTixRQUFRTyxJQUFSLENBQWFILE1BQWIsRUFBcUJDLE1BQXJCLEVBQTZCQyxRQUE3QixDQUFQO0FBQWdEIiwiZmlsZSI6ImNzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBjc3NEaWZmID0gbmV3IERpZmYoKTtcbmNzc0RpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhbe306OyxdfFxccyspLyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkNzcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHsgcmV0dXJuIGNzc0RpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spOyB9XG4iXX0=
|
||
|
||
|
||
/***/ }),
|
||
/* 8 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports.jsonDiff = undefined;
|
||
|
||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
||
|
||
exports. /*istanbul ignore end*/diffJson = diffJson;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/canonicalize = canonicalize;
|
||
|
||
var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
|
||
|
||
/*istanbul ignore end*/var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/*istanbul ignore end*/var objectPrototypeToString = Object.prototype.toString;
|
||
|
||
var jsonDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/jsonDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
|
||
// Discriminate between two lines of pretty-printed, serialized JSON where one of them has a
|
||
// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:
|
||
jsonDiff.useLongestToken = true;
|
||
|
||
jsonDiff.tokenize = /*istanbul ignore start*/_line.lineDiff /*istanbul ignore end*/.tokenize;
|
||
jsonDiff.castInput = function (value) {
|
||
/*istanbul ignore start*/var _options = /*istanbul ignore end*/this.options,
|
||
undefinedReplacement = _options.undefinedReplacement,
|
||
_options$stringifyRep = _options.stringifyReplacer,
|
||
stringifyReplacer = _options$stringifyRep === undefined ? function (k, v) /*istanbul ignore start*/{
|
||
return (/*istanbul ignore end*/typeof v === 'undefined' ? undefinedReplacement : v
|
||
);
|
||
} : _options$stringifyRep;
|
||
|
||
|
||
return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');
|
||
};
|
||
jsonDiff.equals = function (left, right) {
|
||
return (/*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'))
|
||
);
|
||
};
|
||
|
||
function diffJson(oldObj, newObj, options) {
|
||
return jsonDiff.diff(oldObj, newObj, options);
|
||
}
|
||
|
||
// This function handles the presence of circular references by bailing out when encountering an
|
||
// object that is already on the "stack" of items being processed. Accepts an optional replacer
|
||
function canonicalize(obj, stack, replacementStack, replacer, key) {
|
||
stack = stack || [];
|
||
replacementStack = replacementStack || [];
|
||
|
||
if (replacer) {
|
||
obj = replacer(key, obj);
|
||
}
|
||
|
||
var i = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
|
||
|
||
for (i = 0; i < stack.length; i += 1) {
|
||
if (stack[i] === obj) {
|
||
return replacementStack[i];
|
||
}
|
||
}
|
||
|
||
var canonicalizedObj = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
|
||
|
||
if ('[object Array]' === objectPrototypeToString.call(obj)) {
|
||
stack.push(obj);
|
||
canonicalizedObj = new Array(obj.length);
|
||
replacementStack.push(canonicalizedObj);
|
||
for (i = 0; i < obj.length; i += 1) {
|
||
canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);
|
||
}
|
||
stack.pop();
|
||
replacementStack.pop();
|
||
return canonicalizedObj;
|
||
}
|
||
|
||
if (obj && obj.toJSON) {
|
||
obj = obj.toJSON();
|
||
}
|
||
|
||
if ( /*istanbul ignore start*/(typeof /*istanbul ignore end*/obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null) {
|
||
stack.push(obj);
|
||
canonicalizedObj = {};
|
||
replacementStack.push(canonicalizedObj);
|
||
var sortedKeys = [],
|
||
_key = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
|
||
for (_key in obj) {
|
||
/* istanbul ignore else */
|
||
if (obj.hasOwnProperty(_key)) {
|
||
sortedKeys.push(_key);
|
||
}
|
||
}
|
||
sortedKeys.sort();
|
||
for (i = 0; i < sortedKeys.length; i += 1) {
|
||
_key = sortedKeys[i];
|
||
canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);
|
||
}
|
||
stack.pop();
|
||
replacementStack.pop();
|
||
} else {
|
||
canonicalizedObj = obj;
|
||
}
|
||
return canonicalizedObj;
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2pzb24uanMiXSwibmFtZXMiOlsiZGlmZkpzb24iLCJjYW5vbmljYWxpemUiLCJvYmplY3RQcm90b3R5cGVUb1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwianNvbkRpZmYiLCJ1c2VMb25nZXN0VG9rZW4iLCJ0b2tlbml6ZSIsImNhc3RJbnB1dCIsInZhbHVlIiwib3B0aW9ucyIsInVuZGVmaW5lZFJlcGxhY2VtZW50Iiwic3RyaW5naWZ5UmVwbGFjZXIiLCJrIiwidiIsIkpTT04iLCJzdHJpbmdpZnkiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJjYWxsIiwicmVwbGFjZSIsIm9sZE9iaiIsIm5ld09iaiIsImRpZmYiLCJvYmoiLCJzdGFjayIsInJlcGxhY2VtZW50U3RhY2siLCJyZXBsYWNlciIsImtleSIsImkiLCJsZW5ndGgiLCJjYW5vbmljYWxpemVkT2JqIiwicHVzaCIsIkFycmF5IiwicG9wIiwidG9KU09OIiwic29ydGVkS2V5cyIsImhhc093blByb3BlcnR5Iiwic29ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztnQ0FxQmdCQSxRLEdBQUFBLFE7eURBSUFDLFksR0FBQUEsWTs7QUF6QmhCOzs7O3VCQUNBOzs7O3VCQUVBLElBQU1DLDBCQUEwQkMsT0FBT0MsU0FBUCxDQUFpQkMsUUFBakQ7O0FBR08sSUFBTUMsK0VBQVcsd0VBQWpCO0FBQ1A7QUFDQTtBQUNBQSxTQUFTQyxlQUFULEdBQTJCLElBQTNCOztBQUVBRCxTQUFTRSxRQUFULEdBQW9CLGdFQUFTQSxRQUE3QjtBQUNBRixTQUFTRyxTQUFULEdBQXFCLFVBQVNDLEtBQVQsRUFBZ0I7QUFBQSxpRUFDK0UsS0FBS0MsT0FEcEY7QUFBQSxNQUM1QkMsb0JBRDRCLFlBQzVCQSxvQkFENEI7QUFBQSx1Q0FDTkMsaUJBRE07QUFBQSxNQUNOQSxpQkFETSx5Q0FDYyxVQUFDQyxDQUFELEVBQUlDLENBQUo7QUFBQSxtQ0FBVSxPQUFPQSxDQUFQLEtBQWEsV0FBYixHQUEyQkgsb0JBQTNCLEdBQWtERztBQUE1RDtBQUFBLEdBRGQ7OztBQUduQyxTQUFPLE9BQU9MLEtBQVAsS0FBaUIsUUFBakIsR0FBNEJBLEtBQTVCLEdBQW9DTSxLQUFLQyxTQUFMLENBQWVoQixhQUFhUyxLQUFiLEVBQW9CLElBQXBCLEVBQTBCLElBQTFCLEVBQWdDRyxpQkFBaEMsQ0FBZixFQUFtRUEsaUJBQW5FLEVBQXNGLElBQXRGLENBQTNDO0FBQ0QsQ0FKRDtBQUtBUCxTQUFTWSxNQUFULEdBQWtCLFVBQVNDLElBQVQsRUFBZUMsS0FBZixFQUFzQjtBQUN0QyxTQUFPLG9FQUFLaEIsU0FBTCxDQUFlYyxNQUFmLENBQXNCRyxJQUF0QixDQUEyQmYsUUFBM0IsRUFBcUNhLEtBQUtHLE9BQUwsQ0FBYSxZQUFiLEVBQTJCLElBQTNCLENBQXJDLEVBQXVFRixNQUFNRSxPQUFOLENBQWMsWUFBZCxFQUE0QixJQUE1QixDQUF2RTtBQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTdEIsUUFBVCxDQUFrQnVCLE1BQWxCLEVBQTBCQyxNQUExQixFQUFrQ2IsT0FBbEMsRUFBMkM7QUFBRSxTQUFPTCxTQUFTbUIsSUFBVCxDQUFjRixNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmIsT0FBOUIsQ0FBUDtBQUFnRDs7QUFFcEc7QUFDQTtBQUNPLFNBQVNWLFlBQVQsQ0FBc0J5QixHQUF0QixFQUEyQkMsS0FBM0IsRUFBa0NDLGdCQUFsQyxFQUFvREMsUUFBcEQsRUFBOERDLEdBQTlELEVBQW1FO0FBQ3hFSCxVQUFRQSxTQUFTLEVBQWpCO0FBQ0FDLHFCQUFtQkEsb0JBQW9CLEVBQXZDOztBQUVBLE1BQUlDLFFBQUosRUFBYztBQUNaSCxVQUFNRyxTQUFTQyxHQUFULEVBQWNKLEdBQWQsQ0FBTjtBQUNEOztBQUVELE1BQUlLLG1DQUFKOztBQUVBLE9BQUtBLElBQUksQ0FBVCxFQUFZQSxJQUFJSixNQUFNSyxNQUF0QixFQUE4QkQsS0FBSyxDQUFuQyxFQUFzQztBQUNwQyxRQUFJSixNQUFNSSxDQUFOLE1BQWFMLEdBQWpCLEVBQXNCO0FBQ3BCLGFBQU9FLGlCQUFpQkcsQ0FBakIsQ0FBUDtBQUNEO0FBQ0Y7O0FBRUQsTUFBSUUsa0RBQUo7O0FBRUEsTUFBSSxxQkFBcUIvQix3QkFBd0JtQixJQUF4QixDQUE2QkssR0FBN0IsQ0FBekIsRUFBNEQ7QUFDMURDLFVBQU1PLElBQU4sQ0FBV1IsR0FBWDtBQUNBTyx1QkFBbUIsSUFBSUUsS0FBSixDQUFVVCxJQUFJTSxNQUFkLENBQW5CO0FBQ0FKLHFCQUFpQk0sSUFBakIsQ0FBc0JELGdCQUF0QjtBQUNBLFNBQUtGLElBQUksQ0FBVCxFQUFZQSxJQUFJTCxJQUFJTSxNQUFwQixFQUE0QkQsS0FBSyxDQUFqQyxFQUFvQztBQUNsQ0UsdUJBQWlCRixDQUFqQixJQUFzQjlCLGFBQWF5QixJQUFJSyxDQUFKLENBQWIsRUFBcUJKLEtBQXJCLEVBQTRCQyxnQkFBNUIsRUFBOENDLFFBQTlDLEVBQXdEQyxHQUF4RCxDQUF0QjtBQUNEO0FBQ0RILFVBQU1TLEdBQU47QUFDQVIscUJBQWlCUSxHQUFqQjtBQUNBLFdBQU9ILGdCQUFQO0FBQ0Q7O0FBRUQsTUFBSVAsT0FBT0EsSUFBSVcsTUFBZixFQUF1QjtBQUNyQlgsVUFBTUEsSUFBSVcsTUFBSixFQUFOO0FBQ0Q7O0FBRUQsTUFBSSx5REFBT1gsR0FBUCx5Q0FBT0EsR0FBUCxPQUFlLFFBQWYsSUFBMkJBLFFBQVEsSUFBdkMsRUFBNkM7QUFDM0NDLFVBQU1PLElBQU4sQ0FBV1IsR0FBWDtBQUNBTyx1QkFBbUIsRUFBbkI7QUFDQUwscUJBQWlCTSxJQUFqQixDQUFzQkQsZ0JBQXRCO0FBQ0EsUUFBSUssYUFBYSxFQUFqQjtBQUFBLFFBQ0lSLHNDQURKO0FBRUEsU0FBS0EsSUFBTCxJQUFZSixHQUFaLEVBQWlCO0FBQ2Y7QUFDQSxVQUFJQSxJQUFJYSxjQUFKLENBQW1CVCxJQUFuQixDQUFKLEVBQTZCO0FBQzNCUSxtQkFBV0osSUFBWCxDQUFnQkosSUFBaEI7QUFDRDtBQUNGO0FBQ0RRLGVBQVdFLElBQVg7QUFDQSxTQUFLVCxJQUFJLENBQVQsRUFBWUEsSUFBSU8sV0FBV04sTUFBM0IsRUFBbUNELEtBQUssQ0FBeEMsRUFBMkM7QUFDekNELGFBQU1RLFdBQVdQLENBQVgsQ0FBTjtBQUNBRSx1QkFBaUJILElBQWpCLElBQXdCN0IsYUFBYXlCLElBQUlJLElBQUosQ0FBYixFQUF1QkgsS0FBdkIsRUFBOEJDLGdCQUE5QixFQUFnREMsUUFBaEQsRUFBMERDLElBQTFELENBQXhCO0FBQ0Q7QUFDREgsVUFBTVMsR0FBTjtBQUNBUixxQkFBaUJRLEdBQWpCO0FBQ0QsR0FuQkQsTUFtQk87QUFDTEgsdUJBQW1CUCxHQUFuQjtBQUNEO0FBQ0QsU0FBT08sZ0JBQVA7QUFDRCIsImZpbGUiOiJqc29uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7bGluZURpZmZ9IGZyb20gJy4vbGluZSc7XG5cbmNvbnN0IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuXG5leHBvcnQgY29uc3QganNvbkRpZmYgPSBuZXcgRGlmZigpO1xuLy8gRGlzY3JpbWluYXRlIGJldHdlZW4gdHdvIGxpbmVzIG9mIHByZXR0eS1wcmludGVkLCBzZXJpYWxpemVkIEpTT04gd2hlcmUgb25lIG9mIHRoZW0gaGFzIGFcbi8vIGRhbmdsaW5nIGNvbW1hIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gVHVybnMgb3V0IGluY2x1ZGluZyB0aGUgZGFuZ2xpbmcgY29tbWEgeWllbGRzIHRoZSBuaWNlc3Qgb3V0cHV0OlxuanNvbkRpZmYudXNlTG9uZ2VzdFRva2VuID0gdHJ1ZTtcblxuanNvbkRpZmYudG9rZW5pemUgPSBsaW5lRGlmZi50b2tlbml6ZTtcbmpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IHt1bmRlZmluZWRSZXBsYWNlbWVudCwgc3RyaW5naWZ5UmVwbGFjZXIgPSAoaywgdikgPT4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkUmVwbGFjZW1lbnQgOiB2fSA9IHRoaXMub3B0aW9ucztcblxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkoY2Fub25pY2FsaXplKHZhbHVlLCBudWxsLCBudWxsLCBzdHJpbmdpZnlSZXBsYWNlciksIHN0cmluZ2lmeVJlcGxhY2VyLCAnICAnKTtcbn07XG5qc29uRGlmZi5lcXVhbHMgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICByZXR1cm4gRGlmZi5wcm90b3R5cGUuZXF1YWxzLmNhbGwoanNvbkRpZmYsIGxlZnQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJyksIHJpZ2h0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykgeyByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7IH1cblxuLy8gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBwcmVzZW5jZSBvZiBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGJhaWxpbmcgb3V0IHdoZW4gZW5jb3VudGVyaW5nIGFuXG4vLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBcInN0YWNrXCIgb2YgaXRlbXMgYmVpbmcgcHJvY2Vzc2VkLiBBY2NlcHRzIGFuIG9wdGlvbmFsIHJlcGxhY2VyXG5leHBvcnQgZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpIHtcbiAgc3RhY2sgPSBzdGFjayB8fCBbXTtcbiAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG5cbiAgaWYgKHJlcGxhY2VyKSB7XG4gICAgb2JqID0gcmVwbGFjZXIoa2V5LCBvYmopO1xuICB9XG5cbiAgbGV0IGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHN0YWNrW2ldID09PSBvYmopIHtcbiAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjYW5vbmljYWxpemVkT2JqO1xuXG4gIGlmICgnW29iamVjdCBBcnJheV0nID09PSBvYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iaikpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IG5ldyBBcnJheShvYmoubGVuZ3RoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG4gICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY2Fub25pY2FsaXplZE9ialtpXSA9IGNhbm9uaWNhbGl6ZShvYmpbaV0sIHN0YWNrLCByZXBsYWNlbWVudFN0YWNrLCByZXBsYWNlciwga2V5KTtcbiAgICB9XG4gICAgc3RhY2sucG9wKCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgfVxuXG4gIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuICAgIG9iaiA9IG9iai50b0pTT04oKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IHt9O1xuICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcbiAgICBsZXQgc29ydGVkS2V5cyA9IFtdLFxuICAgICAgICBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHNvcnRlZEtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc29ydGVkS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAga2V5ID0gc29ydGVkS2V5c1tpXTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpba2V5XSA9IGNhbm9uaWNhbGl6ZShvYmpba2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpO1xuICAgIH1cbiAgICBzdGFjay5wb3AoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBvYmo7XG4gIH1cbiAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG59XG4iXX0=
|
||
|
||
|
||
/***/ }),
|
||
/* 9 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports.arrayDiff = undefined;
|
||
exports. /*istanbul ignore end*/diffArrays = diffArrays;
|
||
|
||
var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/*istanbul ignore end*/var arrayDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/arrayDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
|
||
arrayDiff.tokenize = function (value) {
|
||
return value.slice();
|
||
};
|
||
arrayDiff.join = arrayDiff.removeEmpty = function (value) {
|
||
return value;
|
||
};
|
||
|
||
function diffArrays(oldArr, newArr, callback) {
|
||
return arrayDiff.diff(oldArr, newArr, callback);
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2FycmF5LmpzIl0sIm5hbWVzIjpbImRpZmZBcnJheXMiLCJhcnJheURpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic2xpY2UiLCJqb2luIiwicmVtb3ZlRW1wdHkiLCJvbGRBcnIiLCJuZXdBcnIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Z0NBVWdCQSxVLEdBQUFBLFU7O0FBVmhCOzs7Ozs7dUJBRU8sSUFBTUMsaUZBQVksd0VBQWxCO0FBQ1BBLFVBQVVDLFFBQVYsR0FBcUIsVUFBU0MsS0FBVCxFQUFnQjtBQUNuQyxTQUFPQSxNQUFNQyxLQUFOLEVBQVA7QUFDRCxDQUZEO0FBR0FILFVBQVVJLElBQVYsR0FBaUJKLFVBQVVLLFdBQVYsR0FBd0IsVUFBU0gsS0FBVCxFQUFnQjtBQUN2RCxTQUFPQSxLQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTSCxVQUFULENBQW9CTyxNQUFwQixFQUE0QkMsTUFBNUIsRUFBb0NDLFFBQXBDLEVBQThDO0FBQUUsU0FBT1IsVUFBVVMsSUFBVixDQUFlSCxNQUFmLEVBQXVCQyxNQUF2QixFQUErQkMsUUFBL0IsQ0FBUDtBQUFrRCIsImZpbGUiOiJhcnJheS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBhcnJheURpZmYgPSBuZXcgRGlmZigpO1xuYXJyYXlEaWZmLnRva2VuaXplID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnNsaWNlKCk7XG59O1xuYXJyYXlEaWZmLmpvaW4gPSBhcnJheURpZmYucmVtb3ZlRW1wdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkFycmF5cyhvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spIHsgcmV0dXJuIGFycmF5RGlmZi5kaWZmKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjayk7IH1cbiJdfQ==
|
||
|
||
|
||
/***/ }),
|
||
/* 10 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports. /*istanbul ignore end*/applyPatch = applyPatch;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatches = applyPatches;
|
||
|
||
var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_distanceIterator = __webpack_require__(12) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/var _distanceIterator2 = _interopRequireDefault(_distanceIterator);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
||
/*istanbul ignore end*/function applyPatch(source, uniDiff) {
|
||
/*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||
|
||
if (typeof uniDiff === 'string') {
|
||
uniDiff = /*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(uniDiff);
|
||
}
|
||
|
||
if (Array.isArray(uniDiff)) {
|
||
if (uniDiff.length > 1) {
|
||
throw new Error('applyPatch only works with a single input.');
|
||
}
|
||
|
||
uniDiff = uniDiff[0];
|
||
}
|
||
|
||
// Apply the diff to the input
|
||
var lines = source.split(/\r\n|[\n\v\f\r\x85]/),
|
||
delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [],
|
||
hunks = uniDiff.hunks,
|
||
compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) /*istanbul ignore start*/{
|
||
return (/*istanbul ignore end*/line === patchContent
|
||
);
|
||
},
|
||
errorCount = 0,
|
||
fuzzFactor = options.fuzzFactor || 0,
|
||
minLine = 0,
|
||
offset = 0,
|
||
removeEOFNL = /*istanbul ignore start*/void 0 /*istanbul ignore end*/,
|
||
addEOFNL = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
|
||
|
||
/**
|
||
* Checks if the hunk exactly fits on the provided location
|
||
*/
|
||
function hunkFits(hunk, toPos) {
|
||
for (var j = 0; j < hunk.lines.length; j++) {
|
||
var line = hunk.lines[j],
|
||
operation = line.length > 0 ? line[0] : ' ',
|
||
content = line.length > 0 ? line.substr(1) : line;
|
||
|
||
if (operation === ' ' || operation === '-') {
|
||
// Context sanity check
|
||
if (!compareLine(toPos + 1, lines[toPos], operation, content)) {
|
||
errorCount++;
|
||
|
||
if (errorCount > fuzzFactor) {
|
||
return false;
|
||
}
|
||
}
|
||
toPos++;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
// Search best fit offsets for each hunk based on the previous ones
|
||
for (var i = 0; i < hunks.length; i++) {
|
||
var hunk = hunks[i],
|
||
maxLine = lines.length - hunk.oldLines,
|
||
localOffset = 0,
|
||
toPos = offset + hunk.oldStart - 1;
|
||
|
||
var iterator = /*istanbul ignore start*/(0, _distanceIterator2['default']) /*istanbul ignore end*/(toPos, minLine, maxLine);
|
||
|
||
for (; localOffset !== undefined; localOffset = iterator()) {
|
||
if (hunkFits(hunk, toPos + localOffset)) {
|
||
hunk.offset = offset += localOffset;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (localOffset === undefined) {
|
||
return false;
|
||
}
|
||
|
||
// Set lower text limit to end of the current hunk, so next ones don't try
|
||
// to fit over already patched text
|
||
minLine = hunk.offset + hunk.oldStart + hunk.oldLines;
|
||
}
|
||
|
||
// Apply patch hunks
|
||
var diffOffset = 0;
|
||
for (var _i = 0; _i < hunks.length; _i++) {
|
||
var _hunk = hunks[_i],
|
||
_toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;
|
||
diffOffset += _hunk.newLines - _hunk.oldLines;
|
||
|
||
if (_toPos < 0) {
|
||
// Creating a new file
|
||
_toPos = 0;
|
||
}
|
||
|
||
for (var j = 0; j < _hunk.lines.length; j++) {
|
||
var line = _hunk.lines[j],
|
||
operation = line.length > 0 ? line[0] : ' ',
|
||
content = line.length > 0 ? line.substr(1) : line,
|
||
delimiter = _hunk.linedelimiters[j];
|
||
|
||
if (operation === ' ') {
|
||
_toPos++;
|
||
} else if (operation === '-') {
|
||
lines.splice(_toPos, 1);
|
||
delimiters.splice(_toPos, 1);
|
||
/* istanbul ignore else */
|
||
} else if (operation === '+') {
|
||
lines.splice(_toPos, 0, content);
|
||
delimiters.splice(_toPos, 0, delimiter);
|
||
_toPos++;
|
||
} else if (operation === '\\') {
|
||
var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;
|
||
if (previousOperation === '+') {
|
||
removeEOFNL = true;
|
||
} else if (previousOperation === '-') {
|
||
addEOFNL = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Handle EOFNL insertion/removal
|
||
if (removeEOFNL) {
|
||
while (!lines[lines.length - 1]) {
|
||
lines.pop();
|
||
delimiters.pop();
|
||
}
|
||
} else if (addEOFNL) {
|
||
lines.push('');
|
||
delimiters.push('\n');
|
||
}
|
||
for (var _k = 0; _k < lines.length - 1; _k++) {
|
||
lines[_k] = lines[_k] + delimiters[_k];
|
||
}
|
||
return lines.join('');
|
||
}
|
||
|
||
// Wrapper that supports multiple file patches via callbacks.
|
||
function applyPatches(uniDiff, options) {
|
||
if (typeof uniDiff === 'string') {
|
||
uniDiff = /*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(uniDiff);
|
||
}
|
||
|
||
var currentIndex = 0;
|
||
function processIndex() {
|
||
var index = uniDiff[currentIndex++];
|
||
if (!index) {
|
||
return options.complete();
|
||
}
|
||
|
||
options.loadFile(index, function (err, data) {
|
||
if (err) {
|
||
return options.complete(err);
|
||
}
|
||
|
||
var updatedContent = applyPatch(data, index, options);
|
||
options.patched(index, updatedContent, function (err) {
|
||
if (err) {
|
||
return options.complete(err);
|
||
}
|
||
|
||
processIndex();
|
||
});
|
||
});
|
||
}
|
||
processIndex();
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9hcHBseS5qcyJdLCJuYW1lcyI6WyJhcHBseVBhdGNoIiwiYXBwbHlQYXRjaGVzIiwic291cmNlIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJFcnJvciIsImxpbmVzIiwic3BsaXQiLCJkZWxpbWl0ZXJzIiwibWF0Y2giLCJodW5rcyIsImNvbXBhcmVMaW5lIiwibGluZU51bWJlciIsImxpbmUiLCJvcGVyYXRpb24iLCJwYXRjaENvbnRlbnQiLCJlcnJvckNvdW50IiwiZnV6ekZhY3RvciIsIm1pbkxpbmUiLCJvZmZzZXQiLCJyZW1vdmVFT0ZOTCIsImFkZEVPRk5MIiwiaHVua0ZpdHMiLCJodW5rIiwidG9Qb3MiLCJqIiwiY29udGVudCIsInN1YnN0ciIsImkiLCJtYXhMaW5lIiwib2xkTGluZXMiLCJsb2NhbE9mZnNldCIsIm9sZFN0YXJ0IiwiaXRlcmF0b3IiLCJ1bmRlZmluZWQiLCJkaWZmT2Zmc2V0IiwibmV3TGluZXMiLCJkZWxpbWl0ZXIiLCJsaW5lZGVsaW1pdGVycyIsInNwbGljZSIsInByZXZpb3VzT3BlcmF0aW9uIiwicG9wIiwicHVzaCIsIl9rIiwiam9pbiIsImN1cnJlbnRJbmRleCIsInByb2Nlc3NJbmRleCIsImluZGV4IiwiY29tcGxldGUiLCJsb2FkRmlsZSIsImVyciIsImRhdGEiLCJ1cGRhdGVkQ29udGVudCIsInBhdGNoZWQiXSwibWFwcGluZ3MiOiI7OztnQ0FHZ0JBLFUsR0FBQUEsVTt5REFvSUFDLFksR0FBQUEsWTs7QUF2SWhCOztBQUNBOzs7Ozs7dUJBRU8sU0FBU0QsVUFBVCxDQUFvQkUsTUFBcEIsRUFBNEJDLE9BQTVCLEVBQW1EO0FBQUEsc0RBQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFDeEQsTUFBSSxPQUFPRCxPQUFQLEtBQW1CLFFBQXZCLEVBQWlDO0FBQy9CQSxjQUFVLHdFQUFXQSxPQUFYLENBQVY7QUFDRDs7QUFFRCxNQUFJRSxNQUFNQyxPQUFOLENBQWNILE9BQWQsQ0FBSixFQUE0QjtBQUMxQixRQUFJQSxRQUFRSSxNQUFSLEdBQWlCLENBQXJCLEVBQXdCO0FBQ3RCLFlBQU0sSUFBSUMsS0FBSixDQUFVLDRDQUFWLENBQU47QUFDRDs7QUFFREwsY0FBVUEsUUFBUSxDQUFSLENBQVY7QUFDRDs7QUFFRDtBQUNBLE1BQUlNLFFBQVFQLE9BQU9RLEtBQVAsQ0FBYSxxQkFBYixDQUFaO0FBQUEsTUFDSUMsYUFBYVQsT0FBT1UsS0FBUCxDQUFhLHNCQUFiLEtBQXdDLEVBRHpEO0FBQUEsTUFFSUMsUUFBUVYsUUFBUVUsS0FGcEI7QUFBQSxNQUlJQyxjQUFjVixRQUFRVSxXQUFSLElBQXdCLFVBQUNDLFVBQUQsRUFBYUMsSUFBYixFQUFtQkMsU0FBbkIsRUFBOEJDLFlBQTlCO0FBQUEsbUNBQStDRixTQUFTRTtBQUF4RDtBQUFBLEdBSjFDO0FBQUEsTUFLSUMsYUFBYSxDQUxqQjtBQUFBLE1BTUlDLGFBQWFoQixRQUFRZ0IsVUFBUixJQUFzQixDQU52QztBQUFBLE1BT0lDLFVBQVUsQ0FQZDtBQUFBLE1BUUlDLFNBQVMsQ0FSYjtBQUFBLE1BVUlDLDZDQVZKO0FBQUEsTUFXSUMsMENBWEo7O0FBYUE7OztBQUdBLFdBQVNDLFFBQVQsQ0FBa0JDLElBQWxCLEVBQXdCQyxLQUF4QixFQUErQjtBQUM3QixTQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUYsS0FBS2pCLEtBQUwsQ0FBV0YsTUFBL0IsRUFBdUNxQixHQUF2QyxFQUE0QztBQUMxQyxVQUFJWixPQUFPVSxLQUFLakIsS0FBTCxDQUFXbUIsQ0FBWCxDQUFYO0FBQUEsVUFDSVgsWUFBYUQsS0FBS1QsTUFBTCxHQUFjLENBQWQsR0FBa0JTLEtBQUssQ0FBTCxDQUFsQixHQUE0QixHQUQ3QztBQUFBLFVBRUlhLFVBQVdiLEtBQUtULE1BQUwsR0FBYyxDQUFkLEdBQWtCUyxLQUFLYyxNQUFMLENBQVksQ0FBWixDQUFsQixHQUFtQ2QsSUFGbEQ7O0FBSUEsVUFBSUMsY0FBYyxHQUFkLElBQXFCQSxjQUFjLEdBQXZDLEVBQTRDO0FBQzFDO0FBQ0EsWUFBSSxDQUFDSCxZQUFZYSxRQUFRLENBQXBCLEVBQXVCbEIsTUFBTWtCLEtBQU4sQ0FBdkIsRUFBcUNWLFNBQXJDLEVBQWdEWSxPQUFoRCxDQUFMLEVBQStEO0FBQzdEVjs7QUFFQSxjQUFJQSxhQUFhQyxVQUFqQixFQUE2QjtBQUMzQixtQkFBTyxLQUFQO0FBQ0Q7QUFDRjtBQUNETztBQUNEO0FBQ0Y7O0FBRUQsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxPQUFLLElBQUlJLElBQUksQ0FBYixFQUFnQkEsSUFBSWxCLE1BQU1OLE1BQTFCLEVBQWtDd0IsR0FBbEMsRUFBdUM7QUFDckMsUUFBSUwsT0FBT2IsTUFBTWtCLENBQU4sQ0FBWDtBQUFBLFFBQ0lDLFVBQVV2QixNQUFNRixNQUFOLEdBQWVtQixLQUFLTyxRQURsQztBQUFBLFFBRUlDLGNBQWMsQ0FGbEI7QUFBQSxRQUdJUCxRQUFRTCxTQUFTSSxLQUFLUyxRQUFkLEdBQXlCLENBSHJDOztBQUtBLFFBQUlDLFdBQVcsb0ZBQWlCVCxLQUFqQixFQUF3Qk4sT0FBeEIsRUFBaUNXLE9BQWpDLENBQWY7O0FBRUEsV0FBT0UsZ0JBQWdCRyxTQUF2QixFQUFrQ0gsY0FBY0UsVUFBaEQsRUFBNEQ7QUFDMUQsVUFBSVgsU0FBU0MsSUFBVCxFQUFlQyxRQUFRTyxXQUF2QixDQUFKLEVBQXlDO0FBQ3ZDUixhQUFLSixNQUFMLEdBQWNBLFVBQVVZLFdBQXhCO0FBQ0E7QUFDRDtBQUNGOztBQUVELFFBQUlBLGdCQUFnQkcsU0FBcEIsRUFBK0I7QUFDN0IsYUFBTyxLQUFQO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBaEIsY0FBVUssS0FBS0osTUFBTCxHQUFjSSxLQUFLUyxRQUFuQixHQUE4QlQsS0FBS08sUUFBN0M7QUFDRDs7QUFFRDtBQUNBLE1BQUlLLGFBQWEsQ0FBakI7QUFDQSxPQUFLLElBQUlQLEtBQUksQ0FBYixFQUFnQkEsS0FBSWxCLE1BQU1OLE1BQTFCLEVBQWtDd0IsSUFBbEMsRUFBdUM7QUFDckMsUUFBSUwsUUFBT2IsTUFBTWtCLEVBQU4sQ0FBWDtBQUFBLFFBQ0lKLFNBQVFELE1BQUtTLFFBQUwsR0FBZ0JULE1BQUtKLE1BQXJCLEdBQThCZ0IsVUFBOUIsR0FBMkMsQ0FEdkQ7QUFFQUEsa0JBQWNaLE1BQUthLFFBQUwsR0FBZ0JiLE1BQUtPLFFBQW5DOztBQUVBLFFBQUlOLFNBQVEsQ0FBWixFQUFlO0FBQUU7QUFDZkEsZUFBUSxDQUFSO0FBQ0Q7O0FBRUQsU0FBSyxJQUFJQyxJQUFJLENBQWIsRUFBZ0JBLElBQUlGLE1BQUtqQixLQUFMLENBQVdGLE1BQS9CLEVBQXVDcUIsR0FBdkMsRUFBNEM7QUFDMUMsVUFBSVosT0FBT1UsTUFBS2pCLEtBQUwsQ0FBV21CLENBQVgsQ0FBWDtBQUFBLFVBQ0lYLFlBQWFELEtBQUtULE1BQUwsR0FBYyxDQUFkLEdBQWtCUyxLQUFLLENBQUwsQ0FBbEIsR0FBNEIsR0FEN0M7QUFBQSxVQUVJYSxVQUFXYixLQUFLVCxNQUFMLEdBQWMsQ0FBZCxHQUFrQlMsS0FBS2MsTUFBTCxDQUFZLENBQVosQ0FBbEIsR0FBbUNkLElBRmxEO0FBQUEsVUFHSXdCLFlBQVlkLE1BQUtlLGNBQUwsQ0FBb0JiLENBQXBCLENBSGhCOztBQUtBLFVBQUlYLGNBQWMsR0FBbEIsRUFBdUI7QUFDckJVO0FBQ0QsT0FGRCxNQUVPLElBQUlWLGNBQWMsR0FBbEIsRUFBdUI7QUFDNUJSLGNBQU1pQyxNQUFOLENBQWFmLE1BQWIsRUFBb0IsQ0FBcEI7QUFDQWhCLG1CQUFXK0IsTUFBWCxDQUFrQmYsTUFBbEIsRUFBeUIsQ0FBekI7QUFDRjtBQUNDLE9BSk0sTUFJQSxJQUFJVixjQUFjLEdBQWxCLEVBQXVCO0FBQzVCUixjQUFNaUMsTUFBTixDQUFhZixNQUFiLEVBQW9CLENBQXBCLEVBQXVCRSxPQUF2QjtBQUNBbEIsbUJBQVcrQixNQUFYLENBQWtCZixNQUFsQixFQUF5QixDQUF6QixFQUE0QmEsU0FBNUI7QUFDQWI7QUFDRCxPQUpNLE1BSUEsSUFBSVYsY0FBYyxJQUFsQixFQUF3QjtBQUM3QixZQUFJMEIsb0JBQW9CakIsTUFBS2pCLEtBQUwsQ0FBV21CLElBQUksQ0FBZixJQUFvQkYsTUFBS2pCLEtBQUwsQ0FBV21CLElBQUksQ0FBZixFQUFrQixDQUFsQixDQUFwQixHQUEyQyxJQUFuRTtBQUNBLFlBQUllLHNCQUFzQixHQUExQixFQUErQjtBQUM3QnBCLHdCQUFjLElBQWQ7QUFDRCxTQUZELE1BRU8sSUFBSW9CLHNCQUFzQixHQUExQixFQUErQjtBQUNwQ25CLHFCQUFXLElBQVg7QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFFRDtBQUNBLE1BQUlELFdBQUosRUFBaUI7QUFDZixXQUFPLENBQUNkLE1BQU1BLE1BQU1GLE1BQU4sR0FBZSxDQUFyQixDQUFSLEVBQWlDO0FBQy9CRSxZQUFNbUMsR0FBTjtBQUNBakMsaUJBQVdpQyxHQUFYO0FBQ0Q7QUFDRixHQUxELE1BS08sSUFBSXBCLFFBQUosRUFBYztBQUNuQmYsVUFBTW9DLElBQU4sQ0FBVyxFQUFYO0FBQ0FsQyxlQUFXa0MsSUFBWCxDQUFnQixJQUFoQjtBQUNEO0FBQ0QsT0FBSyxJQUFJQyxLQUFLLENBQWQsRUFBaUJBLEtBQUtyQyxNQUFNRixNQUFOLEdBQWUsQ0FBckMsRUFBd0N1QyxJQUF4QyxFQUE4QztBQUM1Q3JDLFVBQU1xQyxFQUFOLElBQVlyQyxNQUFNcUMsRUFBTixJQUFZbkMsV0FBV21DLEVBQVgsQ0FBeEI7QUFDRDtBQUNELFNBQU9yQyxNQUFNc0MsSUFBTixDQUFXLEVBQVgsQ0FBUDtBQUNEOztBQUVEO0FBQ08sU0FBUzlDLFlBQVQsQ0FBc0JFLE9BQXRCLEVBQStCQyxPQUEvQixFQUF3QztBQUM3QyxNQUFJLE9BQU9ELE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7QUFDL0JBLGNBQVUsd0VBQVdBLE9BQVgsQ0FBVjtBQUNEOztBQUVELE1BQUk2QyxlQUFlLENBQW5CO0FBQ0EsV0FBU0MsWUFBVCxHQUF3QjtBQUN0QixRQUFJQyxRQUFRL0MsUUFBUTZDLGNBQVIsQ0FBWjtBQUNBLFFBQUksQ0FBQ0UsS0FBTCxFQUFZO0FBQ1YsYUFBTzlDLFFBQVErQyxRQUFSLEVBQVA7QUFDRDs7QUFFRC9DLFlBQVFnRCxRQUFSLENBQWlCRixLQUFqQixFQUF3QixVQUFTRyxHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDMUMsVUFBSUQsR0FBSixFQUFTO0FBQ1AsZUFBT2pELFFBQVErQyxRQUFSLENBQWlCRSxHQUFqQixDQUFQO0FBQ0Q7O0FBRUQsVUFBSUUsaUJBQWlCdkQsV0FBV3NELElBQVgsRUFBaUJKLEtBQWpCLEVBQXdCOUMsT0FBeEIsQ0FBckI7QUFDQUEsY0FBUW9ELE9BQVIsQ0FBZ0JOLEtBQWhCLEVBQXVCSyxjQUF2QixFQUF1QyxVQUFTRixHQUFULEVBQWM7QUFDbkQsWUFBSUEsR0FBSixFQUFTO0FBQ1AsaUJBQU9qRCxRQUFRK0MsUUFBUixDQUFpQkUsR0FBakIsQ0FBUDtBQUNEOztBQUVESjtBQUNELE9BTkQ7QUFPRCxLQWJEO0FBY0Q7QUFDREE7QUFDRCIsImZpbGUiOiJhcHBseS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5pbXBvcnQgZGlzdGFuY2VJdGVyYXRvciBmcm9tICcuLi91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgIH1cblxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIGlucHV0XG4gIGxldCBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgIGRlbGltaXRlcnMgPSBzb3VyY2UubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuXG4gICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgKChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkgPT4gbGluZSA9PT0gcGF0Y2hDb250ZW50KSxcbiAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgICAgbWluTGluZSA9IDAsXG4gICAgICBvZmZzZXQgPSAwLFxuXG4gICAgICByZW1vdmVFT0ZOTCxcbiAgICAgIGFkZEVPRk5MO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgZXhhY3RseSBmaXRzIG9uIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSAobGluZS5sZW5ndGggPiAwID8gbGluZVswXSA6ICcgJyksXG4gICAgICAgICAgY29udGVudCA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUpO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgLy8gQ29udGV4dCBzYW5pdHkgY2hlY2tcbiAgICAgICAgaWYgKCFjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgIGVycm9yQ291bnQrKztcblxuICAgICAgICAgIGlmIChlcnJvckNvdW50ID4gZnV6ekZhY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b1BvcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGh1bmsgPSBodW5rc1tpXSxcbiAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcblxuICAgIGxldCBpdGVyYXRvciA9IGRpc3RhbmNlSXRlcmF0b3IodG9Qb3MsIG1pbkxpbmUsIG1heExpbmUpO1xuXG4gICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuICAgICAgaWYgKGh1bmtGaXRzKGh1bmssIHRvUG9zICsgbG9jYWxPZmZzZXQpKSB7XG4gICAgICAgIGh1bmsub2Zmc2V0ID0gb2Zmc2V0ICs9IGxvY2FsT2Zmc2V0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcbiAgICBtaW5MaW5lID0gaHVuay5vZmZzZXQgKyBodW5rLm9sZFN0YXJ0ICsgaHVuay5vbGRMaW5lcztcbiAgfVxuXG4gIC8vIEFwcGx5IHBhdGNoIGh1bmtzXG4gIGxldCBkaWZmT2Zmc2V0ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBodW5rID0gaHVua3NbaV0sXG4gICAgICAgIHRvUG9zID0gaHVuay5vbGRTdGFydCArIGh1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG4gICAgZGlmZk9mZnNldCArPSBodW5rLm5ld0xpbmVzIC0gaHVuay5vbGRMaW5lcztcblxuICAgIGlmICh0b1BvcyA8IDApIHsgLy8gQ3JlYXRpbmcgYSBuZXcgZmlsZVxuICAgICAgdG9Qb3MgPSAwO1xuICAgIH1cblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IGxpbmUgPSBodW5rLmxpbmVzW2pdLFxuICAgICAgICAgIG9wZXJhdGlvbiA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnKSxcbiAgICAgICAgICBjb250ZW50ID0gKGxpbmUubGVuZ3RoID4gMCA/IGxpbmUuc3Vic3RyKDEpIDogbGluZSksXG4gICAgICAgICAgZGVsaW1pdGVyID0gaHVuay5saW5lZGVsaW1pdGVyc1tqXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgIHRvUG9zKys7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAxKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMCwgY29udGVudCk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuICAgICAgICB0b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICBsZXQgcHJldmlvdXNPcGVyYXRpb24gPSBodW5rLmxpbmVzW2ogLSAxXSA/IGh1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcbiAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICByZW1vdmVFT0ZOTCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuICBmb3IgKGxldCBfayA9IDA7IF9rIDwgbGluZXMubGVuZ3RoIC0gMTsgX2srKykge1xuICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuICB9XG4gIHJldHVybiBsaW5lcy5qb2luKCcnKTtcbn1cblxuLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgbGV0IGluZGV4ID0gdW5pRGlmZltjdXJyZW50SW5kZXgrK107XG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHByb2Nlc3NJbmRleCgpO1xufVxuIl19
|
||
|
||
|
||
/***/ }),
|
||
/* 11 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports. /*istanbul ignore end*/parsePatch = parsePatch;
|
||
function parsePatch(uniDiff) {
|
||
/*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
||
var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/),
|
||
delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [],
|
||
list = [],
|
||
i = 0;
|
||
|
||
function parseIndex() {
|
||
var index = {};
|
||
list.push(index);
|
||
|
||
// Parse diff metadata
|
||
while (i < diffstr.length) {
|
||
var line = diffstr[i];
|
||
|
||
// File header found, end parsing diff metadata
|
||
if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) {
|
||
break;
|
||
}
|
||
|
||
// Diff index
|
||
var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line);
|
||
if (header) {
|
||
index.index = header[1];
|
||
}
|
||
|
||
i++;
|
||
}
|
||
|
||
// Parse file headers if they are defined. Unified diff requires them, but
|
||
// there's no technical issues to have an isolated hunk without file header
|
||
parseFileHeader(index);
|
||
parseFileHeader(index);
|
||
|
||
// Parse hunks
|
||
index.hunks = [];
|
||
|
||
while (i < diffstr.length) {
|
||
var _line = diffstr[i];
|
||
|
||
if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) {
|
||
break;
|
||
} else if (/^@@/.test(_line)) {
|
||
index.hunks.push(parseHunk());
|
||
} else if (_line && options.strict) {
|
||
// Ignore unexpected content unless in strict mode
|
||
throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));
|
||
} else {
|
||
i++;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Parses the --- and +++ headers, if none are found, no lines
|
||
// are consumed.
|
||
function parseFileHeader(index) {
|
||
var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]);
|
||
if (fileHeader) {
|
||
var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';
|
||
var data = fileHeader[2].split('\t', 2);
|
||
var fileName = data[0].replace(/\\\\/g, '\\');
|
||
if (/^".*"$/.test(fileName)) {
|
||
fileName = fileName.substr(1, fileName.length - 2);
|
||
}
|
||
index[keyPrefix + 'FileName'] = fileName;
|
||
index[keyPrefix + 'Header'] = (data[1] || '').trim();
|
||
|
||
i++;
|
||
}
|
||
}
|
||
|
||
// Parses a hunk
|
||
// This assumes that we are at the start of a hunk.
|
||
function parseHunk() {
|
||
var chunkHeaderIndex = i,
|
||
chunkHeaderLine = diffstr[i++],
|
||
chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
|
||
|
||
var hunk = {
|
||
oldStart: +chunkHeader[1],
|
||
oldLines: +chunkHeader[2] || 1,
|
||
newStart: +chunkHeader[3],
|
||
newLines: +chunkHeader[4] || 1,
|
||
lines: [],
|
||
linedelimiters: []
|
||
};
|
||
|
||
var addCount = 0,
|
||
removeCount = 0;
|
||
for (; i < diffstr.length; i++) {
|
||
// Lines starting with '---' could be mistaken for the "remove line" operation
|
||
// But they could be the header for the next file. Therefore prune such cases out.
|
||
if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {
|
||
break;
|
||
}
|
||
var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];
|
||
|
||
if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') {
|
||
hunk.lines.push(diffstr[i]);
|
||
hunk.linedelimiters.push(delimiters[i] || '\n');
|
||
|
||
if (operation === '+') {
|
||
addCount++;
|
||
} else if (operation === '-') {
|
||
removeCount++;
|
||
} else if (operation === ' ') {
|
||
addCount++;
|
||
removeCount++;
|
||
}
|
||
} else {
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Handle the empty block count case
|
||
if (!addCount && hunk.newLines === 1) {
|
||
hunk.newLines = 0;
|
||
}
|
||
if (!removeCount && hunk.oldLines === 1) {
|
||
hunk.oldLines = 0;
|
||
}
|
||
|
||
// Perform optional sanity checking
|
||
if (options.strict) {
|
||
if (addCount !== hunk.newLines) {
|
||
throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
|
||
}
|
||
if (removeCount !== hunk.oldLines) {
|
||
throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
|
||
}
|
||
}
|
||
|
||
return hunk;
|
||
}
|
||
|
||
while (i < diffstr.length) {
|
||
parseIndex();
|
||
}
|
||
|
||
return list;
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9wYXJzZS5qcyJdLCJuYW1lcyI6WyJwYXJzZVBhdGNoIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJkaWZmc3RyIiwic3BsaXQiLCJkZWxpbWl0ZXJzIiwibWF0Y2giLCJsaXN0IiwiaSIsInBhcnNlSW5kZXgiLCJpbmRleCIsInB1c2giLCJsZW5ndGgiLCJsaW5lIiwidGVzdCIsImhlYWRlciIsImV4ZWMiLCJwYXJzZUZpbGVIZWFkZXIiLCJodW5rcyIsInBhcnNlSHVuayIsInN0cmljdCIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImZpbGVIZWFkZXIiLCJrZXlQcmVmaXgiLCJkYXRhIiwiZmlsZU5hbWUiLCJyZXBsYWNlIiwic3Vic3RyIiwidHJpbSIsImNodW5rSGVhZGVySW5kZXgiLCJjaHVua0hlYWRlckxpbmUiLCJjaHVua0hlYWRlciIsImh1bmsiLCJvbGRTdGFydCIsIm9sZExpbmVzIiwibmV3U3RhcnQiLCJuZXdMaW5lcyIsImxpbmVzIiwibGluZWRlbGltaXRlcnMiLCJhZGRDb3VudCIsInJlbW92ZUNvdW50IiwiaW5kZXhPZiIsIm9wZXJhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7O2dDQUFnQkEsVSxHQUFBQSxVO0FBQVQsU0FBU0EsVUFBVCxDQUFvQkMsT0FBcEIsRUFBMkM7QUFBQSxzREFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUNoRCxNQUFJQyxVQUFVRixRQUFRRyxLQUFSLENBQWMscUJBQWQsQ0FBZDtBQUFBLE1BQ0lDLGFBQWFKLFFBQVFLLEtBQVIsQ0FBYyxzQkFBZCxLQUF5QyxFQUQxRDtBQUFBLE1BRUlDLE9BQU8sRUFGWDtBQUFBLE1BR0lDLElBQUksQ0FIUjs7QUFLQSxXQUFTQyxVQUFULEdBQXNCO0FBQ3BCLFFBQUlDLFFBQVEsRUFBWjtBQUNBSCxTQUFLSSxJQUFMLENBQVVELEtBQVY7O0FBRUE7QUFDQSxXQUFPRixJQUFJTCxRQUFRUyxNQUFuQixFQUEyQjtBQUN6QixVQUFJQyxPQUFPVixRQUFRSyxDQUFSLENBQVg7O0FBRUE7QUFDQSxVQUFJLHdCQUF3Qk0sSUFBeEIsQ0FBNkJELElBQTdCLENBQUosRUFBd0M7QUFDdEM7QUFDRDs7QUFFRDtBQUNBLFVBQUlFLFNBQVUsMENBQUQsQ0FBNkNDLElBQTdDLENBQWtESCxJQUFsRCxDQUFiO0FBQ0EsVUFBSUUsTUFBSixFQUFZO0FBQ1ZMLGNBQU1BLEtBQU4sR0FBY0ssT0FBTyxDQUFQLENBQWQ7QUFDRDs7QUFFRFA7QUFDRDs7QUFFRDtBQUNBO0FBQ0FTLG9CQUFnQlAsS0FBaEI7QUFDQU8sb0JBQWdCUCxLQUFoQjs7QUFFQTtBQUNBQSxVQUFNUSxLQUFOLEdBQWMsRUFBZDs7QUFFQSxXQUFPVixJQUFJTCxRQUFRUyxNQUFuQixFQUEyQjtBQUN6QixVQUFJQyxRQUFPVixRQUFRSyxDQUFSLENBQVg7O0FBRUEsVUFBSSxpQ0FBaUNNLElBQWpDLENBQXNDRCxLQUF0QyxDQUFKLEVBQWlEO0FBQy9DO0FBQ0QsT0FGRCxNQUVPLElBQUksTUFBTUMsSUFBTixDQUFXRCxLQUFYLENBQUosRUFBc0I7QUFDM0JILGNBQU1RLEtBQU4sQ0FBWVAsSUFBWixDQUFpQlEsV0FBakI7QUFDRCxPQUZNLE1BRUEsSUFBSU4sU0FBUVgsUUFBUWtCLE1BQXBCLEVBQTRCO0FBQ2pDO0FBQ0EsY0FBTSxJQUFJQyxLQUFKLENBQVUsbUJBQW1CYixJQUFJLENBQXZCLElBQTRCLEdBQTVCLEdBQWtDYyxLQUFLQyxTQUFMLENBQWVWLEtBQWYsQ0FBNUMsQ0FBTjtBQUNELE9BSE0sTUFHQTtBQUNMTDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRDtBQUNBO0FBQ0EsV0FBU1MsZUFBVCxDQUF5QlAsS0FBekIsRUFBZ0M7QUFDOUIsUUFBTWMsYUFBYyx1QkFBRCxDQUEwQlIsSUFBMUIsQ0FBK0JiLFFBQVFLLENBQVIsQ0FBL0IsQ0FBbkI7QUFDQSxRQUFJZ0IsVUFBSixFQUFnQjtBQUNkLFVBQUlDLFlBQVlELFdBQVcsQ0FBWCxNQUFrQixLQUFsQixHQUEwQixLQUExQixHQUFrQyxLQUFsRDtBQUNBLFVBQU1FLE9BQU9GLFdBQVcsQ0FBWCxFQUFjcEIsS0FBZCxDQUFvQixJQUFwQixFQUEwQixDQUExQixDQUFiO0FBQ0EsVUFBSXVCLFdBQVdELEtBQUssQ0FBTCxFQUFRRSxPQUFSLENBQWdCLE9BQWhCLEVBQXlCLElBQXpCLENBQWY7QUFDQSxVQUFJLFNBQVNkLElBQVQsQ0FBY2EsUUFBZCxDQUFKLEVBQTZCO0FBQzNCQSxtQkFBV0EsU0FBU0UsTUFBVCxDQUFnQixDQUFoQixFQUFtQkYsU0FBU2YsTUFBVCxHQUFrQixDQUFyQyxDQUFYO0FBQ0Q7QUFDREYsWUFBTWUsWUFBWSxVQUFsQixJQUFnQ0UsUUFBaEM7QUFDQWpCLFlBQU1lLFlBQVksUUFBbEIsSUFBOEIsQ0FBQ0MsS0FBSyxDQUFMLEtBQVcsRUFBWixFQUFnQkksSUFBaEIsRUFBOUI7O0FBRUF0QjtBQUNEO0FBQ0Y7O0FBRUQ7QUFDQTtBQUNBLFdBQVNXLFNBQVQsR0FBcUI7QUFDbkIsUUFBSVksbUJBQW1CdkIsQ0FBdkI7QUFBQSxRQUNJd0Isa0JBQWtCN0IsUUFBUUssR0FBUixDQUR0QjtBQUFBLFFBRUl5QixjQUFjRCxnQkFBZ0I1QixLQUFoQixDQUFzQiw0Q0FBdEIsQ0FGbEI7O0FBSUEsUUFBSThCLE9BQU87QUFDVEMsZ0JBQVUsQ0FBQ0YsWUFBWSxDQUFaLENBREY7QUFFVEcsZ0JBQVUsQ0FBQ0gsWUFBWSxDQUFaLENBQUQsSUFBbUIsQ0FGcEI7QUFHVEksZ0JBQVUsQ0FBQ0osWUFBWSxDQUFaLENBSEY7QUFJVEssZ0JBQVUsQ0FBQ0wsWUFBWSxDQUFaLENBQUQsSUFBbUIsQ0FKcEI7QUFLVE0sYUFBTyxFQUxFO0FBTVRDLHNCQUFnQjtBQU5QLEtBQVg7O0FBU0EsUUFBSUMsV0FBVyxDQUFmO0FBQUEsUUFDSUMsY0FBYyxDQURsQjtBQUVBLFdBQU9sQyxJQUFJTCxRQUFRUyxNQUFuQixFQUEyQkosR0FBM0IsRUFBZ0M7QUFDOUI7QUFDQTtBQUNBLFVBQUlMLFFBQVFLLENBQVIsRUFBV21DLE9BQVgsQ0FBbUIsTUFBbkIsTUFBK0IsQ0FBL0IsSUFDTW5DLElBQUksQ0FBSixHQUFRTCxRQUFRUyxNQUR0QixJQUVLVCxRQUFRSyxJQUFJLENBQVosRUFBZW1DLE9BQWYsQ0FBdUIsTUFBdkIsTUFBbUMsQ0FGeEMsSUFHS3hDLFFBQVFLLElBQUksQ0FBWixFQUFlbUMsT0FBZixDQUF1QixJQUF2QixNQUFpQyxDQUgxQyxFQUc2QztBQUN6QztBQUNIO0FBQ0QsVUFBSUMsWUFBYXpDLFFBQVFLLENBQVIsRUFBV0ksTUFBWCxJQUFxQixDQUFyQixJQUEwQkosS0FBTUwsUUFBUVMsTUFBUixHQUFpQixDQUFsRCxHQUF3RCxHQUF4RCxHQUE4RFQsUUFBUUssQ0FBUixFQUFXLENBQVgsQ0FBOUU7O0FBRUEsVUFBSW9DLGNBQWMsR0FBZCxJQUFxQkEsY0FBYyxHQUFuQyxJQUEwQ0EsY0FBYyxHQUF4RCxJQUErREEsY0FBYyxJQUFqRixFQUF1RjtBQUNyRlYsYUFBS0ssS0FBTCxDQUFXNUIsSUFBWCxDQUFnQlIsUUFBUUssQ0FBUixDQUFoQjtBQUNBMEIsYUFBS00sY0FBTCxDQUFvQjdCLElBQXBCLENBQXlCTixXQUFXRyxDQUFYLEtBQWlCLElBQTFDOztBQUVBLFlBQUlvQyxjQUFjLEdBQWxCLEVBQXVCO0FBQ3JCSDtBQUNELFNBRkQsTUFFTyxJQUFJRyxjQUFjLEdBQWxCLEVBQXVCO0FBQzVCRjtBQUNELFNBRk0sTUFFQSxJQUFJRSxjQUFjLEdBQWxCLEVBQXVCO0FBQzVCSDtBQUNBQztBQUNEO0FBQ0YsT0FaRCxNQVlPO0FBQ0w7QUFDRDtBQUNGOztBQUVEO0FBQ0EsUUFBSSxDQUFDRCxRQUFELElBQWFQLEtBQUtJLFFBQUwsS0FBa0IsQ0FBbkMsRUFBc0M7QUFDcENKLFdBQUtJLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDRDtBQUNELFFBQUksQ0FBQ0ksV0FBRCxJQUFnQlIsS0FBS0UsUUFBTCxLQUFrQixDQUF0QyxFQUF5QztBQUN2Q0YsV0FBS0UsUUFBTCxHQUFnQixDQUFoQjtBQUNEOztBQUVEO0FBQ0EsUUFBSWxDLFFBQVFrQixNQUFaLEVBQW9CO0FBQ2xCLFVBQUlxQixhQUFhUCxLQUFLSSxRQUF0QixFQUFnQztBQUM5QixjQUFNLElBQUlqQixLQUFKLENBQVUsc0RBQXNEVSxtQkFBbUIsQ0FBekUsQ0FBVixDQUFOO0FBQ0Q7QUFDRCxVQUFJVyxnQkFBZ0JSLEtBQUtFLFFBQXpCLEVBQW1DO0FBQ2pDLGNBQU0sSUFBSWYsS0FBSixDQUFVLHdEQUF3RFUsbUJBQW1CLENBQTNFLENBQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsV0FBT0csSUFBUDtBQUNEOztBQUVELFNBQU8xQixJQUFJTCxRQUFRUyxNQUFuQixFQUEyQjtBQUN6Qkg7QUFDRDs7QUFFRCxTQUFPRixJQUFQO0FBQ0QiLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcGFyc2VQYXRjaCh1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGRpZmZzdHIgPSB1bmlEaWZmLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuICAgICAgZGVsaW1pdGVycyA9IHVuaURpZmYubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgbGlzdCA9IFtdLFxuICAgICAgaSA9IDA7XG5cbiAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcbiAgICBsZXQgaW5kZXggPSB7fTtcbiAgICBsaXN0LnB1c2goaW5kZXgpO1xuXG4gICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcbiAgICAgIGlmICgvXihcXC1cXC1cXC18XFwrXFwrXFwrfEBAKVxccy8udGVzdChsaW5lKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gRGlmZiBpbmRleFxuICAgICAgbGV0IGhlYWRlciA9ICgvXig/OkluZGV4OnxkaWZmKD86IC1yIFxcdyspKylcXHMrKC4rPylcXHMqJC8pLmV4ZWMobGluZSk7XG4gICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgIGluZGV4LmluZGV4ID0gaGVhZGVyWzFdO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgZmlsZSBoZWFkZXJzIGlmIHRoZXkgYXJlIGRlZmluZWQuIFVuaWZpZWQgZGlmZiByZXF1aXJlcyB0aGVtLCBidXRcbiAgICAvLyB0aGVyZSdzIG5vIHRlY2huaWNhbCBpc3N1ZXMgdG8gaGF2ZSBhbiBpc29sYXRlZCBodW5rIHdpdGhvdXQgZmlsZSBoZWFkZXJcbiAgICBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpO1xuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG5cbiAgICAvLyBQYXJzZSBodW5rc1xuICAgIGluZGV4Lmh1bmtzID0gW107XG5cbiAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgICBsZXQgbGluZSA9IGRpZmZzdHJbaV07XG5cbiAgICAgIGlmICgvXihJbmRleDp8ZGlmZnxcXC1cXC1cXC18XFwrXFwrXFwrKVxccy8udGVzdChsaW5lKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoL15AQC8udGVzdChsaW5lKSkge1xuICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgIH0gZWxzZSBpZiAobGluZSAmJiBvcHRpb25zLnN0cmljdCkge1xuICAgICAgICAvLyBJZ25vcmUgdW5leHBlY3RlZCBjb250ZW50IHVubGVzcyBpbiBzdHJpY3QgbW9kZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGluZSAnICsgKGkgKyAxKSArICcgJyArIEpTT04uc3RyaW5naWZ5KGxpbmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZXMgdGhlIC0tLSBhbmQgKysrIGhlYWRlcnMsIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBsaW5lc1xuICAvLyBhcmUgY29uc3VtZWQuXG4gIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuICAgIGNvbnN0IGZpbGVIZWFkZXIgPSAoL14oLS0tfFxcK1xcK1xcKylcXHMrKC4qKSQvKS5leGVjKGRpZmZzdHJbaV0pO1xuICAgIGlmIChmaWxlSGVhZGVyKSB7XG4gICAgICBsZXQga2V5UHJlZml4ID0gZmlsZUhlYWRlclsxXSA9PT0gJy0tLScgPyAnb2xkJyA6ICduZXcnO1xuICAgICAgY29uc3QgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuICAgICAgaWYgKC9eXCIuKlwiJC8udGVzdChmaWxlTmFtZSkpIHtcbiAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHIoMSwgZmlsZU5hbWUubGVuZ3RoIC0gMik7XG4gICAgICB9XG4gICAgICBpbmRleFtrZXlQcmVmaXggKyAnRmlsZU5hbWUnXSA9IGZpbGVOYW1lO1xuICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0hlYWRlciddID0gKGRhdGFbMV0gfHwgJycpLnRyaW0oKTtcblxuICAgICAgaSsrO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhcnNlcyBhIGh1bmtcbiAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGh1bmsuXG4gIGZ1bmN0aW9uIHBhcnNlSHVuaygpIHtcbiAgICBsZXQgY2h1bmtIZWFkZXJJbmRleCA9IGksXG4gICAgICAgIGNodW5rSGVhZGVyTGluZSA9IGRpZmZzdHJbaSsrXSxcbiAgICAgICAgY2h1bmtIZWFkZXIgPSBjaHVua0hlYWRlckxpbmUuc3BsaXQoL0BAIC0oXFxkKykoPzosKFxcZCspKT8gXFwrKFxcZCspKD86LChcXGQrKSk/IEBALyk7XG5cbiAgICBsZXQgaHVuayA9IHtcbiAgICAgIG9sZFN0YXJ0OiArY2h1bmtIZWFkZXJbMV0sXG4gICAgICBvbGRMaW5lczogK2NodW5rSGVhZGVyWzJdIHx8IDEsXG4gICAgICBuZXdTdGFydDogK2NodW5rSGVhZGVyWzNdLFxuICAgICAgbmV3TGluZXM6ICtjaHVua0hlYWRlcls0XSB8fCAxLFxuICAgICAgbGluZXM6IFtdLFxuICAgICAgbGluZWRlbGltaXRlcnM6IFtdXG4gICAgfTtcblxuICAgIGxldCBhZGRDb3VudCA9IDAsXG4gICAgICAgIHJlbW92ZUNvdW50ID0gMDtcbiAgICBmb3IgKDsgaSA8IGRpZmZzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggJy0tLScgY291bGQgYmUgbWlzdGFrZW4gZm9yIHRoZSBcInJlbW92ZSBsaW5lXCIgb3BlcmF0aW9uXG4gICAgICAvLyBCdXQgdGhleSBjb3VsZCBiZSB0aGUgaGVhZGVyIGZvciB0aGUgbmV4dCBmaWxlLiBUaGVyZWZvcmUgcHJ1bmUgc3VjaCBjYXNlcyBvdXQuXG4gICAgICBpZiAoZGlmZnN0cltpXS5pbmRleE9mKCctLS0gJykgPT09IDBcbiAgICAgICAgICAgICYmIChpICsgMiA8IGRpZmZzdHIubGVuZ3RoKVxuICAgICAgICAgICAgJiYgZGlmZnN0cltpICsgMV0uaW5kZXhPZignKysrICcpID09PSAwXG4gICAgICAgICAgICAmJiBkaWZmc3RyW2kgKyAyXS5pbmRleE9mKCdAQCcpID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBsZXQgb3BlcmF0aW9uID0gKGRpZmZzdHJbaV0ubGVuZ3RoID09IDAgJiYgaSAhPSAoZGlmZnN0ci5sZW5ndGggLSAxKSkgPyAnICcgOiBkaWZmc3RyW2ldWzBdO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnKycgfHwgb3BlcmF0aW9uID09PSAnLScgfHwgb3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnXFxcXCcpIHtcbiAgICAgICAgaHVuay5saW5lcy5wdXNoKGRpZmZzdHJbaV0pO1xuICAgICAgICBodW5rLmxpbmVkZWxpbWl0ZXJzLnB1c2goZGVsaW1pdGVyc1tpXSB8fCAnXFxuJyk7XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcbiAgICAgICAgICBhZGRDb3VudCsrO1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgZW1wdHkgYmxvY2sgY291bnQgY2FzZVxuICAgIGlmICghYWRkQ291bnQgJiYgaHVuay5uZXdMaW5lcyA9PT0gMSkge1xuICAgICAgaHVuay5uZXdMaW5lcyA9IDA7XG4gICAgfVxuICAgIGlmICghcmVtb3ZlQ291bnQgJiYgaHVuay5vbGRMaW5lcyA9PT0gMSkge1xuICAgICAgaHVuay5vbGRMaW5lcyA9IDA7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBvcHRpb25hbCBzYW5pdHkgY2hlY2tpbmdcbiAgICBpZiAob3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGlmIChhZGRDb3VudCAhPT0gaHVuay5uZXdMaW5lcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZGVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZW1vdmVDb3VudCAhPT0gaHVuay5vbGRMaW5lcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlbW92ZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBodW5rO1xuICB9XG5cbiAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgIHBhcnNlSW5kZXgoKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIl19
|
||
|
||
|
||
/***/ }),
|
||
/* 12 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*istanbul ignore start*/"use strict";
|
||
|
||
exports.__esModule = true;
|
||
|
||
exports["default"] = /*istanbul ignore end*/function (start, minLine, maxLine) {
|
||
var wantForward = true,
|
||
backwardExhausted = false,
|
||
forwardExhausted = false,
|
||
localOffset = 1;
|
||
|
||
return function iterator() {
|
||
if (wantForward && !forwardExhausted) {
|
||
if (backwardExhausted) {
|
||
localOffset++;
|
||
} else {
|
||
wantForward = false;
|
||
}
|
||
|
||
// Check if trying to fit beyond text length, and if not, check it fits
|
||
// after offset location (or desired location on first iteration)
|
||
if (start + localOffset <= maxLine) {
|
||
return localOffset;
|
||
}
|
||
|
||
forwardExhausted = true;
|
||
}
|
||
|
||
if (!backwardExhausted) {
|
||
if (!forwardExhausted) {
|
||
wantForward = true;
|
||
}
|
||
|
||
// Check if trying to fit before text beginning, and if not, check it fits
|
||
// before offset location
|
||
if (minLine <= start - localOffset) {
|
||
return -localOffset++;
|
||
}
|
||
|
||
backwardExhausted = true;
|
||
return iterator();
|
||
}
|
||
|
||
// We tried to fit hunk before text beginning and beyond text length, then
|
||
// hunk can't fit on the text. Return undefined
|
||
};
|
||
};
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbInN0YXJ0IiwibWluTGluZSIsIm1heExpbmUiLCJ3YW50Rm9yd2FyZCIsImJhY2t3YXJkRXhoYXVzdGVkIiwiZm9yd2FyZEV4aGF1c3RlZCIsImxvY2FsT2Zmc2V0IiwiaXRlcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7NENBR2UsVUFBU0EsS0FBVCxFQUFnQkMsT0FBaEIsRUFBeUJDLE9BQXpCLEVBQWtDO0FBQy9DLE1BQUlDLGNBQWMsSUFBbEI7QUFBQSxNQUNJQyxvQkFBb0IsS0FEeEI7QUFBQSxNQUVJQyxtQkFBbUIsS0FGdkI7QUFBQSxNQUdJQyxjQUFjLENBSGxCOztBQUtBLFNBQU8sU0FBU0MsUUFBVCxHQUFvQjtBQUN6QixRQUFJSixlQUFlLENBQUNFLGdCQUFwQixFQUFzQztBQUNwQyxVQUFJRCxpQkFBSixFQUF1QjtBQUNyQkU7QUFDRCxPQUZELE1BRU87QUFDTEgsc0JBQWMsS0FBZDtBQUNEOztBQUVEO0FBQ0E7QUFDQSxVQUFJSCxRQUFRTSxXQUFSLElBQXVCSixPQUEzQixFQUFvQztBQUNsQyxlQUFPSSxXQUFQO0FBQ0Q7O0FBRURELHlCQUFtQixJQUFuQjtBQUNEOztBQUVELFFBQUksQ0FBQ0QsaUJBQUwsRUFBd0I7QUFDdEIsVUFBSSxDQUFDQyxnQkFBTCxFQUF1QjtBQUNyQkYsc0JBQWMsSUFBZDtBQUNEOztBQUVEO0FBQ0E7QUFDQSxVQUFJRixXQUFXRCxRQUFRTSxXQUF2QixFQUFvQztBQUNsQyxlQUFPLENBQUNBLGFBQVI7QUFDRDs7QUFFREYsMEJBQW9CLElBQXBCO0FBQ0EsYUFBT0csVUFBUDtBQUNEOztBQUVEO0FBQ0E7QUFDRCxHQWxDRDtBQW1DRCxDIiwiZmlsZSI6ImRpc3RhbmNlLWl0ZXJhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIGxldCB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpdGVyYXRvcigpIHtcbiAgICBpZiAod2FudEZvcndhcmQgJiYgIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICBsb2NhbE9mZnNldCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZXlvbmQgdGV4dCBsZW5ndGgsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAoc3RhcnQgKyBsb2NhbE9mZnNldCA8PSBtYXhMaW5lKSB7XG4gICAgICAgIHJldHVybiBsb2NhbE9mZnNldDtcbiAgICAgIH1cblxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgaWYgKCFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGJlZm9yZSBvZmZzZXQgbG9jYXRpb25cbiAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgfVxuXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICB9XG5cbiAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmd0aCwgdGhlblxuICAgIC8vIGh1bmsgY2FuJ3QgZml0IG9uIHRoZSB0ZXh0LiBSZXR1cm4gdW5kZWZpbmVkXG4gIH07XG59XG4iXX0=
|
||
|
||
|
||
/***/ }),
|
||
/* 13 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports. /*istanbul ignore end*/calcLineCount = calcLineCount;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/merge = merge;
|
||
|
||
var /*istanbul ignore start*/_create = __webpack_require__(14) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
|
||
|
||
var /*istanbul ignore start*/_array = __webpack_require__(15) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
||
|
||
/*istanbul ignore end*/function calcLineCount(hunk) {
|
||
/*istanbul ignore start*/var _calcOldNewLineCount = /*istanbul ignore end*/calcOldNewLineCount(hunk.lines),
|
||
oldLines = _calcOldNewLineCount.oldLines,
|
||
newLines = _calcOldNewLineCount.newLines;
|
||
|
||
if (oldLines !== undefined) {
|
||
hunk.oldLines = oldLines;
|
||
} else {
|
||
delete hunk.oldLines;
|
||
}
|
||
|
||
if (newLines !== undefined) {
|
||
hunk.newLines = newLines;
|
||
} else {
|
||
delete hunk.newLines;
|
||
}
|
||
}
|
||
|
||
function merge(mine, theirs, base) {
|
||
mine = loadPatch(mine, base);
|
||
theirs = loadPatch(theirs, base);
|
||
|
||
var ret = {};
|
||
|
||
// For index we just let it pass through as it doesn't have any necessary meaning.
|
||
// Leaving sanity checks on this to the API consumer that may know more about the
|
||
// meaning in their own context.
|
||
if (mine.index || theirs.index) {
|
||
ret.index = mine.index || theirs.index;
|
||
}
|
||
|
||
if (mine.newFileName || theirs.newFileName) {
|
||
if (!fileNameChanged(mine)) {
|
||
// No header or no change in ours, use theirs (and ours if theirs does not exist)
|
||
ret.oldFileName = theirs.oldFileName || mine.oldFileName;
|
||
ret.newFileName = theirs.newFileName || mine.newFileName;
|
||
ret.oldHeader = theirs.oldHeader || mine.oldHeader;
|
||
ret.newHeader = theirs.newHeader || mine.newHeader;
|
||
} else if (!fileNameChanged(theirs)) {
|
||
// No header or no change in theirs, use ours
|
||
ret.oldFileName = mine.oldFileName;
|
||
ret.newFileName = mine.newFileName;
|
||
ret.oldHeader = mine.oldHeader;
|
||
ret.newHeader = mine.newHeader;
|
||
} else {
|
||
// Both changed... figure it out
|
||
ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);
|
||
ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);
|
||
ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);
|
||
ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);
|
||
}
|
||
}
|
||
|
||
ret.hunks = [];
|
||
|
||
var mineIndex = 0,
|
||
theirsIndex = 0,
|
||
mineOffset = 0,
|
||
theirsOffset = 0;
|
||
|
||
while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {
|
||
var mineCurrent = mine.hunks[mineIndex] || { oldStart: Infinity },
|
||
theirsCurrent = theirs.hunks[theirsIndex] || { oldStart: Infinity };
|
||
|
||
if (hunkBefore(mineCurrent, theirsCurrent)) {
|
||
// This patch does not overlap with any of the others, yay.
|
||
ret.hunks.push(cloneHunk(mineCurrent, mineOffset));
|
||
mineIndex++;
|
||
theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;
|
||
} else if (hunkBefore(theirsCurrent, mineCurrent)) {
|
||
// This patch does not overlap with any of the others, yay.
|
||
ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));
|
||
theirsIndex++;
|
||
mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;
|
||
} else {
|
||
// Overlap, merge as best we can
|
||
var mergedHunk = {
|
||
oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),
|
||
oldLines: 0,
|
||
newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),
|
||
newLines: 0,
|
||
lines: []
|
||
};
|
||
mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);
|
||
theirsIndex++;
|
||
mineIndex++;
|
||
|
||
ret.hunks.push(mergedHunk);
|
||
}
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
function loadPatch(param, base) {
|
||
if (typeof param === 'string') {
|
||
if (/^@@/m.test(param) || /^Index:/m.test(param)) {
|
||
return (/*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(param)[0]
|
||
);
|
||
}
|
||
|
||
if (!base) {
|
||
throw new Error('Must provide a base reference or pass in a patch');
|
||
}
|
||
return (/*istanbul ignore start*/(0, _create.structuredPatch) /*istanbul ignore end*/(undefined, undefined, base, param)
|
||
);
|
||
}
|
||
|
||
return param;
|
||
}
|
||
|
||
function fileNameChanged(patch) {
|
||
return patch.newFileName && patch.newFileName !== patch.oldFileName;
|
||
}
|
||
|
||
function selectField(index, mine, theirs) {
|
||
if (mine === theirs) {
|
||
return mine;
|
||
} else {
|
||
index.conflict = true;
|
||
return { mine: mine, theirs: theirs };
|
||
}
|
||
}
|
||
|
||
function hunkBefore(test, check) {
|
||
return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;
|
||
}
|
||
|
||
function cloneHunk(hunk, offset) {
|
||
return {
|
||
oldStart: hunk.oldStart, oldLines: hunk.oldLines,
|
||
newStart: hunk.newStart + offset, newLines: hunk.newLines,
|
||
lines: hunk.lines
|
||
};
|
||
}
|
||
|
||
function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {
|
||
// This will generally result in a conflicted hunk, but there are cases where the context
|
||
// is the only overlap where we can successfully merge the content here.
|
||
var mine = { offset: mineOffset, lines: mineLines, index: 0 },
|
||
their = { offset: theirOffset, lines: theirLines, index: 0 };
|
||
|
||
// Handle any leading content
|
||
insertLeading(hunk, mine, their);
|
||
insertLeading(hunk, their, mine);
|
||
|
||
// Now in the overlap content. Scan through and select the best changes from each.
|
||
while (mine.index < mine.lines.length && their.index < their.lines.length) {
|
||
var mineCurrent = mine.lines[mine.index],
|
||
theirCurrent = their.lines[their.index];
|
||
|
||
if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {
|
||
// Both modified ...
|
||
mutualChange(hunk, mine, their);
|
||
} else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {
|
||
/*istanbul ignore start*/var _hunk$lines;
|
||
|
||
/*istanbul ignore end*/ // Mine inserted
|
||
/*istanbul ignore start*/(_hunk$lines = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/collectChange(mine)));
|
||
} else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {
|
||
/*istanbul ignore start*/var _hunk$lines2;
|
||
|
||
/*istanbul ignore end*/ // Theirs inserted
|
||
/*istanbul ignore start*/(_hunk$lines2 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines2 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/collectChange(their)));
|
||
} else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {
|
||
// Mine removed or edited
|
||
removal(hunk, mine, their);
|
||
} else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {
|
||
// Their removed or edited
|
||
removal(hunk, their, mine, true);
|
||
} else if (mineCurrent === theirCurrent) {
|
||
// Context identity
|
||
hunk.lines.push(mineCurrent);
|
||
mine.index++;
|
||
their.index++;
|
||
} else {
|
||
// Context mismatch
|
||
conflict(hunk, collectChange(mine), collectChange(their));
|
||
}
|
||
}
|
||
|
||
// Now push anything that may be remaining
|
||
insertTrailing(hunk, mine);
|
||
insertTrailing(hunk, their);
|
||
|
||
calcLineCount(hunk);
|
||
}
|
||
|
||
function mutualChange(hunk, mine, their) {
|
||
var myChanges = collectChange(mine),
|
||
theirChanges = collectChange(their);
|
||
|
||
if (allRemoves(myChanges) && allRemoves(theirChanges)) {
|
||
// Special case for remove changes that are supersets of one another
|
||
if ( /*istanbul ignore start*/(0, _array.arrayStartsWith) /*istanbul ignore end*/(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {
|
||
/*istanbul ignore start*/var _hunk$lines3;
|
||
|
||
/*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines3 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines3 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/myChanges));
|
||
return;
|
||
} else if ( /*istanbul ignore start*/(0, _array.arrayStartsWith) /*istanbul ignore end*/(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {
|
||
/*istanbul ignore start*/var _hunk$lines4;
|
||
|
||
/*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines4 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines4 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/theirChanges));
|
||
return;
|
||
}
|
||
} else if ( /*istanbul ignore start*/(0, _array.arrayEqual) /*istanbul ignore end*/(myChanges, theirChanges)) {
|
||
/*istanbul ignore start*/var _hunk$lines5;
|
||
|
||
/*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines5 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines5 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/myChanges));
|
||
return;
|
||
}
|
||
|
||
conflict(hunk, myChanges, theirChanges);
|
||
}
|
||
|
||
function removal(hunk, mine, their, swap) {
|
||
var myChanges = collectChange(mine),
|
||
theirChanges = collectContext(their, myChanges);
|
||
if (theirChanges.merged) {
|
||
/*istanbul ignore start*/var _hunk$lines6;
|
||
|
||
/*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines6 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines6 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/theirChanges.merged));
|
||
} else {
|
||
conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);
|
||
}
|
||
}
|
||
|
||
function conflict(hunk, mine, their) {
|
||
hunk.conflict = true;
|
||
hunk.lines.push({
|
||
conflict: true,
|
||
mine: mine,
|
||
theirs: their
|
||
});
|
||
}
|
||
|
||
function insertLeading(hunk, insert, their) {
|
||
while (insert.offset < their.offset && insert.index < insert.lines.length) {
|
||
var line = insert.lines[insert.index++];
|
||
hunk.lines.push(line);
|
||
insert.offset++;
|
||
}
|
||
}
|
||
function insertTrailing(hunk, insert) {
|
||
while (insert.index < insert.lines.length) {
|
||
var line = insert.lines[insert.index++];
|
||
hunk.lines.push(line);
|
||
}
|
||
}
|
||
|
||
function collectChange(state) {
|
||
var ret = [],
|
||
operation = state.lines[state.index][0];
|
||
while (state.index < state.lines.length) {
|
||
var line = state.lines[state.index];
|
||
|
||
// Group additions that are immediately after subtractions and treat them as one "atomic" modify change.
|
||
if (operation === '-' && line[0] === '+') {
|
||
operation = '+';
|
||
}
|
||
|
||
if (operation === line[0]) {
|
||
ret.push(line);
|
||
state.index++;
|
||
} else {
|
||
break;
|
||
}
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
function collectContext(state, matchChanges) {
|
||
var changes = [],
|
||
merged = [],
|
||
matchIndex = 0,
|
||
contextChanges = false,
|
||
conflicted = false;
|
||
while (matchIndex < matchChanges.length && state.index < state.lines.length) {
|
||
var change = state.lines[state.index],
|
||
match = matchChanges[matchIndex];
|
||
|
||
// Once we've hit our add, then we are done
|
||
if (match[0] === '+') {
|
||
break;
|
||
}
|
||
|
||
contextChanges = contextChanges || change[0] !== ' ';
|
||
|
||
merged.push(match);
|
||
matchIndex++;
|
||
|
||
// Consume any additions in the other block as a conflict to attempt
|
||
// to pull in the remaining context after this
|
||
if (change[0] === '+') {
|
||
conflicted = true;
|
||
|
||
while (change[0] === '+') {
|
||
changes.push(change);
|
||
change = state.lines[++state.index];
|
||
}
|
||
}
|
||
|
||
if (match.substr(1) === change.substr(1)) {
|
||
changes.push(change);
|
||
state.index++;
|
||
} else {
|
||
conflicted = true;
|
||
}
|
||
}
|
||
|
||
if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {
|
||
conflicted = true;
|
||
}
|
||
|
||
if (conflicted) {
|
||
return changes;
|
||
}
|
||
|
||
while (matchIndex < matchChanges.length) {
|
||
merged.push(matchChanges[matchIndex++]);
|
||
}
|
||
|
||
return {
|
||
merged: merged,
|
||
changes: changes
|
||
};
|
||
}
|
||
|
||
function allRemoves(changes) {
|
||
return changes.reduce(function (prev, change) {
|
||
return prev && change[0] === '-';
|
||
}, true);
|
||
}
|
||
function skipRemoveSuperset(state, removeChanges, delta) {
|
||
for (var i = 0; i < delta; i++) {
|
||
var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);
|
||
if (state.lines[state.index + i] !== ' ' + changeContent) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
state.index += delta;
|
||
return true;
|
||
}
|
||
|
||
function calcOldNewLineCount(lines) {
|
||
var oldLines = 0;
|
||
var newLines = 0;
|
||
|
||
lines.forEach(function (line) {
|
||
if (typeof line !== 'string') {
|
||
var myCount = calcOldNewLineCount(line.mine);
|
||
var theirCount = calcOldNewLineCount(line.theirs);
|
||
|
||
if (oldLines !== undefined) {
|
||
if (myCount.oldLines === theirCount.oldLines) {
|
||
oldLines += myCount.oldLines;
|
||
} else {
|
||
oldLines = undefined;
|
||
}
|
||
}
|
||
|
||
if (newLines !== undefined) {
|
||
if (myCount.newLines === theirCount.newLines) {
|
||
newLines += myCount.newLines;
|
||
} else {
|
||
newLines = undefined;
|
||
}
|
||
}
|
||
} else {
|
||
if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {
|
||
newLines++;
|
||
}
|
||
if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {
|
||
oldLines++;
|
||
}
|
||
}
|
||
});
|
||
|
||
return { oldLines: oldLines, newLines: newLines };
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9tZXJnZS5qcyJdLCJuYW1lcyI6WyJjYWxjTGluZUNvdW50IiwibWVyZ2UiLCJodW5rIiwiY2FsY09sZE5ld0xpbmVDb3VudCIsImxpbmVzIiwib2xkTGluZXMiLCJuZXdMaW5lcyIsInVuZGVmaW5lZCIsIm1pbmUiLCJ0aGVpcnMiLCJiYXNlIiwibG9hZFBhdGNoIiwicmV0IiwiaW5kZXgiLCJuZXdGaWxlTmFtZSIsImZpbGVOYW1lQ2hhbmdlZCIsIm9sZEZpbGVOYW1lIiwib2xkSGVhZGVyIiwibmV3SGVhZGVyIiwic2VsZWN0RmllbGQiLCJodW5rcyIsIm1pbmVJbmRleCIsInRoZWlyc0luZGV4IiwibWluZU9mZnNldCIsInRoZWlyc09mZnNldCIsImxlbmd0aCIsIm1pbmVDdXJyZW50Iiwib2xkU3RhcnQiLCJJbmZpbml0eSIsInRoZWlyc0N1cnJlbnQiLCJodW5rQmVmb3JlIiwicHVzaCIsImNsb25lSHVuayIsIm1lcmdlZEh1bmsiLCJNYXRoIiwibWluIiwibmV3U3RhcnQiLCJtZXJnZUxpbmVzIiwicGFyYW0iLCJ0ZXN0IiwiRXJyb3IiLCJwYXRjaCIsImNvbmZsaWN0IiwiY2hlY2siLCJvZmZzZXQiLCJtaW5lTGluZXMiLCJ0aGVpck9mZnNldCIsInRoZWlyTGluZXMiLCJ0aGVpciIsImluc2VydExlYWRpbmciLCJ0aGVpckN1cnJlbnQiLCJtdXR1YWxDaGFuZ2UiLCJjb2xsZWN0Q2hhbmdlIiwicmVtb3ZhbCIsImluc2VydFRyYWlsaW5nIiwibXlDaGFuZ2VzIiwidGhlaXJDaGFuZ2VzIiwiYWxsUmVtb3ZlcyIsInNraXBSZW1vdmVTdXBlcnNldCIsInN3YXAiLCJjb2xsZWN0Q29udGV4dCIsIm1lcmdlZCIsImluc2VydCIsImxpbmUiLCJzdGF0ZSIsIm9wZXJhdGlvbiIsIm1hdGNoQ2hhbmdlcyIsImNoYW5nZXMiLCJtYXRjaEluZGV4IiwiY29udGV4dENoYW5nZXMiLCJjb25mbGljdGVkIiwiY2hhbmdlIiwibWF0Y2giLCJzdWJzdHIiLCJyZWR1Y2UiLCJwcmV2IiwicmVtb3ZlQ2hhbmdlcyIsImRlbHRhIiwiaSIsImNoYW5nZUNvbnRlbnQiLCJmb3JFYWNoIiwibXlDb3VudCIsInRoZWlyQ291bnQiXSwibWFwcGluZ3MiOiI7OztnQ0FLZ0JBLGEsR0FBQUEsYTt5REFnQkFDLEssR0FBQUEsSzs7QUFyQmhCOztBQUNBOztBQUVBOzs7O3VCQUVPLFNBQVNELGFBQVQsQ0FBdUJFLElBQXZCLEVBQTZCO0FBQUEsNkVBQ0xDLG9CQUFvQkQsS0FBS0UsS0FBekIsQ0FESztBQUFBLE1BQzNCQyxRQUQyQix3QkFDM0JBLFFBRDJCO0FBQUEsTUFDakJDLFFBRGlCLHdCQUNqQkEsUUFEaUI7O0FBR2xDLE1BQUlELGFBQWFFLFNBQWpCLEVBQTRCO0FBQzFCTCxTQUFLRyxRQUFMLEdBQWdCQSxRQUFoQjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU9ILEtBQUtHLFFBQVo7QUFDRDs7QUFFRCxNQUFJQyxhQUFhQyxTQUFqQixFQUE0QjtBQUMxQkwsU0FBS0ksUUFBTCxHQUFnQkEsUUFBaEI7QUFDRCxHQUZELE1BRU87QUFDTCxXQUFPSixLQUFLSSxRQUFaO0FBQ0Q7QUFDRjs7QUFFTSxTQUFTTCxLQUFULENBQWVPLElBQWYsRUFBcUJDLE1BQXJCLEVBQTZCQyxJQUE3QixFQUFtQztBQUN4Q0YsU0FBT0csVUFBVUgsSUFBVixFQUFnQkUsSUFBaEIsQ0FBUDtBQUNBRCxXQUFTRSxVQUFVRixNQUFWLEVBQWtCQyxJQUFsQixDQUFUOztBQUVBLE1BQUlFLE1BQU0sRUFBVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFJSixLQUFLSyxLQUFMLElBQWNKLE9BQU9JLEtBQXpCLEVBQWdDO0FBQzlCRCxRQUFJQyxLQUFKLEdBQVlMLEtBQUtLLEtBQUwsSUFBY0osT0FBT0ksS0FBakM7QUFDRDs7QUFFRCxNQUFJTCxLQUFLTSxXQUFMLElBQW9CTCxPQUFPSyxXQUEvQixFQUE0QztBQUMxQyxRQUFJLENBQUNDLGdCQUFnQlAsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQjtBQUNBSSxVQUFJSSxXQUFKLEdBQWtCUCxPQUFPTyxXQUFQLElBQXNCUixLQUFLUSxXQUE3QztBQUNBSixVQUFJRSxXQUFKLEdBQWtCTCxPQUFPSyxXQUFQLElBQXNCTixLQUFLTSxXQUE3QztBQUNBRixVQUFJSyxTQUFKLEdBQWdCUixPQUFPUSxTQUFQLElBQW9CVCxLQUFLUyxTQUF6QztBQUNBTCxVQUFJTSxTQUFKLEdBQWdCVCxPQUFPUyxTQUFQLElBQW9CVixLQUFLVSxTQUF6QztBQUNELEtBTkQsTUFNTyxJQUFJLENBQUNILGdCQUFnQk4sTUFBaEIsQ0FBTCxFQUE4QjtBQUNuQztBQUNBRyxVQUFJSSxXQUFKLEdBQWtCUixLQUFLUSxXQUF2QjtBQUNBSixVQUFJRSxXQUFKLEdBQWtCTixLQUFLTSxXQUF2QjtBQUNBRixVQUFJSyxTQUFKLEdBQWdCVCxLQUFLUyxTQUFyQjtBQUNBTCxVQUFJTSxTQUFKLEdBQWdCVixLQUFLVSxTQUFyQjtBQUNELEtBTk0sTUFNQTtBQUNMO0FBQ0FOLFVBQUlJLFdBQUosR0FBa0JHLFlBQVlQLEdBQVosRUFBaUJKLEtBQUtRLFdBQXRCLEVBQW1DUCxPQUFPTyxXQUExQyxDQUFsQjtBQUNBSixVQUFJRSxXQUFKLEdBQWtCSyxZQUFZUCxHQUFaLEVBQWlCSixLQUFLTSxXQUF0QixFQUFtQ0wsT0FBT0ssV0FBMUMsQ0FBbEI7QUFDQUYsVUFBSUssU0FBSixHQUFnQkUsWUFBWVAsR0FBWixFQUFpQkosS0FBS1MsU0FBdEIsRUFBaUNSLE9BQU9RLFNBQXhDLENBQWhCO0FBQ0FMLFVBQUlNLFNBQUosR0FBZ0JDLFlBQVlQLEdBQVosRUFBaUJKLEtBQUtVLFNBQXRCLEVBQWlDVCxPQUFPUyxTQUF4QyxDQUFoQjtBQUNEO0FBQ0Y7O0FBRUROLE1BQUlRLEtBQUosR0FBWSxFQUFaOztBQUVBLE1BQUlDLFlBQVksQ0FBaEI7QUFBQSxNQUNJQyxjQUFjLENBRGxCO0FBQUEsTUFFSUMsYUFBYSxDQUZqQjtBQUFBLE1BR0lDLGVBQWUsQ0FIbkI7O0FBS0EsU0FBT0gsWUFBWWIsS0FBS1ksS0FBTCxDQUFXSyxNQUF2QixJQUFpQ0gsY0FBY2IsT0FBT1csS0FBUCxDQUFhSyxNQUFuRSxFQUEyRTtBQUN6RSxRQUFJQyxjQUFjbEIsS0FBS1ksS0FBTCxDQUFXQyxTQUFYLEtBQXlCLEVBQUNNLFVBQVVDLFFBQVgsRUFBM0M7QUFBQSxRQUNJQyxnQkFBZ0JwQixPQUFPVyxLQUFQLENBQWFFLFdBQWIsS0FBNkIsRUFBQ0ssVUFBVUMsUUFBWCxFQURqRDs7QUFHQSxRQUFJRSxXQUFXSixXQUFYLEVBQXdCRyxhQUF4QixDQUFKLEVBQTRDO0FBQzFDO0FBQ0FqQixVQUFJUSxLQUFKLENBQVVXLElBQVYsQ0FBZUMsVUFBVU4sV0FBVixFQUF1QkgsVUFBdkIsQ0FBZjtBQUNBRjtBQUNBRyxzQkFBZ0JFLFlBQVlwQixRQUFaLEdBQXVCb0IsWUFBWXJCLFFBQW5EO0FBQ0QsS0FMRCxNQUtPLElBQUl5QixXQUFXRCxhQUFYLEVBQTBCSCxXQUExQixDQUFKLEVBQTRDO0FBQ2pEO0FBQ0FkLFVBQUlRLEtBQUosQ0FBVVcsSUFBVixDQUFlQyxVQUFVSCxhQUFWLEVBQXlCTCxZQUF6QixDQUFmO0FBQ0FGO0FBQ0FDLG9CQUFjTSxjQUFjdkIsUUFBZCxHQUF5QnVCLGNBQWN4QixRQUFyRDtBQUNELEtBTE0sTUFLQTtBQUNMO0FBQ0EsVUFBSTRCLGFBQWE7QUFDZk4sa0JBQVVPLEtBQUtDLEdBQUwsQ0FBU1QsWUFBWUMsUUFBckIsRUFBK0JFLGNBQWNGLFFBQTdDLENBREs7QUFFZnRCLGtCQUFVLENBRks7QUFHZitCLGtCQUFVRixLQUFLQyxHQUFMLENBQVNULFlBQVlVLFFBQVosR0FBdUJiLFVBQWhDLEVBQTRDTSxjQUFjRixRQUFkLEdBQXlCSCxZQUFyRSxDQUhLO0FBSWZsQixrQkFBVSxDQUpLO0FBS2ZGLGVBQU87QUFMUSxPQUFqQjtBQU9BaUMsaUJBQVdKLFVBQVgsRUFBdUJQLFlBQVlDLFFBQW5DLEVBQTZDRCxZQUFZdEIsS0FBekQsRUFBZ0V5QixjQUFjRixRQUE5RSxFQUF3RkUsY0FBY3pCLEtBQXRHO0FBQ0FrQjtBQUNBRDs7QUFFQVQsVUFBSVEsS0FBSixDQUFVVyxJQUFWLENBQWVFLFVBQWY7QUFDRDtBQUNGOztBQUVELFNBQU9yQixHQUFQO0FBQ0Q7O0FBRUQsU0FBU0QsU0FBVCxDQUFtQjJCLEtBQW5CLEVBQTBCNUIsSUFBMUIsRUFBZ0M7QUFDOUIsTUFBSSxPQUFPNEIsS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUM3QixRQUFJLE9BQU9DLElBQVAsQ0FBWUQsS0FBWixLQUF1QixXQUFXQyxJQUFYLENBQWdCRCxLQUFoQixDQUEzQixFQUFvRDtBQUNsRCxhQUFPLHlFQUFXQSxLQUFYLEVBQWtCLENBQWxCO0FBQVA7QUFDRDs7QUFFRCxRQUFJLENBQUM1QixJQUFMLEVBQVc7QUFDVCxZQUFNLElBQUk4QixLQUFKLENBQVUsa0RBQVYsQ0FBTjtBQUNEO0FBQ0QsV0FBTywrRUFBZ0JqQyxTQUFoQixFQUEyQkEsU0FBM0IsRUFBc0NHLElBQXRDLEVBQTRDNEIsS0FBNUM7QUFBUDtBQUNEOztBQUVELFNBQU9BLEtBQVA7QUFDRDs7QUFFRCxTQUFTdkIsZUFBVCxDQUF5QjBCLEtBQXpCLEVBQWdDO0FBQzlCLFNBQU9BLE1BQU0zQixXQUFOLElBQXFCMkIsTUFBTTNCLFdBQU4sS0FBc0IyQixNQUFNekIsV0FBeEQ7QUFDRDs7QUFFRCxTQUFTRyxXQUFULENBQXFCTixLQUFyQixFQUE0QkwsSUFBNUIsRUFBa0NDLE1BQWxDLEVBQTBDO0FBQ3hDLE1BQUlELFNBQVNDLE1BQWIsRUFBcUI7QUFDbkIsV0FBT0QsSUFBUDtBQUNELEdBRkQsTUFFTztBQUNMSyxVQUFNNkIsUUFBTixHQUFpQixJQUFqQjtBQUNBLFdBQU8sRUFBQ2xDLFVBQUQsRUFBT0MsY0FBUCxFQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTcUIsVUFBVCxDQUFvQlMsSUFBcEIsRUFBMEJJLEtBQTFCLEVBQWlDO0FBQy9CLFNBQU9KLEtBQUtaLFFBQUwsR0FBZ0JnQixNQUFNaEIsUUFBdEIsSUFDRFksS0FBS1osUUFBTCxHQUFnQlksS0FBS2xDLFFBQXRCLEdBQWtDc0MsTUFBTWhCLFFBRDdDO0FBRUQ7O0FBRUQsU0FBU0ssU0FBVCxDQUFtQjlCLElBQW5CLEVBQXlCMEMsTUFBekIsRUFBaUM7QUFDL0IsU0FBTztBQUNMakIsY0FBVXpCLEtBQUt5QixRQURWLEVBQ29CdEIsVUFBVUgsS0FBS0csUUFEbkM7QUFFTCtCLGNBQVVsQyxLQUFLa0MsUUFBTCxHQUFnQlEsTUFGckIsRUFFNkJ0QyxVQUFVSixLQUFLSSxRQUY1QztBQUdMRixXQUFPRixLQUFLRTtBQUhQLEdBQVA7QUFLRDs7QUFFRCxTQUFTaUMsVUFBVCxDQUFvQm5DLElBQXBCLEVBQTBCcUIsVUFBMUIsRUFBc0NzQixTQUF0QyxFQUFpREMsV0FBakQsRUFBOERDLFVBQTlELEVBQTBFO0FBQ3hFO0FBQ0E7QUFDQSxNQUFJdkMsT0FBTyxFQUFDb0MsUUFBUXJCLFVBQVQsRUFBcUJuQixPQUFPeUMsU0FBNUIsRUFBdUNoQyxPQUFPLENBQTlDLEVBQVg7QUFBQSxNQUNJbUMsUUFBUSxFQUFDSixRQUFRRSxXQUFULEVBQXNCMUMsT0FBTzJDLFVBQTdCLEVBQXlDbEMsT0FBTyxDQUFoRCxFQURaOztBQUdBO0FBQ0FvQyxnQkFBYy9DLElBQWQsRUFBb0JNLElBQXBCLEVBQTBCd0MsS0FBMUI7QUFDQUMsZ0JBQWMvQyxJQUFkLEVBQW9COEMsS0FBcEIsRUFBMkJ4QyxJQUEzQjs7QUFFQTtBQUNBLFNBQU9BLEtBQUtLLEtBQUwsR0FBYUwsS0FBS0osS0FBTCxDQUFXcUIsTUFBeEIsSUFBa0N1QixNQUFNbkMsS0FBTixHQUFjbUMsTUFBTTVDLEtBQU4sQ0FBWXFCLE1BQW5FLEVBQTJFO0FBQ3pFLFFBQUlDLGNBQWNsQixLQUFLSixLQUFMLENBQVdJLEtBQUtLLEtBQWhCLENBQWxCO0FBQUEsUUFDSXFDLGVBQWVGLE1BQU01QyxLQUFOLENBQVk0QyxNQUFNbkMsS0FBbEIsQ0FEbkI7O0FBR0EsUUFBSSxDQUFDYSxZQUFZLENBQVosTUFBbUIsR0FBbkIsSUFBMEJBLFlBQVksQ0FBWixNQUFtQixHQUE5QyxNQUNJd0IsYUFBYSxDQUFiLE1BQW9CLEdBQXBCLElBQTJCQSxhQUFhLENBQWIsTUFBb0IsR0FEbkQsQ0FBSixFQUM2RDtBQUMzRDtBQUNBQyxtQkFBYWpELElBQWIsRUFBbUJNLElBQW5CLEVBQXlCd0MsS0FBekI7QUFDRCxLQUpELE1BSU8sSUFBSXRCLFlBQVksQ0FBWixNQUFtQixHQUFuQixJQUEwQndCLGFBQWEsQ0FBYixNQUFvQixHQUFsRCxFQUF1RDtBQUFBOztBQUFBLDhCQUM1RDtBQUNBLDBFQUFLOUMsS0FBTCxFQUFXMkIsSUFBWCw0TEFBb0JxQixjQUFjNUMsSUFBZCxDQUFwQjtBQUNELEtBSE0sTUFHQSxJQUFJMEMsYUFBYSxDQUFiLE1BQW9CLEdBQXBCLElBQTJCeEIsWUFBWSxDQUFaLE1BQW1CLEdBQWxELEVBQXVEO0FBQUE7O0FBQUEsOEJBQzVEO0FBQ0EsMkVBQUt0QixLQUFMLEVBQVcyQixJQUFYLDZMQUFvQnFCLGNBQWNKLEtBQWQsQ0FBcEI7QUFDRCxLQUhNLE1BR0EsSUFBSXRCLFlBQVksQ0FBWixNQUFtQixHQUFuQixJQUEwQndCLGFBQWEsQ0FBYixNQUFvQixHQUFsRCxFQUF1RDtBQUM1RDtBQUNBRyxjQUFRbkQsSUFBUixFQUFjTSxJQUFkLEVBQW9Cd0MsS0FBcEI7QUFDRCxLQUhNLE1BR0EsSUFBSUUsYUFBYSxDQUFiLE1BQW9CLEdBQXBCLElBQTJCeEIsWUFBWSxDQUFaLE1BQW1CLEdBQWxELEVBQXVEO0FBQzVEO0FBQ0EyQixjQUFRbkQsSUFBUixFQUFjOEMsS0FBZCxFQUFxQnhDLElBQXJCLEVBQTJCLElBQTNCO0FBQ0QsS0FITSxNQUdBLElBQUlrQixnQkFBZ0J3QixZQUFwQixFQUFrQztBQUN2QztBQUNBaEQsV0FBS0UsS0FBTCxDQUFXMkIsSUFBWCxDQUFnQkwsV0FBaEI7QUFDQWxCLFdBQUtLLEtBQUw7QUFDQW1DLFlBQU1uQyxLQUFOO0FBQ0QsS0FMTSxNQUtBO0FBQ0w7QUFDQTZCLGVBQVN4QyxJQUFULEVBQWVrRCxjQUFjNUMsSUFBZCxDQUFmLEVBQW9DNEMsY0FBY0osS0FBZCxDQUFwQztBQUNEO0FBQ0Y7O0FBRUQ7QUFDQU0saUJBQWVwRCxJQUFmLEVBQXFCTSxJQUFyQjtBQUNBOEMsaUJBQWVwRCxJQUFmLEVBQXFCOEMsS0FBckI7O0FBRUFoRCxnQkFBY0UsSUFBZDtBQUNEOztBQUVELFNBQVNpRCxZQUFULENBQXNCakQsSUFBdEIsRUFBNEJNLElBQTVCLEVBQWtDd0MsS0FBbEMsRUFBeUM7QUFDdkMsTUFBSU8sWUFBWUgsY0FBYzVDLElBQWQsQ0FBaEI7QUFBQSxNQUNJZ0QsZUFBZUosY0FBY0osS0FBZCxDQURuQjs7QUFHQSxNQUFJUyxXQUFXRixTQUFYLEtBQXlCRSxXQUFXRCxZQUFYLENBQTdCLEVBQXVEO0FBQ3JEO0FBQ0EsUUFBSSw4RUFBZ0JELFNBQWhCLEVBQTJCQyxZQUEzQixLQUNHRSxtQkFBbUJWLEtBQW5CLEVBQTBCTyxTQUExQixFQUFxQ0EsVUFBVTlCLE1BQVYsR0FBbUIrQixhQUFhL0IsTUFBckUsQ0FEUCxFQUNxRjtBQUFBOztBQUFBLDZCQUNuRixzRUFBS3JCLEtBQUwsRUFBVzJCLElBQVgsNkxBQW9Cd0IsU0FBcEI7QUFDQTtBQUNELEtBSkQsTUFJTyxJQUFJLDhFQUFnQkMsWUFBaEIsRUFBOEJELFNBQTlCLEtBQ0pHLG1CQUFtQmxELElBQW5CLEVBQXlCZ0QsWUFBekIsRUFBdUNBLGFBQWEvQixNQUFiLEdBQXNCOEIsVUFBVTlCLE1BQXZFLENBREEsRUFDZ0Y7QUFBQTs7QUFBQSw2QkFDckYsc0VBQUtyQixLQUFMLEVBQVcyQixJQUFYLDZMQUFvQnlCLFlBQXBCO0FBQ0E7QUFDRDtBQUNGLEdBWEQsTUFXTyxJQUFJLHlFQUFXRCxTQUFYLEVBQXNCQyxZQUF0QixDQUFKLEVBQXlDO0FBQUE7O0FBQUEsMkJBQzlDLHNFQUFLcEQsS0FBTCxFQUFXMkIsSUFBWCw2TEFBb0J3QixTQUFwQjtBQUNBO0FBQ0Q7O0FBRURiLFdBQVN4QyxJQUFULEVBQWVxRCxTQUFmLEVBQTBCQyxZQUExQjtBQUNEOztBQUVELFNBQVNILE9BQVQsQ0FBaUJuRCxJQUFqQixFQUF1Qk0sSUFBdkIsRUFBNkJ3QyxLQUE3QixFQUFvQ1csSUFBcEMsRUFBMEM7QUFDeEMsTUFBSUosWUFBWUgsY0FBYzVDLElBQWQsQ0FBaEI7QUFBQSxNQUNJZ0QsZUFBZUksZUFBZVosS0FBZixFQUFzQk8sU0FBdEIsQ0FEbkI7QUFFQSxNQUFJQyxhQUFhSyxNQUFqQixFQUF5QjtBQUFBOztBQUFBLDJCQUN2QixzRUFBS3pELEtBQUwsRUFBVzJCLElBQVgsNkxBQW9CeUIsYUFBYUssTUFBakM7QUFDRCxHQUZELE1BRU87QUFDTG5CLGFBQVN4QyxJQUFULEVBQWV5RCxPQUFPSCxZQUFQLEdBQXNCRCxTQUFyQyxFQUFnREksT0FBT0osU0FBUCxHQUFtQkMsWUFBbkU7QUFDRDtBQUNGOztBQUVELFNBQVNkLFFBQVQsQ0FBa0J4QyxJQUFsQixFQUF3Qk0sSUFBeEIsRUFBOEJ3QyxLQUE5QixFQUFxQztBQUNuQzlDLE9BQUt3QyxRQUFMLEdBQWdCLElBQWhCO0FBQ0F4QyxPQUFLRSxLQUFMLENBQVcyQixJQUFYLENBQWdCO0FBQ2RXLGNBQVUsSUFESTtBQUVkbEMsVUFBTUEsSUFGUTtBQUdkQyxZQUFRdUM7QUFITSxHQUFoQjtBQUtEOztBQUVELFNBQVNDLGFBQVQsQ0FBdUIvQyxJQUF2QixFQUE2QjRELE1BQTdCLEVBQXFDZCxLQUFyQyxFQUE0QztBQUMxQyxTQUFPYyxPQUFPbEIsTUFBUCxHQUFnQkksTUFBTUosTUFBdEIsSUFBZ0NrQixPQUFPakQsS0FBUCxHQUFlaUQsT0FBTzFELEtBQVAsQ0FBYXFCLE1BQW5FLEVBQTJFO0FBQ3pFLFFBQUlzQyxPQUFPRCxPQUFPMUQsS0FBUCxDQUFhMEQsT0FBT2pELEtBQVAsRUFBYixDQUFYO0FBQ0FYLFNBQUtFLEtBQUwsQ0FBVzJCLElBQVgsQ0FBZ0JnQyxJQUFoQjtBQUNBRCxXQUFPbEIsTUFBUDtBQUNEO0FBQ0Y7QUFDRCxTQUFTVSxjQUFULENBQXdCcEQsSUFBeEIsRUFBOEI0RCxNQUE5QixFQUFzQztBQUNwQyxTQUFPQSxPQUFPakQsS0FBUCxHQUFlaUQsT0FBTzFELEtBQVAsQ0FBYXFCLE1BQW5DLEVBQTJDO0FBQ3pDLFFBQUlzQyxPQUFPRCxPQUFPMUQsS0FBUCxDQUFhMEQsT0FBT2pELEtBQVAsRUFBYixDQUFYO0FBQ0FYLFNBQUtFLEtBQUwsQ0FBVzJCLElBQVgsQ0FBZ0JnQyxJQUFoQjtBQUNEO0FBQ0Y7O0FBRUQsU0FBU1gsYUFBVCxDQUF1QlksS0FBdkIsRUFBOEI7QUFDNUIsTUFBSXBELE1BQU0sRUFBVjtBQUFBLE1BQ0lxRCxZQUFZRCxNQUFNNUQsS0FBTixDQUFZNEQsTUFBTW5ELEtBQWxCLEVBQXlCLENBQXpCLENBRGhCO0FBRUEsU0FBT21ELE1BQU1uRCxLQUFOLEdBQWNtRCxNQUFNNUQsS0FBTixDQUFZcUIsTUFBakMsRUFBeUM7QUFDdkMsUUFBSXNDLE9BQU9DLE1BQU01RCxLQUFOLENBQVk0RCxNQUFNbkQsS0FBbEIsQ0FBWDs7QUFFQTtBQUNBLFFBQUlvRCxjQUFjLEdBQWQsSUFBcUJGLEtBQUssQ0FBTCxNQUFZLEdBQXJDLEVBQTBDO0FBQ3hDRSxrQkFBWSxHQUFaO0FBQ0Q7O0FBRUQsUUFBSUEsY0FBY0YsS0FBSyxDQUFMLENBQWxCLEVBQTJCO0FBQ3pCbkQsVUFBSW1CLElBQUosQ0FBU2dDLElBQVQ7QUFDQUMsWUFBTW5ELEtBQU47QUFDRCxLQUhELE1BR087QUFDTDtBQUNEO0FBQ0Y7O0FBRUQsU0FBT0QsR0FBUDtBQUNEO0FBQ0QsU0FBU2dELGNBQVQsQ0FBd0JJLEtBQXhCLEVBQStCRSxZQUEvQixFQUE2QztBQUMzQyxNQUFJQyxVQUFVLEVBQWQ7QUFBQSxNQUNJTixTQUFTLEVBRGI7QUFBQSxNQUVJTyxhQUFhLENBRmpCO0FBQUEsTUFHSUMsaUJBQWlCLEtBSHJCO0FBQUEsTUFJSUMsYUFBYSxLQUpqQjtBQUtBLFNBQU9GLGFBQWFGLGFBQWF6QyxNQUExQixJQUNFdUMsTUFBTW5ELEtBQU4sR0FBY21ELE1BQU01RCxLQUFOLENBQVlxQixNQURuQyxFQUMyQztBQUN6QyxRQUFJOEMsU0FBU1AsTUFBTTVELEtBQU4sQ0FBWTRELE1BQU1uRCxLQUFsQixDQUFiO0FBQUEsUUFDSTJELFFBQVFOLGFBQWFFLFVBQWIsQ0FEWjs7QUFHQTtBQUNBLFFBQUlJLE1BQU0sQ0FBTixNQUFhLEdBQWpCLEVBQXNCO0FBQ3BCO0FBQ0Q7O0FBRURILHFCQUFpQkEsa0JBQWtCRSxPQUFPLENBQVAsTUFBYyxHQUFqRDs7QUFFQVYsV0FBTzlCLElBQVAsQ0FBWXlDLEtBQVo7QUFDQUo7O0FBRUE7QUFDQTtBQUNBLFFBQUlHLE9BQU8sQ0FBUCxNQUFjLEdBQWxCLEVBQXVCO0FBQ3JCRCxtQkFBYSxJQUFiOztBQUVBLGFBQU9DLE9BQU8sQ0FBUCxNQUFjLEdBQXJCLEVBQTBCO0FBQ3hCSixnQkFBUXBDLElBQVIsQ0FBYXdDLE1BQWI7QUFDQUEsaUJBQVNQLE1BQU01RCxLQUFOLENBQVksRUFBRTRELE1BQU1uRCxLQUFwQixDQUFUO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJMkQsTUFBTUMsTUFBTixDQUFhLENBQWIsTUFBb0JGLE9BQU9FLE1BQVAsQ0FBYyxDQUFkLENBQXhCLEVBQTBDO0FBQ3hDTixjQUFRcEMsSUFBUixDQUFhd0MsTUFBYjtBQUNBUCxZQUFNbkQsS0FBTjtBQUNELEtBSEQsTUFHTztBQUNMeUQsbUJBQWEsSUFBYjtBQUNEO0FBQ0Y7O0FBRUQsTUFBSSxDQUFDSixhQUFhRSxVQUFiLEtBQTRCLEVBQTdCLEVBQWlDLENBQWpDLE1BQXdDLEdBQXhDLElBQ0dDLGNBRFAsRUFDdUI7QUFDckJDLGlCQUFhLElBQWI7QUFDRDs7QUFFRCxNQUFJQSxVQUFKLEVBQWdCO0FBQ2QsV0FBT0gsT0FBUDtBQUNEOztBQUVELFNBQU9DLGFBQWFGLGFBQWF6QyxNQUFqQyxFQUF5QztBQUN2Q29DLFdBQU85QixJQUFQLENBQVltQyxhQUFhRSxZQUFiLENBQVo7QUFDRDs7QUFFRCxTQUFPO0FBQ0xQLGtCQURLO0FBRUxNO0FBRkssR0FBUDtBQUlEOztBQUVELFNBQVNWLFVBQVQsQ0FBb0JVLE9BQXBCLEVBQTZCO0FBQzNCLFNBQU9BLFFBQVFPLE1BQVIsQ0FBZSxVQUFTQyxJQUFULEVBQWVKLE1BQWYsRUFBdUI7QUFDM0MsV0FBT0ksUUFBUUosT0FBTyxDQUFQLE1BQWMsR0FBN0I7QUFDRCxHQUZNLEVBRUosSUFGSSxDQUFQO0FBR0Q7QUFDRCxTQUFTYixrQkFBVCxDQUE0Qk0sS0FBNUIsRUFBbUNZLGFBQW5DLEVBQWtEQyxLQUFsRCxFQUF5RDtBQUN2RCxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUQsS0FBcEIsRUFBMkJDLEdBQTNCLEVBQWdDO0FBQzlCLFFBQUlDLGdCQUFnQkgsY0FBY0EsY0FBY25ELE1BQWQsR0FBdUJvRCxLQUF2QixHQUErQkMsQ0FBN0MsRUFBZ0RMLE1BQWhELENBQXVELENBQXZELENBQXBCO0FBQ0EsUUFBSVQsTUFBTTVELEtBQU4sQ0FBWTRELE1BQU1uRCxLQUFOLEdBQWNpRSxDQUExQixNQUFpQyxNQUFNQyxhQUEzQyxFQUEwRDtBQUN4RCxhQUFPLEtBQVA7QUFDRDtBQUNGOztBQUVEZixRQUFNbkQsS0FBTixJQUFlZ0UsS0FBZjtBQUNBLFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVMxRSxtQkFBVCxDQUE2QkMsS0FBN0IsRUFBb0M7QUFDbEMsTUFBSUMsV0FBVyxDQUFmO0FBQ0EsTUFBSUMsV0FBVyxDQUFmOztBQUVBRixRQUFNNEUsT0FBTixDQUFjLFVBQVNqQixJQUFULEVBQWU7QUFDM0IsUUFBSSxPQUFPQSxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQzVCLFVBQUlrQixVQUFVOUUsb0JBQW9CNEQsS0FBS3ZELElBQXpCLENBQWQ7QUFDQSxVQUFJMEUsYUFBYS9FLG9CQUFvQjRELEtBQUt0RCxNQUF6QixDQUFqQjs7QUFFQSxVQUFJSixhQUFhRSxTQUFqQixFQUE0QjtBQUMxQixZQUFJMEUsUUFBUTVFLFFBQVIsS0FBcUI2RSxXQUFXN0UsUUFBcEMsRUFBOEM7QUFDNUNBLHNCQUFZNEUsUUFBUTVFLFFBQXBCO0FBQ0QsU0FGRCxNQUVPO0FBQ0xBLHFCQUFXRSxTQUFYO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJRCxhQUFhQyxTQUFqQixFQUE0QjtBQUMxQixZQUFJMEUsUUFBUTNFLFFBQVIsS0FBcUI0RSxXQUFXNUUsUUFBcEMsRUFBOEM7QUFDNUNBLHNCQUFZMkUsUUFBUTNFLFFBQXBCO0FBQ0QsU0FGRCxNQUVPO0FBQ0xBLHFCQUFXQyxTQUFYO0FBQ0Q7QUFDRjtBQUNGLEtBbkJELE1BbUJPO0FBQ0wsVUFBSUQsYUFBYUMsU0FBYixLQUEyQndELEtBQUssQ0FBTCxNQUFZLEdBQVosSUFBbUJBLEtBQUssQ0FBTCxNQUFZLEdBQTFELENBQUosRUFBb0U7QUFDbEV6RDtBQUNEO0FBQ0QsVUFBSUQsYUFBYUUsU0FBYixLQUEyQndELEtBQUssQ0FBTCxNQUFZLEdBQVosSUFBbUJBLEtBQUssQ0FBTCxNQUFZLEdBQTFELENBQUosRUFBb0U7QUFDbEUxRDtBQUNEO0FBQ0Y7QUFDRixHQTVCRDs7QUE4QkEsU0FBTyxFQUFDQSxrQkFBRCxFQUFXQyxrQkFBWCxFQUFQO0FBQ0QiLCJmaWxlIjoibWVyZ2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3N0cnVjdHVyZWRQYXRjaH0gZnJvbSAnLi9jcmVhdGUnO1xuaW1wb3J0IHtwYXJzZVBhdGNofSBmcm9tICcuL3BhcnNlJztcblxuaW1wb3J0IHthcnJheUVxdWFsLCBhcnJheVN0YXJ0c1dpdGh9IGZyb20gJy4uL3V0aWwvYXJyYXknO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsY0xpbmVDb3VudChodW5rKSB7XG4gIGNvbnN0IHtvbGRMaW5lcywgbmV3TGluZXN9ID0gY2FsY09sZE5ld0xpbmVDb3VudChodW5rLmxpbmVzKTtcblxuICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsub2xkTGluZXMgPSBvbGRMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5vbGRMaW5lcztcbiAgfVxuXG4gIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaHVuay5uZXdMaW5lcyA9IG5ld0xpbmVzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBodW5rLm5ld0xpbmVzO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShtaW5lLCB0aGVpcnMsIGJhc2UpIHtcbiAgbWluZSA9IGxvYWRQYXRjaChtaW5lLCBiYXNlKTtcbiAgdGhlaXJzID0gbG9hZFBhdGNoKHRoZWlycywgYmFzZSk7XG5cbiAgbGV0IHJldCA9IHt9O1xuXG4gIC8vIEZvciBpbmRleCB3ZSBqdXN0IGxldCBpdCBwYXNzIHRocm91Z2ggYXMgaXQgZG9lc24ndCBoYXZlIGFueSBuZWNlc3NhcnkgbWVhbmluZy5cbiAgLy8gTGVhdmluZyBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgdG8gdGhlIEFQSSBjb25zdW1lciB0aGF0IG1heSBrbm93IG1vcmUgYWJvdXQgdGhlXG4gIC8vIG1lYW5pbmcgaW4gdGhlaXIgb3duIGNvbnRleHQuXG4gIGlmIChtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleCkge1xuICAgIHJldC5pbmRleCA9IG1pbmUuaW5kZXggfHwgdGhlaXJzLmluZGV4O1xuICB9XG5cbiAgaWYgKG1pbmUubmV3RmlsZU5hbWUgfHwgdGhlaXJzLm5ld0ZpbGVOYW1lKSB7XG4gICAgaWYgKCFmaWxlTmFtZUNoYW5nZWQobWluZSkpIHtcbiAgICAgIC8vIE5vIGhlYWRlciBvciBubyBjaGFuZ2UgaW4gb3VycywgdXNlIHRoZWlycyAoYW5kIG91cnMgaWYgdGhlaXJzIGRvZXMgbm90IGV4aXN0KVxuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gdGhlaXJzLm9sZEZpbGVOYW1lIHx8IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSB0aGVpcnMubmV3RmlsZU5hbWUgfHwgbWluZS5uZXdGaWxlTmFtZTtcbiAgICAgIHJldC5vbGRIZWFkZXIgPSB0aGVpcnMub2xkSGVhZGVyIHx8IG1pbmUub2xkSGVhZGVyO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IHRoZWlycy5uZXdIZWFkZXIgfHwgbWluZS5uZXdIZWFkZXI7XG4gICAgfSBlbHNlIGlmICghZmlsZU5hbWVDaGFuZ2VkKHRoZWlycykpIHtcbiAgICAgIC8vIE5vIGhlYWRlciBvciBubyBjaGFuZ2UgaW4gdGhlaXJzLCB1c2Ugb3Vyc1xuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gbWluZS5vbGRGaWxlTmFtZTtcbiAgICAgIHJldC5uZXdGaWxlTmFtZSA9IG1pbmUubmV3RmlsZU5hbWU7XG4gICAgICByZXQub2xkSGVhZGVyID0gbWluZS5vbGRIZWFkZXI7XG4gICAgICByZXQubmV3SGVhZGVyID0gbWluZS5uZXdIZWFkZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJvdGggY2hhbmdlZC4uLiBmaWd1cmUgaXQgb3V0XG4gICAgICByZXQub2xkRmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkRmlsZU5hbWUsIHRoZWlycy5vbGRGaWxlTmFtZSk7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUubmV3RmlsZU5hbWUsIHRoZWlycy5uZXdGaWxlTmFtZSk7XG4gICAgICByZXQub2xkSGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEhlYWRlciwgdGhlaXJzLm9sZEhlYWRlcik7XG4gICAgICByZXQubmV3SGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0hlYWRlciwgdGhlaXJzLm5ld0hlYWRlcik7XG4gICAgfVxuICB9XG5cbiAgcmV0Lmh1bmtzID0gW107XG5cbiAgbGV0IG1pbmVJbmRleCA9IDAsXG4gICAgICB0aGVpcnNJbmRleCA9IDAsXG4gICAgICBtaW5lT2Zmc2V0ID0gMCxcbiAgICAgIHRoZWlyc09mZnNldCA9IDA7XG5cbiAgd2hpbGUgKG1pbmVJbmRleCA8IG1pbmUuaHVua3MubGVuZ3RoIHx8IHRoZWlyc0luZGV4IDwgdGhlaXJzLmh1bmtzLmxlbmd0aCkge1xuICAgIGxldCBtaW5lQ3VycmVudCA9IG1pbmUuaHVua3NbbWluZUluZGV4XSB8fCB7b2xkU3RhcnQ6IEluZmluaXR5fSxcbiAgICAgICAgdGhlaXJzQ3VycmVudCA9IHRoZWlycy5odW5rc1t0aGVpcnNJbmRleF0gfHwge29sZFN0YXJ0OiBJbmZpbml0eX07XG5cbiAgICBpZiAoaHVua0JlZm9yZShtaW5lQ3VycmVudCwgdGhlaXJzQ3VycmVudCkpIHtcbiAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG4gICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsobWluZUN1cnJlbnQsIG1pbmVPZmZzZXQpKTtcbiAgICAgIG1pbmVJbmRleCsrO1xuICAgICAgdGhlaXJzT2Zmc2V0ICs9IG1pbmVDdXJyZW50Lm5ld0xpbmVzIC0gbWluZUN1cnJlbnQub2xkTGluZXM7XG4gICAgfSBlbHNlIGlmIChodW5rQmVmb3JlKHRoZWlyc0N1cnJlbnQsIG1pbmVDdXJyZW50KSkge1xuICAgICAgLy8gVGhpcyBwYXRjaCBkb2VzIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBvdGhlcnMsIHlheS5cbiAgICAgIHJldC5odW5rcy5wdXNoKGNsb25lSHVuayh0aGVpcnNDdXJyZW50LCB0aGVpcnNPZmZzZXQpKTtcbiAgICAgIHRoZWlyc0luZGV4Kys7XG4gICAgICBtaW5lT2Zmc2V0ICs9IHRoZWlyc0N1cnJlbnQubmV3TGluZXMgLSB0aGVpcnNDdXJyZW50Lm9sZExpbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdmVybGFwLCBtZXJnZSBhcyBiZXN0IHdlIGNhblxuICAgICAgbGV0IG1lcmdlZEh1bmsgPSB7XG4gICAgICAgIG9sZFN0YXJ0OiBNYXRoLm1pbihtaW5lQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCksXG4gICAgICAgIG9sZExpbmVzOiAwLFxuICAgICAgICBuZXdTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQubmV3U3RhcnQgKyBtaW5lT2Zmc2V0LCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0ICsgdGhlaXJzT2Zmc2V0KSxcbiAgICAgICAgbmV3TGluZXM6IDAsXG4gICAgICAgIGxpbmVzOiBbXVxuICAgICAgfTtcbiAgICAgIG1lcmdlTGluZXMobWVyZ2VkSHVuaywgbWluZUN1cnJlbnQub2xkU3RhcnQsIG1pbmVDdXJyZW50LmxpbmVzLCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0LCB0aGVpcnNDdXJyZW50LmxpbmVzKTtcbiAgICAgIHRoZWlyc0luZGV4Kys7XG4gICAgICBtaW5lSW5kZXgrKztcblxuICAgICAgcmV0Lmh1bmtzLnB1c2gobWVyZ2VkSHVuayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gbG9hZFBhdGNoKHBhcmFtLCBiYXNlKSB7XG4gIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKC9eQEAvbS50ZXN0KHBhcmFtKSB8fCAoL15JbmRleDovbS50ZXN0KHBhcmFtKSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVBhdGNoKHBhcmFtKVswXTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgYmFzZSByZWZlcmVuY2Ugb3IgcGFzcyBpbiBhIHBhdGNoJyk7XG4gICAgfVxuICAgIHJldHVybiBzdHJ1Y3R1cmVkUGF0Y2godW5kZWZpbmVkLCB1bmRlZmluZWQsIGJhc2UsIHBhcmFtKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbTtcbn1cblxuZnVuY3Rpb24gZmlsZU5hbWVDaGFuZ2VkKHBhdGNoKSB7XG4gIHJldHVybiBwYXRjaC5uZXdGaWxlTmFtZSAmJiBwYXRjaC5uZXdGaWxlTmFtZSAhPT0gcGF0Y2gub2xkRmlsZU5hbWU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZpZWxkKGluZGV4LCBtaW5lLCB0aGVpcnMpIHtcbiAgaWYgKG1pbmUgPT09IHRoZWlycykge1xuICAgIHJldHVybiBtaW5lO1xuICB9IGVsc2Uge1xuICAgIGluZGV4LmNvbmZsaWN0ID0gdHJ1ZTtcbiAgICByZXR1cm4ge21pbmUsIHRoZWlyc307XG4gIH1cbn1cblxuZnVuY3Rpb24gaHVua0JlZm9yZSh0ZXN0LCBjaGVjaykge1xuICByZXR1cm4gdGVzdC5vbGRTdGFydCA8IGNoZWNrLm9sZFN0YXJ0XG4gICAgJiYgKHRlc3Qub2xkU3RhcnQgKyB0ZXN0Lm9sZExpbmVzKSA8IGNoZWNrLm9sZFN0YXJ0O1xufVxuXG5mdW5jdGlvbiBjbG9uZUh1bmsoaHVuaywgb2Zmc2V0KSB7XG4gIHJldHVybiB7XG4gICAgb2xkU3RhcnQ6IGh1bmsub2xkU3RhcnQsIG9sZExpbmVzOiBodW5rLm9sZExpbmVzLFxuICAgIG5ld1N0YXJ0OiBodW5rLm5ld1N0YXJ0ICsgb2Zmc2V0LCBuZXdMaW5lczogaHVuay5uZXdMaW5lcyxcbiAgICBsaW5lczogaHVuay5saW5lc1xuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZUxpbmVzKGh1bmssIG1pbmVPZmZzZXQsIG1pbmVMaW5lcywgdGhlaXJPZmZzZXQsIHRoZWlyTGluZXMpIHtcbiAgLy8gVGhpcyB3aWxsIGdlbmVyYWxseSByZXN1bHQgaW4gYSBjb25mbGljdGVkIGh1bmssIGJ1dCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIGNvbnRleHRcbiAgLy8gaXMgdGhlIG9ubHkgb3ZlcmxhcCB3aGVyZSB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IG1lcmdlIHRoZSBjb250ZW50IGhlcmUuXG4gIGxldCBtaW5lID0ge29mZnNldDogbWluZU9mZnNldCwgbGluZXM6IG1pbmVMaW5lcywgaW5kZXg6IDB9LFxuICAgICAgdGhlaXIgPSB7b2Zmc2V0OiB0aGVpck9mZnNldCwgbGluZXM6IHRoZWlyTGluZXMsIGluZGV4OiAwfTtcblxuICAvLyBIYW5kbGUgYW55IGxlYWRpbmcgY29udGVudFxuICBpbnNlcnRMZWFkaW5nKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgaW5zZXJ0TGVhZGluZyhodW5rLCB0aGVpciwgbWluZSk7XG5cbiAgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuICB3aGlsZSAobWluZS5pbmRleCA8IG1pbmUubGluZXMubGVuZ3RoICYmIHRoZWlyLmluZGV4IDwgdGhlaXIubGluZXMubGVuZ3RoKSB7XG4gICAgbGV0IG1pbmVDdXJyZW50ID0gbWluZS5saW5lc1ttaW5lLmluZGV4XSxcbiAgICAgICAgdGhlaXJDdXJyZW50ID0gdGhlaXIubGluZXNbdGhlaXIuaW5kZXhdO1xuXG4gICAgaWYgKChtaW5lQ3VycmVudFswXSA9PT0gJy0nIHx8IG1pbmVDdXJyZW50WzBdID09PSAnKycpXG4gICAgICAgICYmICh0aGVpckN1cnJlbnRbMF0gPT09ICctJyB8fCB0aGVpckN1cnJlbnRbMF0gPT09ICcrJykpIHtcbiAgICAgIC8vIEJvdGggbW9kaWZpZWQgLi4uXG4gICAgICBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpO1xuICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnRbMF0gPT09ICcrJyAmJiB0aGVpckN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gTWluZSBpbnNlcnRlZFxuICAgICAgaHVuay5saW5lcy5wdXNoKC4uLiBjb2xsZWN0Q2hhbmdlKG1pbmUpKTtcbiAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJysnICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIFRoZWlycyBpbnNlcnRlZFxuICAgICAgaHVuay5saW5lcy5wdXNoKC4uLiBjb2xsZWN0Q2hhbmdlKHRoZWlyKSk7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJy0nICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBNaW5lIHJlbW92ZWQgb3IgZWRpdGVkXG4gICAgICByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIFRoZWlyIHJlbW92ZWQgb3IgZWRpdGVkXG4gICAgICByZW1vdmFsKGh1bmssIHRoZWlyLCBtaW5lLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50ID09PSB0aGVpckN1cnJlbnQpIHtcbiAgICAgIC8vIENvbnRleHQgaWRlbnRpdHlcbiAgICAgIGh1bmsubGluZXMucHVzaChtaW5lQ3VycmVudCk7XG4gICAgICBtaW5lLmluZGV4Kys7XG4gICAgICB0aGVpci5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250ZXh0IG1pc21hdGNoXG4gICAgICBjb25mbGljdChodW5rLCBjb2xsZWN0Q2hhbmdlKG1pbmUpLCBjb2xsZWN0Q2hhbmdlKHRoZWlyKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTm93IHB1c2ggYW55dGhpbmcgdGhhdCBtYXkgYmUgcmVtYWluaW5nXG4gIGluc2VydFRyYWlsaW5nKGh1bmssIG1pbmUpO1xuICBpbnNlcnRUcmFpbGluZyhodW5rLCB0aGVpcik7XG5cbiAgY2FsY0xpbmVDb3VudChodW5rKTtcbn1cblxuZnVuY3Rpb24gbXV0dWFsQ2hhbmdlKGh1bmssIG1pbmUsIHRoZWlyKSB7XG4gIGxldCBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENoYW5nZSh0aGVpcik7XG5cbiAgaWYgKGFsbFJlbW92ZXMobXlDaGFuZ2VzKSAmJiBhbGxSZW1vdmVzKHRoZWlyQ2hhbmdlcykpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuICAgIGlmIChhcnJheVN0YXJ0c1dpdGgobXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpXG4gICAgICAgICYmIHNraXBSZW1vdmVTdXBlcnNldCh0aGVpciwgbXlDaGFuZ2VzLCBteUNoYW5nZXMubGVuZ3RoIC0gdGhlaXJDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgIGh1bmsubGluZXMucHVzaCguLi4gbXlDaGFuZ2VzKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGFycmF5U3RhcnRzV2l0aCh0aGVpckNoYW5nZXMsIG15Q2hhbmdlcylcbiAgICAgICAgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KG1pbmUsIHRoZWlyQ2hhbmdlcywgdGhlaXJDaGFuZ2VzLmxlbmd0aCAtIG15Q2hhbmdlcy5sZW5ndGgpKSB7XG4gICAgICBodW5rLmxpbmVzLnB1c2goLi4uIHRoZWlyQ2hhbmdlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKGFycmF5RXF1YWwobXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpKSB7XG4gICAgaHVuay5saW5lcy5wdXNoKC4uLiBteUNoYW5nZXMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbmZsaWN0KGh1bmssIG15Q2hhbmdlcywgdGhlaXJDaGFuZ2VzKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZhbChodW5rLCBtaW5lLCB0aGVpciwgc3dhcCkge1xuICBsZXQgbXlDaGFuZ2VzID0gY29sbGVjdENoYW5nZShtaW5lKSxcbiAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDb250ZXh0KHRoZWlyLCBteUNoYW5nZXMpO1xuICBpZiAodGhlaXJDaGFuZ2VzLm1lcmdlZCkge1xuICAgIGh1bmsubGluZXMucHVzaCguLi4gdGhlaXJDaGFuZ2VzLm1lcmdlZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmxpY3QoaHVuaywgc3dhcCA/IHRoZWlyQ2hhbmdlcyA6IG15Q2hhbmdlcywgc3dhcCA/IG15Q2hhbmdlcyA6IHRoZWlyQ2hhbmdlcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgaHVuay5jb25mbGljdCA9IHRydWU7XG4gIGh1bmsubGluZXMucHVzaCh7XG4gICAgY29uZmxpY3Q6IHRydWUsXG4gICAgbWluZTogbWluZSxcbiAgICB0aGVpcnM6IHRoZWlyXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRMZWFkaW5nKGh1bmssIGluc2VydCwgdGhlaXIpIHtcbiAgd2hpbGUgKGluc2VydC5vZmZzZXQgPCB0aGVpci5vZmZzZXQgJiYgaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gICAgaW5zZXJ0Lm9mZnNldCsrO1xuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRUcmFpbGluZyhodW5rLCBpbnNlcnQpIHtcbiAgd2hpbGUgKGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcbiAgICBsZXQgbGluZSA9IGluc2VydC5saW5lc1tpbnNlcnQuaW5kZXgrK107XG4gICAgaHVuay5saW5lcy5wdXNoKGxpbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RDaGFuZ2Uoc3RhdGUpIHtcbiAgbGV0IHJldCA9IFtdLFxuICAgICAgb3BlcmF0aW9uID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdWzBdO1xuICB3aGlsZSAoc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcbiAgICBsZXQgbGluZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XTtcblxuICAgIC8vIEdyb3VwIGFkZGl0aW9ucyB0aGF0IGFyZSBpbW1lZGlhdGVseSBhZnRlciBzdWJ0cmFjdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgb25lIFwiYXRvbWljXCIgbW9kaWZ5IGNoYW5nZS5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnLScgJiYgbGluZVswXSA9PT0gJysnKSB7XG4gICAgICBvcGVyYXRpb24gPSAnKyc7XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gbGluZVswXSkge1xuICAgICAgcmV0LnB1c2gobGluZSk7XG4gICAgICBzdGF0ZS5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gY29sbGVjdENvbnRleHQoc3RhdGUsIG1hdGNoQ2hhbmdlcykge1xuICBsZXQgY2hhbmdlcyA9IFtdLFxuICAgICAgbWVyZ2VkID0gW10sXG4gICAgICBtYXRjaEluZGV4ID0gMCxcbiAgICAgIGNvbnRleHRDaGFuZ2VzID0gZmFsc2UsXG4gICAgICBjb25mbGljdGVkID0gZmFsc2U7XG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aFxuICAgICAgICAmJiBzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG4gICAgICAgIG1hdGNoID0gbWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdO1xuXG4gICAgLy8gT25jZSB3ZSd2ZSBoaXQgb3VyIGFkZCwgdGhlbiB3ZSBhcmUgZG9uZVxuICAgIGlmIChtYXRjaFswXSA9PT0gJysnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb250ZXh0Q2hhbmdlcyA9IGNvbnRleHRDaGFuZ2VzIHx8IGNoYW5nZVswXSAhPT0gJyAnO1xuXG4gICAgbWVyZ2VkLnB1c2gobWF0Y2gpO1xuICAgIG1hdGNoSW5kZXgrKztcblxuICAgIC8vIENvbnN1bWUgYW55IGFkZGl0aW9ucyBpbiB0aGUgb3RoZXIgYmxvY2sgYXMgYSBjb25mbGljdCB0byBhdHRlbXB0XG4gICAgLy8gdG8gcHVsbCBpbiB0aGUgcmVtYWluaW5nIGNvbnRleHQgYWZ0ZXIgdGhpc1xuICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG5cbiAgICAgIHdoaWxlIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgICAgY2hhbmdlID0gc3RhdGUubGluZXNbKytzdGF0ZS5pbmRleF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoLnN1YnN0cigxKSA9PT0gY2hhbmdlLnN1YnN0cigxKSkge1xuICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICBzdGF0ZS5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25mbGljdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4XSB8fCAnJylbMF0gPT09ICcrJ1xuICAgICAgJiYgY29udGV4dENoYW5nZXMpIHtcbiAgICBjb25mbGljdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChjb25mbGljdGVkKSB7XG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cblxuICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGgpIHtcbiAgICBtZXJnZWQucHVzaChtYXRjaENoYW5nZXNbbWF0Y2hJbmRleCsrXSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1lcmdlZCxcbiAgICBjaGFuZ2VzXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFsbFJlbW92ZXMoY2hhbmdlcykge1xuICByZXR1cm4gY2hhbmdlcy5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY2hhbmdlKSB7XG4gICAgcmV0dXJuIHByZXYgJiYgY2hhbmdlWzBdID09PSAnLSc7XG4gIH0sIHRydWUpO1xufVxuZnVuY3Rpb24gc2tpcFJlbW92ZVN1cGVyc2V0KHN0YXRlLCByZW1vdmVDaGFuZ2VzLCBkZWx0YSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHtcbiAgICBsZXQgY2hhbmdlQ29udGVudCA9IHJlbW92ZUNoYW5nZXNbcmVtb3ZlQ2hhbmdlcy5sZW5ndGggLSBkZWx0YSArIGldLnN1YnN0cigxKTtcbiAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLmluZGV4ICs9IGRlbHRhO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lcykge1xuICBsZXQgb2xkTGluZXMgPSAwO1xuICBsZXQgbmV3TGluZXMgPSAwO1xuXG4gIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgIGlmICh0eXBlb2YgbGluZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBteUNvdW50ID0gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lLm1pbmUpO1xuICAgICAgbGV0IHRoZWlyQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUudGhlaXJzKTtcblxuICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG15Q291bnQub2xkTGluZXMgPT09IHRoZWlyQ291bnQub2xkTGluZXMpIHtcbiAgICAgICAgICBvbGRMaW5lcyArPSBteUNvdW50Lm9sZExpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9sZExpbmVzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChteUNvdW50Lm5ld0xpbmVzID09PSB0aGVpckNvdW50Lm5ld0xpbmVzKSB7XG4gICAgICAgICAgbmV3TGluZXMgKz0gbXlDb3VudC5uZXdMaW5lcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMaW5lcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJysnIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcbiAgICAgICAgbmV3TGluZXMrKztcbiAgICAgIH1cbiAgICAgIGlmIChvbGRMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnLScgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuICAgICAgICBvbGRMaW5lcysrO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtvbGRMaW5lcywgbmV3TGluZXN9O1xufVxuIl19
|
||
|
||
|
||
/***/ }),
|
||
/* 14 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports. /*istanbul ignore end*/structuredPatch = structuredPatch;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/createTwoFilesPatch = createTwoFilesPatch;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/createPatch = createPatch;
|
||
|
||
var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
|
||
|
||
/*istanbul ignore start*/function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
||
|
||
/*istanbul ignore end*/function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
|
||
if (!options) {
|
||
options = {};
|
||
}
|
||
if (typeof options.context === 'undefined') {
|
||
options.context = 4;
|
||
}
|
||
|
||
var diff = /*istanbul ignore start*/(0, _line.diffLines) /*istanbul ignore end*/(oldStr, newStr, options);
|
||
diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier
|
||
|
||
function contextLines(lines) {
|
||
return lines.map(function (entry) {
|
||
return ' ' + entry;
|
||
});
|
||
}
|
||
|
||
var hunks = [];
|
||
var oldRangeStart = 0,
|
||
newRangeStart = 0,
|
||
curRange = [],
|
||
oldLine = 1,
|
||
newLine = 1;
|
||
|
||
/*istanbul ignore start*/var _loop = function _loop( /*istanbul ignore end*/i) {
|
||
var current = diff[i],
|
||
lines = current.lines || current.value.replace(/\n$/, '').split('\n');
|
||
current.lines = lines;
|
||
|
||
if (current.added || current.removed) {
|
||
/*istanbul ignore start*/var _curRange;
|
||
|
||
/*istanbul ignore end*/ // If we have previous context, start with that
|
||
if (!oldRangeStart) {
|
||
var prev = diff[i - 1];
|
||
oldRangeStart = oldLine;
|
||
newRangeStart = newLine;
|
||
|
||
if (prev) {
|
||
curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];
|
||
oldRangeStart -= curRange.length;
|
||
newRangeStart -= curRange.length;
|
||
}
|
||
}
|
||
|
||
// Output our changes
|
||
/*istanbul ignore start*/(_curRange = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/lines.map(function (entry) {
|
||
return (current.added ? '+' : '-') + entry;
|
||
})));
|
||
|
||
// Track the updated file position
|
||
if (current.added) {
|
||
newLine += lines.length;
|
||
} else {
|
||
oldLine += lines.length;
|
||
}
|
||
} else {
|
||
// Identical context lines. Track line changes
|
||
if (oldRangeStart) {
|
||
// Close out any changes that have been output (or join overlapping)
|
||
if (lines.length <= options.context * 2 && i < diff.length - 2) {
|
||
/*istanbul ignore start*/var _curRange2;
|
||
|
||
/*istanbul ignore end*/ // Overlapping
|
||
/*istanbul ignore start*/(_curRange2 = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange2 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/contextLines(lines)));
|
||
} else {
|
||
/*istanbul ignore start*/var _curRange3;
|
||
|
||
/*istanbul ignore end*/ // end the range and output
|
||
var contextSize = Math.min(lines.length, options.context);
|
||
/*istanbul ignore start*/(_curRange3 = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange3 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/contextLines(lines.slice(0, contextSize))));
|
||
|
||
var hunk = {
|
||
oldStart: oldRangeStart,
|
||
oldLines: oldLine - oldRangeStart + contextSize,
|
||
newStart: newRangeStart,
|
||
newLines: newLine - newRangeStart + contextSize,
|
||
lines: curRange
|
||
};
|
||
if (i >= diff.length - 2 && lines.length <= options.context) {
|
||
// EOF is inside this hunk
|
||
var oldEOFNewline = /\n$/.test(oldStr);
|
||
var newEOFNewline = /\n$/.test(newStr);
|
||
if (lines.length == 0 && !oldEOFNewline) {
|
||
// special case: old has no eol and no trailing context; no-nl can end up before adds
|
||
curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file');
|
||
} else if (!oldEOFNewline || !newEOFNewline) {
|
||
curRange.push('\\ No newline at end of file');
|
||
}
|
||
}
|
||
hunks.push(hunk);
|
||
|
||
oldRangeStart = 0;
|
||
newRangeStart = 0;
|
||
curRange = [];
|
||
}
|
||
}
|
||
oldLine += lines.length;
|
||
newLine += lines.length;
|
||
}
|
||
};
|
||
|
||
for (var i = 0; i < diff.length; i++) {
|
||
/*istanbul ignore start*/_loop( /*istanbul ignore end*/i);
|
||
}
|
||
|
||
return {
|
||
oldFileName: oldFileName, newFileName: newFileName,
|
||
oldHeader: oldHeader, newHeader: newHeader,
|
||
hunks: hunks
|
||
};
|
||
}
|
||
|
||
function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
|
||
var diff = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);
|
||
|
||
var ret = [];
|
||
if (oldFileName == newFileName) {
|
||
ret.push('Index: ' + oldFileName);
|
||
}
|
||
ret.push('===================================================================');
|
||
ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader));
|
||
ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader));
|
||
|
||
for (var i = 0; i < diff.hunks.length; i++) {
|
||
var hunk = diff.hunks[i];
|
||
ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');
|
||
ret.push.apply(ret, hunk.lines);
|
||
}
|
||
|
||
return ret.join('\n') + '\n';
|
||
}
|
||
|
||
function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {
|
||
return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwiY3JlYXRlVHdvRmlsZXNQYXRjaCIsImNyZWF0ZVBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwic3BsaWNlIiwicmV0IiwiYXBwbHkiLCJqb2luIiwiZmlsZU5hbWUiXSwibWFwcGluZ3MiOiI7OztnQ0FFZ0JBLGUsR0FBQUEsZTt5REFpR0FDLG1CLEdBQUFBLG1CO3lEQXdCQUMsVyxHQUFBQSxXOztBQTNIaEI7Ozs7dUJBRU8sU0FBU0YsZUFBVCxDQUF5QkcsV0FBekIsRUFBc0NDLFdBQXRDLEVBQW1EQyxNQUFuRCxFQUEyREMsTUFBM0QsRUFBbUVDLFNBQW5FLEVBQThFQyxTQUE5RSxFQUF5RkMsT0FBekYsRUFBa0c7QUFDdkcsTUFBSSxDQUFDQSxPQUFMLEVBQWM7QUFDWkEsY0FBVSxFQUFWO0FBQ0Q7QUFDRCxNQUFJLE9BQU9BLFFBQVFDLE9BQWYsS0FBMkIsV0FBL0IsRUFBNEM7QUFDMUNELFlBQVFDLE9BQVIsR0FBa0IsQ0FBbEI7QUFDRDs7QUFFRCxNQUFNQyxPQUFPLHNFQUFVTixNQUFWLEVBQWtCQyxNQUFsQixFQUEwQkcsT0FBMUIsQ0FBYjtBQUNBRSxPQUFLQyxJQUFMLENBQVUsRUFBQ0MsT0FBTyxFQUFSLEVBQVlDLE9BQU8sRUFBbkIsRUFBVixFQVR1RyxDQVNsRTs7QUFFckMsV0FBU0MsWUFBVCxDQUFzQkQsS0FBdEIsRUFBNkI7QUFDM0IsV0FBT0EsTUFBTUUsR0FBTixDQUFVLFVBQVNDLEtBQVQsRUFBZ0I7QUFBRSxhQUFPLE1BQU1BLEtBQWI7QUFBcUIsS0FBakQsQ0FBUDtBQUNEOztBQUVELE1BQUlDLFFBQVEsRUFBWjtBQUNBLE1BQUlDLGdCQUFnQixDQUFwQjtBQUFBLE1BQXVCQyxnQkFBZ0IsQ0FBdkM7QUFBQSxNQUEwQ0MsV0FBVyxFQUFyRDtBQUFBLE1BQ0lDLFVBQVUsQ0FEZDtBQUFBLE1BQ2lCQyxVQUFVLENBRDNCOztBQWhCdUcsOEVBa0I5RkMsQ0FsQjhGO0FBbUJyRyxRQUFNQyxVQUFVZCxLQUFLYSxDQUFMLENBQWhCO0FBQUEsUUFDTVYsUUFBUVcsUUFBUVgsS0FBUixJQUFpQlcsUUFBUVosS0FBUixDQUFjYSxPQUFkLENBQXNCLEtBQXRCLEVBQTZCLEVBQTdCLEVBQWlDQyxLQUFqQyxDQUF1QyxJQUF2QyxDQUQvQjtBQUVBRixZQUFRWCxLQUFSLEdBQWdCQSxLQUFoQjs7QUFFQSxRQUFJVyxRQUFRRyxLQUFSLElBQWlCSCxRQUFRSSxPQUE3QixFQUFzQztBQUFBOztBQUFBLDhCQUNwQztBQUNBLFVBQUksQ0FBQ1YsYUFBTCxFQUFvQjtBQUNsQixZQUFNVyxPQUFPbkIsS0FBS2EsSUFBSSxDQUFULENBQWI7QUFDQUwsd0JBQWdCRyxPQUFoQjtBQUNBRix3QkFBZ0JHLE9BQWhCOztBQUVBLFlBQUlPLElBQUosRUFBVTtBQUNSVCxxQkFBV1osUUFBUUMsT0FBUixHQUFrQixDQUFsQixHQUFzQkssYUFBYWUsS0FBS2hCLEtBQUwsQ0FBV2lCLEtBQVgsQ0FBaUIsQ0FBQ3RCLFFBQVFDLE9BQTFCLENBQWIsQ0FBdEIsR0FBeUUsRUFBcEY7QUFDQVMsMkJBQWlCRSxTQUFTVyxNQUExQjtBQUNBWiwyQkFBaUJDLFNBQVNXLE1BQTFCO0FBQ0Q7QUFDRjs7QUFFRDtBQUNBLDZFQUFTcEIsSUFBVCwwTEFBa0JFLE1BQU1FLEdBQU4sQ0FBVSxVQUFTQyxLQUFULEVBQWdCO0FBQzFDLGVBQU8sQ0FBQ1EsUUFBUUcsS0FBUixHQUFnQixHQUFoQixHQUFzQixHQUF2QixJQUE4QlgsS0FBckM7QUFDRCxPQUZpQixDQUFsQjs7QUFJQTtBQUNBLFVBQUlRLFFBQVFHLEtBQVosRUFBbUI7QUFDakJMLG1CQUFXVCxNQUFNa0IsTUFBakI7QUFDRCxPQUZELE1BRU87QUFDTFYsbUJBQVdSLE1BQU1rQixNQUFqQjtBQUNEO0FBQ0YsS0F6QkQsTUF5Qk87QUFDTDtBQUNBLFVBQUliLGFBQUosRUFBbUI7QUFDakI7QUFDQSxZQUFJTCxNQUFNa0IsTUFBTixJQUFnQnZCLFFBQVFDLE9BQVIsR0FBa0IsQ0FBbEMsSUFBdUNjLElBQUliLEtBQUtxQixNQUFMLEdBQWMsQ0FBN0QsRUFBZ0U7QUFBQTs7QUFBQSxrQ0FDOUQ7QUFDQSxrRkFBU3BCLElBQVQsMkxBQWtCRyxhQUFhRCxLQUFiLENBQWxCO0FBQ0QsU0FIRCxNQUdPO0FBQUE7O0FBQUEsa0NBQ0w7QUFDQSxjQUFJbUIsY0FBY0MsS0FBS0MsR0FBTCxDQUFTckIsTUFBTWtCLE1BQWYsRUFBdUJ2QixRQUFRQyxPQUEvQixDQUFsQjtBQUNBLGtGQUFTRSxJQUFULDJMQUFrQkcsYUFBYUQsTUFBTWlCLEtBQU4sQ0FBWSxDQUFaLEVBQWVFLFdBQWYsQ0FBYixDQUFsQjs7QUFFQSxjQUFJRyxPQUFPO0FBQ1RDLHNCQUFVbEIsYUFERDtBQUVUbUIsc0JBQVdoQixVQUFVSCxhQUFWLEdBQTBCYyxXQUY1QjtBQUdUTSxzQkFBVW5CLGFBSEQ7QUFJVG9CLHNCQUFXakIsVUFBVUgsYUFBVixHQUEwQmEsV0FKNUI7QUFLVG5CLG1CQUFPTztBQUxFLFdBQVg7QUFPQSxjQUFJRyxLQUFLYixLQUFLcUIsTUFBTCxHQUFjLENBQW5CLElBQXdCbEIsTUFBTWtCLE1BQU4sSUFBZ0J2QixRQUFRQyxPQUFwRCxFQUE2RDtBQUMzRDtBQUNBLGdCQUFJK0IsZ0JBQWlCLE1BQU1DLElBQU4sQ0FBV3JDLE1BQVgsQ0FBckI7QUFDQSxnQkFBSXNDLGdCQUFpQixNQUFNRCxJQUFOLENBQVdwQyxNQUFYLENBQXJCO0FBQ0EsZ0JBQUlRLE1BQU1rQixNQUFOLElBQWdCLENBQWhCLElBQXFCLENBQUNTLGFBQTFCLEVBQXlDO0FBQ3ZDO0FBQ0FwQix1QkFBU3VCLE1BQVQsQ0FBZ0JSLEtBQUtFLFFBQXJCLEVBQStCLENBQS9CLEVBQWtDLDhCQUFsQztBQUNELGFBSEQsTUFHTyxJQUFJLENBQUNHLGFBQUQsSUFBa0IsQ0FBQ0UsYUFBdkIsRUFBc0M7QUFDM0N0Qix1QkFBU1QsSUFBVCxDQUFjLDhCQUFkO0FBQ0Q7QUFDRjtBQUNETSxnQkFBTU4sSUFBTixDQUFXd0IsSUFBWDs7QUFFQWpCLDBCQUFnQixDQUFoQjtBQUNBQywwQkFBZ0IsQ0FBaEI7QUFDQUMscUJBQVcsRUFBWDtBQUNEO0FBQ0Y7QUFDREMsaUJBQVdSLE1BQU1rQixNQUFqQjtBQUNBVCxpQkFBV1QsTUFBTWtCLE1BQWpCO0FBQ0Q7QUF2Rm9HOztBQWtCdkcsT0FBSyxJQUFJUixJQUFJLENBQWIsRUFBZ0JBLElBQUliLEtBQUtxQixNQUF6QixFQUFpQ1IsR0FBakMsRUFBc0M7QUFBQSwyREFBN0JBLENBQTZCO0FBc0VyQzs7QUFFRCxTQUFPO0FBQ0xyQixpQkFBYUEsV0FEUixFQUNxQkMsYUFBYUEsV0FEbEM7QUFFTEcsZUFBV0EsU0FGTixFQUVpQkMsV0FBV0EsU0FGNUI7QUFHTFUsV0FBT0E7QUFIRixHQUFQO0FBS0Q7O0FBRU0sU0FBU2pCLG1CQUFULENBQTZCRSxXQUE3QixFQUEwQ0MsV0FBMUMsRUFBdURDLE1BQXZELEVBQStEQyxNQUEvRCxFQUF1RUMsU0FBdkUsRUFBa0ZDLFNBQWxGLEVBQTZGQyxPQUE3RixFQUFzRztBQUMzRyxNQUFNRSxPQUFPWCxnQkFBZ0JHLFdBQWhCLEVBQTZCQyxXQUE3QixFQUEwQ0MsTUFBMUMsRUFBa0RDLE1BQWxELEVBQTBEQyxTQUExRCxFQUFxRUMsU0FBckUsRUFBZ0ZDLE9BQWhGLENBQWI7O0FBRUEsTUFBTW9DLE1BQU0sRUFBWjtBQUNBLE1BQUkxQyxlQUFlQyxXQUFuQixFQUFnQztBQUM5QnlDLFFBQUlqQyxJQUFKLENBQVMsWUFBWVQsV0FBckI7QUFDRDtBQUNEMEMsTUFBSWpDLElBQUosQ0FBUyxxRUFBVDtBQUNBaUMsTUFBSWpDLElBQUosQ0FBUyxTQUFTRCxLQUFLUixXQUFkLElBQTZCLE9BQU9RLEtBQUtKLFNBQVosS0FBMEIsV0FBMUIsR0FBd0MsRUFBeEMsR0FBNkMsT0FBT0ksS0FBS0osU0FBdEYsQ0FBVDtBQUNBc0MsTUFBSWpDLElBQUosQ0FBUyxTQUFTRCxLQUFLUCxXQUFkLElBQTZCLE9BQU9PLEtBQUtILFNBQVosS0FBMEIsV0FBMUIsR0FBd0MsRUFBeEMsR0FBNkMsT0FBT0csS0FBS0gsU0FBdEYsQ0FBVDs7QUFFQSxPQUFLLElBQUlnQixJQUFJLENBQWIsRUFBZ0JBLElBQUliLEtBQUtPLEtBQUwsQ0FBV2MsTUFBL0IsRUFBdUNSLEdBQXZDLEVBQTRDO0FBQzFDLFFBQU1ZLE9BQU96QixLQUFLTyxLQUFMLENBQVdNLENBQVgsQ0FBYjtBQUNBcUIsUUFBSWpDLElBQUosQ0FDRSxTQUFTd0IsS0FBS0MsUUFBZCxHQUF5QixHQUF6QixHQUErQkQsS0FBS0UsUUFBcEMsR0FDRSxJQURGLEdBQ1NGLEtBQUtHLFFBRGQsR0FDeUIsR0FEekIsR0FDK0JILEtBQUtJLFFBRHBDLEdBRUUsS0FISjtBQUtBSyxRQUFJakMsSUFBSixDQUFTa0MsS0FBVCxDQUFlRCxHQUFmLEVBQW9CVCxLQUFLdEIsS0FBekI7QUFDRDs7QUFFRCxTQUFPK0IsSUFBSUUsSUFBSixDQUFTLElBQVQsSUFBaUIsSUFBeEI7QUFDRDs7QUFFTSxTQUFTN0MsV0FBVCxDQUFxQjhDLFFBQXJCLEVBQStCM0MsTUFBL0IsRUFBdUNDLE1BQXZDLEVBQStDQyxTQUEvQyxFQUEwREMsU0FBMUQsRUFBcUVDLE9BQXJFLEVBQThFO0FBQ25GLFNBQU9SLG9CQUFvQitDLFFBQXBCLEVBQThCQSxRQUE5QixFQUF3QzNDLE1BQXhDLEVBQWdEQyxNQUFoRCxFQUF3REMsU0FBeEQsRUFBbUVDLFNBQW5FLEVBQThFQyxPQUE5RSxDQUFQO0FBQ0QiLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWZmTGluZXN9IGZyb20gJy4uL2RpZmYvbGluZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgZGlmZi5wdXNoKHt2YWx1ZTogJycsIGxpbmVzOiBbXX0pOyAgIC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cbiAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihlbnRyeSkgeyByZXR1cm4gJyAnICsgZW50cnk7IH0pO1xuICB9XG5cbiAgbGV0IGh1bmtzID0gW107XG4gIGxldCBvbGRSYW5nZVN0YXJ0ID0gMCwgbmV3UmFuZ2VTdGFydCA9IDAsIGN1clJhbmdlID0gW10sXG4gICAgICBvbGRMaW5lID0gMSwgbmV3TGluZSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcblxuICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcbiAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gZGlmZltpIC0gMV07XG4gICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcblxuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgY3VyUmFuZ2UucHVzaCguLi4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgLy8gQ2xvc2Ugb3V0IGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCAob3Igam9pbiBvdmVybGFwcGluZylcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIGxldCBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICBjdXJSYW5nZS5wdXNoKC4uLiBjb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSk7XG5cbiAgICAgICAgICBsZXQgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IChvbGRMaW5lIC0gb2xkUmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgbmV3TGluZXM6IChuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIGxpbmVzOiBjdXJSYW5nZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGkgPj0gZGlmZi5sZW5ndGggLSAyICYmIGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIEVPRiBpcyBpbnNpZGUgdGhpcyBodW5rXG4gICAgICAgICAgICBsZXQgb2xkRU9GTmV3bGluZSA9ICgvXFxuJC8udGVzdChvbGRTdHIpKTtcbiAgICAgICAgICAgIGxldCBuZXdFT0ZOZXdsaW5lID0gKC9cXG4kLy50ZXN0KG5ld1N0cikpO1xuICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAwICYmICFvbGRFT0ZOZXdsaW5lKSB7XG4gICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogb2xkIGhhcyBubyBlb2wgYW5kIG5vIHRyYWlsaW5nIGNvbnRleHQ7IG5vLW5sIGNhbiBlbmQgdXAgYmVmb3JlIGFkZHNcbiAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9sZEVPRk5ld2xpbmUgfHwgIW5ld0VPRk5ld2xpbmUpIHtcbiAgICAgICAgICAgICAgY3VyUmFuZ2UucHVzaCgnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGh1bmtzLnB1c2goaHVuayk7XG5cbiAgICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICBjdXJSYW5nZSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb2xkRmlsZU5hbWU6IG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZTogbmV3RmlsZU5hbWUsXG4gICAgb2xkSGVhZGVyOiBvbGRIZWFkZXIsIG5ld0hlYWRlcjogbmV3SGVhZGVyLFxuICAgIGh1bmtzOiBodW5rc1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICBjb25zdCBkaWZmID0gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcblxuICBjb25zdCByZXQgPSBbXTtcbiAgaWYgKG9sZEZpbGVOYW1lID09IG5ld0ZpbGVOYW1lKSB7XG4gICAgcmV0LnB1c2goJ0luZGV4OiAnICsgb2xkRmlsZU5hbWUpO1xuICB9XG4gIHJldC5wdXNoKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gIHJldC5wdXNoKCctLS0gJyArIGRpZmYub2xkRmlsZU5hbWUgKyAodHlwZW9mIGRpZmYub2xkSGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm9sZEhlYWRlcikpO1xuICByZXQucHVzaCgnKysrICcgKyBkaWZmLm5ld0ZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm5ld0hlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5uZXdIZWFkZXIpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZmYuaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBodW5rID0gZGlmZi5odW5rc1tpXTtcbiAgICByZXQucHVzaChcbiAgICAgICdAQCAtJyArIGh1bmsub2xkU3RhcnQgKyAnLCcgKyBodW5rLm9sZExpbmVzXG4gICAgICArICcgKycgKyBodW5rLm5ld1N0YXJ0ICsgJywnICsgaHVuay5uZXdMaW5lc1xuICAgICAgKyAnIEBAJ1xuICAgICk7XG4gICAgcmV0LnB1c2guYXBwbHkocmV0LCBodW5rLmxpbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXQuam9pbignXFxuJykgKyAnXFxuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGNoKGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGNyZWF0ZVR3b0ZpbGVzUGF0Y2goZmlsZU5hbWUsIGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpO1xufVxuIl19
|
||
|
||
|
||
/***/ }),
|
||
/* 15 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*istanbul ignore start*/"use strict";
|
||
|
||
exports.__esModule = true;
|
||
exports. /*istanbul ignore end*/arrayEqual = arrayEqual;
|
||
/*istanbul ignore start*/exports. /*istanbul ignore end*/arrayStartsWith = arrayStartsWith;
|
||
function arrayEqual(a, b) {
|
||
if (a.length !== b.length) {
|
||
return false;
|
||
}
|
||
|
||
return arrayStartsWith(a, b);
|
||
}
|
||
|
||
function arrayStartsWith(array, start) {
|
||
if (start.length > array.length) {
|
||
return false;
|
||
}
|
||
|
||
for (var i = 0; i < start.length; i++) {
|
||
if (start[i] !== array[i]) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FycmF5LmpzIl0sIm5hbWVzIjpbImFycmF5RXF1YWwiLCJhcnJheVN0YXJ0c1dpdGgiLCJhIiwiYiIsImxlbmd0aCIsImFycmF5Iiwic3RhcnQiLCJpIl0sIm1hcHBpbmdzIjoiOzs7Z0NBQWdCQSxVLEdBQUFBLFU7eURBUUFDLGUsR0FBQUEsZTtBQVJULFNBQVNELFVBQVQsQ0FBb0JFLENBQXBCLEVBQXVCQyxDQUF2QixFQUEwQjtBQUMvQixNQUFJRCxFQUFFRSxNQUFGLEtBQWFELEVBQUVDLE1BQW5CLEVBQTJCO0FBQ3pCLFdBQU8sS0FBUDtBQUNEOztBQUVELFNBQU9ILGdCQUFnQkMsQ0FBaEIsRUFBbUJDLENBQW5CLENBQVA7QUFDRDs7QUFFTSxTQUFTRixlQUFULENBQXlCSSxLQUF6QixFQUFnQ0MsS0FBaEMsRUFBdUM7QUFDNUMsTUFBSUEsTUFBTUYsTUFBTixHQUFlQyxNQUFNRCxNQUF6QixFQUFpQztBQUMvQixXQUFPLEtBQVA7QUFDRDs7QUFFRCxPQUFLLElBQUlHLElBQUksQ0FBYixFQUFnQkEsSUFBSUQsTUFBTUYsTUFBMUIsRUFBa0NHLEdBQWxDLEVBQXVDO0FBQ3JDLFFBQUlELE1BQU1DLENBQU4sTUFBYUYsTUFBTUUsQ0FBTixDQUFqQixFQUEyQjtBQUN6QixhQUFPLEtBQVA7QUFDRDtBQUNGOztBQUVELFNBQU8sSUFBUDtBQUNEIiwiZmlsZSI6ImFycmF5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGFycmF5RXF1YWwoYSwgYikge1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5U3RhcnRzV2l0aChhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcbiAgaWYgKHN0YXJ0Lmxlbmd0aCA+IGFycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RhcnRbaV0gIT09IGFycmF5W2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
|
||
|
||
|
||
/***/ }),
|
||
/* 16 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*istanbul ignore start*/"use strict";
|
||
|
||
exports.__esModule = true;
|
||
exports. /*istanbul ignore end*/convertChangesToDMP = convertChangesToDMP;
|
||
// See: http://code.google.com/p/google-diff-match-patch/wiki/API
|
||
function convertChangesToDMP(changes) {
|
||
var ret = [],
|
||
change = /*istanbul ignore start*/void 0 /*istanbul ignore end*/,
|
||
operation = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
|
||
for (var i = 0; i < changes.length; i++) {
|
||
change = changes[i];
|
||
if (change.added) {
|
||
operation = 1;
|
||
} else if (change.removed) {
|
||
operation = -1;
|
||
} else {
|
||
operation = 0;
|
||
}
|
||
|
||
ret.push([operation, change.value]);
|
||
}
|
||
return ret;
|
||
}
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L2RtcC5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0Q2hhbmdlc1RvRE1QIiwiY2hhbmdlcyIsInJldCIsImNoYW5nZSIsIm9wZXJhdGlvbiIsImkiLCJsZW5ndGgiLCJhZGRlZCIsInJlbW92ZWQiLCJwdXNoIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7OztnQ0FDZ0JBLG1CLEdBQUFBLG1CO0FBRGhCO0FBQ08sU0FBU0EsbUJBQVQsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUlDLE1BQU0sRUFBVjtBQUFBLE1BQ0lDLHdDQURKO0FBQUEsTUFFSUMsMkNBRko7QUFHQSxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUosUUFBUUssTUFBNUIsRUFBb0NELEdBQXBDLEVBQXlDO0FBQ3ZDRixhQUFTRixRQUFRSSxDQUFSLENBQVQ7QUFDQSxRQUFJRixPQUFPSSxLQUFYLEVBQWtCO0FBQ2hCSCxrQkFBWSxDQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUlELE9BQU9LLE9BQVgsRUFBb0I7QUFDekJKLGtCQUFZLENBQUMsQ0FBYjtBQUNELEtBRk0sTUFFQTtBQUNMQSxrQkFBWSxDQUFaO0FBQ0Q7O0FBRURGLFFBQUlPLElBQUosQ0FBUyxDQUFDTCxTQUFELEVBQVlELE9BQU9PLEtBQW5CLENBQVQ7QUFDRDtBQUNELFNBQU9SLEdBQVA7QUFDRCIsImZpbGUiOiJkbXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtZGlmZi1tYXRjaC1wYXRjaC93aWtpL0FQSVxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9ETVAoY2hhbmdlcykge1xuICBsZXQgcmV0ID0gW10sXG4gICAgICBjaGFuZ2UsXG4gICAgICBvcGVyYXRpb247XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgb3BlcmF0aW9uID0gMTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICBvcGVyYXRpb24gPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlcmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICByZXQucHVzaChbb3BlcmF0aW9uLCBjaGFuZ2UudmFsdWVdKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19
|
||
|
||
|
||
/***/ }),
|
||
/* 17 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*istanbul ignore start*/'use strict';
|
||
|
||
exports.__esModule = true;
|
||
exports. /*istanbul ignore end*/convertChangesToXML = convertChangesToXML;
|
||
function convertChangesToXML(changes) {
|
||
var ret = [];
|
||
for (var i = 0; i < changes.length; i++) {
|
||
var change = changes[i];
|
||
if (change.added) {
|
||
ret.push('<ins>');
|
||
} else if (change.removed) {
|
||
ret.push('<del>');
|
||
}
|
||
|
||
ret.push(escapeHTML(change.value));
|
||
|
||
if (change.added) {
|
||
ret.push('</ins>');
|
||
} else if (change.removed) {
|
||
ret.push('</del>');
|
||
}
|
||
}
|
||
return ret.join('');
|
||
}
|
||
|
||
function escapeHTML(s) {
|
||
var n = s;
|
||
n = n.replace(/&/g, '&');
|
||
n = n.replace(/</g, '<');
|
||
n = n.replace(/>/g, '>');
|
||
n = n.replace(/"/g, '"');
|
||
|
||
return n;
|
||
}
|
||
|
||
|
||
/***/ })
|
||
/******/ ])
|
||
});
|
||
;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 228:
|
||
/***/ (function(module, exports) {
|
||
|
||
var traverse = module.exports = function (obj) {
|
||
return new Traverse(obj);
|
||
};
|
||
|
||
function Traverse (obj) {
|
||
this.value = obj;
|
||
}
|
||
|
||
Traverse.prototype.get = function (ps) {
|
||
var node = this.value;
|
||
for (var i = 0; i < ps.length; i ++) {
|
||
var key = ps[i];
|
||
if (!node || !hasOwnProperty.call(node, key)) {
|
||
node = undefined;
|
||
break;
|
||
}
|
||
node = node[key];
|
||
}
|
||
return node;
|
||
};
|
||
|
||
Traverse.prototype.has = function (ps) {
|
||
var node = this.value;
|
||
for (var i = 0; i < ps.length; i ++) {
|
||
var key = ps[i];
|
||
if (!node || !hasOwnProperty.call(node, key)) {
|
||
return false;
|
||
}
|
||
node = node[key];
|
||
}
|
||
return true;
|
||
};
|
||
|
||
Traverse.prototype.set = function (ps, value) {
|
||
var node = this.value;
|
||
for (var i = 0; i < ps.length - 1; i ++) {
|
||
var key = ps[i];
|
||
if (!hasOwnProperty.call(node, key)) node[key] = {};
|
||
node = node[key];
|
||
}
|
||
node[ps[i]] = value;
|
||
return value;
|
||
};
|
||
|
||
Traverse.prototype.map = function (cb) {
|
||
return walk(this.value, cb, true);
|
||
};
|
||
|
||
Traverse.prototype.forEach = function (cb) {
|
||
this.value = walk(this.value, cb, false);
|
||
return this.value;
|
||
};
|
||
|
||
Traverse.prototype.reduce = function (cb, init) {
|
||
var skip = arguments.length === 1;
|
||
var acc = skip ? this.value : init;
|
||
this.forEach(function (x) {
|
||
if (!this.isRoot || !skip) {
|
||
acc = cb.call(this, acc, x);
|
||
}
|
||
});
|
||
return acc;
|
||
};
|
||
|
||
Traverse.prototype.paths = function () {
|
||
var acc = [];
|
||
this.forEach(function (x) {
|
||
acc.push(this.path);
|
||
});
|
||
return acc;
|
||
};
|
||
|
||
Traverse.prototype.nodes = function () {
|
||
var acc = [];
|
||
this.forEach(function (x) {
|
||
acc.push(this.node);
|
||
});
|
||
return acc;
|
||
};
|
||
|
||
Traverse.prototype.clone = function () {
|
||
var parents = [], nodes = [];
|
||
|
||
return (function clone (src) {
|
||
for (var i = 0; i < parents.length; i++) {
|
||
if (parents[i] === src) {
|
||
return nodes[i];
|
||
}
|
||
}
|
||
|
||
if (typeof src === 'object' && src !== null) {
|
||
var dst = copy(src);
|
||
|
||
parents.push(src);
|
||
nodes.push(dst);
|
||
|
||
forEach(objectKeys(src), function (key) {
|
||
dst[key] = clone(src[key]);
|
||
});
|
||
|
||
parents.pop();
|
||
nodes.pop();
|
||
return dst;
|
||
}
|
||
else {
|
||
return src;
|
||
}
|
||
})(this.value);
|
||
};
|
||
|
||
function walk (root, cb, immutable) {
|
||
var path = [];
|
||
var parents = [];
|
||
var alive = true;
|
||
|
||
return (function walker (node_) {
|
||
var node = immutable ? copy(node_) : node_;
|
||
var modifiers = {};
|
||
|
||
var keepGoing = true;
|
||
|
||
var state = {
|
||
node : node,
|
||
node_ : node_,
|
||
path : [].concat(path),
|
||
parent : parents[parents.length - 1],
|
||
parents : parents,
|
||
key : path.slice(-1)[0],
|
||
isRoot : path.length === 0,
|
||
level : path.length,
|
||
circular : null,
|
||
update : function (x, stopHere) {
|
||
if (!state.isRoot) {
|
||
state.parent.node[state.key] = x;
|
||
}
|
||
state.node = x;
|
||
if (stopHere) keepGoing = false;
|
||
},
|
||
'delete' : function (stopHere) {
|
||
delete state.parent.node[state.key];
|
||
if (stopHere) keepGoing = false;
|
||
},
|
||
remove : function (stopHere) {
|
||
if (isArray(state.parent.node)) {
|
||
state.parent.node.splice(state.key, 1);
|
||
}
|
||
else {
|
||
delete state.parent.node[state.key];
|
||
}
|
||
if (stopHere) keepGoing = false;
|
||
},
|
||
keys : null,
|
||
before : function (f) { modifiers.before = f },
|
||
after : function (f) { modifiers.after = f },
|
||
pre : function (f) { modifiers.pre = f },
|
||
post : function (f) { modifiers.post = f },
|
||
stop : function () { alive = false },
|
||
block : function () { keepGoing = false }
|
||
};
|
||
|
||
if (!alive) return state;
|
||
|
||
function updateState() {
|
||
if (typeof state.node === 'object' && state.node !== null) {
|
||
if (!state.keys || state.node_ !== state.node) {
|
||
state.keys = objectKeys(state.node)
|
||
}
|
||
|
||
state.isLeaf = state.keys.length == 0;
|
||
|
||
for (var i = 0; i < parents.length; i++) {
|
||
if (parents[i].node_ === node_) {
|
||
state.circular = parents[i];
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
state.isLeaf = true;
|
||
state.keys = null;
|
||
}
|
||
|
||
state.notLeaf = !state.isLeaf;
|
||
state.notRoot = !state.isRoot;
|
||
}
|
||
|
||
updateState();
|
||
|
||
// use return values to update if defined
|
||
var ret = cb.call(state, state.node);
|
||
if (ret !== undefined && state.update) state.update(ret);
|
||
|
||
if (modifiers.before) modifiers.before.call(state, state.node);
|
||
|
||
if (!keepGoing) return state;
|
||
|
||
if (typeof state.node == 'object'
|
||
&& state.node !== null && !state.circular) {
|
||
parents.push(state);
|
||
|
||
updateState();
|
||
|
||
forEach(state.keys, function (key, i) {
|
||
path.push(key);
|
||
|
||
if (modifiers.pre) modifiers.pre.call(state, state.node[key], key);
|
||
|
||
var child = walker(state.node[key]);
|
||
if (immutable && hasOwnProperty.call(state.node, key)) {
|
||
state.node[key] = child.node;
|
||
}
|
||
|
||
child.isLast = i == state.keys.length - 1;
|
||
child.isFirst = i == 0;
|
||
|
||
if (modifiers.post) modifiers.post.call(state, child);
|
||
|
||
path.pop();
|
||
});
|
||
parents.pop();
|
||
}
|
||
|
||
if (modifiers.after) modifiers.after.call(state, state.node);
|
||
|
||
return state;
|
||
})(root).node;
|
||
}
|
||
|
||
function copy (src) {
|
||
if (typeof src === 'object' && src !== null) {
|
||
var dst;
|
||
|
||
if (isArray(src)) {
|
||
dst = [];
|
||
}
|
||
else if (isDate(src)) {
|
||
dst = new Date(src.getTime ? src.getTime() : src);
|
||
}
|
||
else if (isRegExp(src)) {
|
||
dst = new RegExp(src);
|
||
}
|
||
else if (isError(src)) {
|
||
dst = { message: src.message };
|
||
}
|
||
else if (isBoolean(src)) {
|
||
dst = new Boolean(src);
|
||
}
|
||
else if (isNumber(src)) {
|
||
dst = new Number(src);
|
||
}
|
||
else if (isString(src)) {
|
||
dst = new String(src);
|
||
}
|
||
else if (Object.create && Object.getPrototypeOf) {
|
||
dst = Object.create(Object.getPrototypeOf(src));
|
||
}
|
||
else if (src.constructor === Object) {
|
||
dst = {};
|
||
}
|
||
else {
|
||
var proto =
|
||
(src.constructor && src.constructor.prototype)
|
||
|| src.__proto__
|
||
|| {}
|
||
;
|
||
var T = function () {};
|
||
T.prototype = proto;
|
||
dst = new T;
|
||
}
|
||
|
||
forEach(objectKeys(src), function (key) {
|
||
dst[key] = src[key];
|
||
});
|
||
return dst;
|
||
}
|
||
else return src;
|
||
}
|
||
|
||
var objectKeys = Object.keys || function keys (obj) {
|
||
var res = [];
|
||
for (var key in obj) res.push(key)
|
||
return res;
|
||
};
|
||
|
||
function toS (obj) { return Object.prototype.toString.call(obj) }
|
||
function isDate (obj) { return toS(obj) === '[object Date]' }
|
||
function isRegExp (obj) { return toS(obj) === '[object RegExp]' }
|
||
function isError (obj) { return toS(obj) === '[object Error]' }
|
||
function isBoolean (obj) { return toS(obj) === '[object Boolean]' }
|
||
function isNumber (obj) { return toS(obj) === '[object Number]' }
|
||
function isString (obj) { return toS(obj) === '[object String]' }
|
||
|
||
var isArray = Array.isArray || function isArray (xs) {
|
||
return Object.prototype.toString.call(xs) === '[object Array]';
|
||
};
|
||
|
||
var forEach = function (xs, fn) {
|
||
if (xs.forEach) return xs.forEach(fn)
|
||
else for (var i = 0; i < xs.length; i++) {
|
||
fn(xs[i], i, xs);
|
||
}
|
||
};
|
||
|
||
forEach(objectKeys(Traverse.prototype), function (key) {
|
||
traverse[key] = function (obj) {
|
||
var args = [].slice.call(arguments, 1);
|
||
var t = new Traverse(obj);
|
||
return t[key].apply(t, args);
|
||
};
|
||
});
|
||
|
||
var hasOwnProperty = Object.hasOwnProperty || function (obj, key) {
|
||
return key in obj;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 23:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
|
||
var arrayWithHoles = __webpack_require__(38);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
|
||
function _iterableToArrayLimit(arr, i) {
|
||
var _arr = [];
|
||
var _n = true;
|
||
var _d = false;
|
||
var _e = undefined;
|
||
|
||
try {
|
||
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
|
||
_arr.push(_s.value);
|
||
|
||
if (i && _arr.length === i) break;
|
||
}
|
||
} catch (err) {
|
||
_d = true;
|
||
_e = err;
|
||
} finally {
|
||
try {
|
||
if (!_n && _i["return"] != null) _i["return"]();
|
||
} finally {
|
||
if (_d) throw _e;
|
||
}
|
||
}
|
||
|
||
return _arr;
|
||
}
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
|
||
var nonIterableRest = __webpack_require__(39);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _slicedToArray; });
|
||
|
||
|
||
|
||
function _slicedToArray(arr, i) {
|
||
return Object(arrayWithHoles["a" /* default */])(arr) || _iterableToArrayLimit(arr, i) || Object(nonIterableRest["a" /* default */])();
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 25:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["dom"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 26:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["url"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 27:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["hooks"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 28:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["React"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 3:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["components"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 30:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _iterableToArray; });
|
||
function _iterableToArray(iter) {
|
||
if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 31:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _typeof; });
|
||
function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }
|
||
|
||
function _typeof(obj) {
|
||
if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
|
||
_typeof = function _typeof(obj) {
|
||
return _typeof2(obj);
|
||
};
|
||
} else {
|
||
_typeof = function _typeof(obj) {
|
||
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
|
||
};
|
||
}
|
||
|
||
return _typeof(obj);
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 34:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/**
|
||
* Copyright (c) 2013-present, Facebook, Inc.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/
|
||
|
||
if (false) { var throwOnDirectAccess, ReactIs; } else {
|
||
// By explicitly using `prop-types` you are opting into new production behavior.
|
||
// http://fb.me/prop-types-in-prod
|
||
module.exports = __webpack_require__(94)();
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 35:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["blob"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 36:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var LEAF_KEY, hasWeakMap;
|
||
|
||
/**
|
||
* Arbitrary value used as key for referencing cache object in WeakMap tree.
|
||
*
|
||
* @type {Object}
|
||
*/
|
||
LEAF_KEY = {};
|
||
|
||
/**
|
||
* Whether environment supports WeakMap.
|
||
*
|
||
* @type {boolean}
|
||
*/
|
||
hasWeakMap = typeof WeakMap !== 'undefined';
|
||
|
||
/**
|
||
* Returns the first argument as the sole entry in an array.
|
||
*
|
||
* @param {*} value Value to return.
|
||
*
|
||
* @return {Array} Value returned as entry in array.
|
||
*/
|
||
function arrayOf( value ) {
|
||
return [ value ];
|
||
}
|
||
|
||
/**
|
||
* Returns true if the value passed is object-like, or false otherwise. A value
|
||
* is object-like if it can support property assignment, e.g. object or array.
|
||
*
|
||
* @param {*} value Value to test.
|
||
*
|
||
* @return {boolean} Whether value is object-like.
|
||
*/
|
||
function isObjectLike( value ) {
|
||
return !! value && 'object' === typeof value;
|
||
}
|
||
|
||
/**
|
||
* Creates and returns a new cache object.
|
||
*
|
||
* @return {Object} Cache object.
|
||
*/
|
||
function createCache() {
|
||
var cache = {
|
||
clear: function() {
|
||
cache.head = null;
|
||
},
|
||
};
|
||
|
||
return cache;
|
||
}
|
||
|
||
/**
|
||
* Returns true if entries within the two arrays are strictly equal by
|
||
* reference from a starting index.
|
||
*
|
||
* @param {Array} a First array.
|
||
* @param {Array} b Second array.
|
||
* @param {number} fromIndex Index from which to start comparison.
|
||
*
|
||
* @return {boolean} Whether arrays are shallowly equal.
|
||
*/
|
||
function isShallowEqual( a, b, fromIndex ) {
|
||
var i;
|
||
|
||
if ( a.length !== b.length ) {
|
||
return false;
|
||
}
|
||
|
||
for ( i = fromIndex; i < a.length; i++ ) {
|
||
if ( a[ i ] !== b[ i ] ) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Returns a memoized selector function. The getDependants function argument is
|
||
* called before the memoized selector and is expected to return an immutable
|
||
* reference or array of references on which the selector depends for computing
|
||
* its own return value. The memoize cache is preserved only as long as those
|
||
* dependant references remain the same. If getDependants returns a different
|
||
* reference(s), the cache is cleared and the selector value regenerated.
|
||
*
|
||
* @param {Function} selector Selector function.
|
||
* @param {Function} getDependants Dependant getter returning an immutable
|
||
* reference or array of reference used in
|
||
* cache bust consideration.
|
||
*
|
||
* @return {Function} Memoized selector.
|
||
*/
|
||
/* harmony default export */ __webpack_exports__["a"] = (function( selector, getDependants ) {
|
||
var rootCache, getCache;
|
||
|
||
// Use object source as dependant if getter not provided
|
||
if ( ! getDependants ) {
|
||
getDependants = arrayOf;
|
||
}
|
||
|
||
/**
|
||
* Returns the root cache. If WeakMap is supported, this is assigned to the
|
||
* root WeakMap cache set, otherwise it is a shared instance of the default
|
||
* cache object.
|
||
*
|
||
* @return {(WeakMap|Object)} Root cache object.
|
||
*/
|
||
function getRootCache() {
|
||
return rootCache;
|
||
}
|
||
|
||
/**
|
||
* Returns the cache for a given dependants array. When possible, a WeakMap
|
||
* will be used to create a unique cache for each set of dependants. This
|
||
* is feasible due to the nature of WeakMap in allowing garbage collection
|
||
* to occur on entries where the key object is no longer referenced. Since
|
||
* WeakMap requires the key to be an object, this is only possible when the
|
||
* dependant is object-like. The root cache is created as a hierarchy where
|
||
* each top-level key is the first entry in a dependants set, the value a
|
||
* WeakMap where each key is the next dependant, and so on. This continues
|
||
* so long as the dependants are object-like. If no dependants are object-
|
||
* like, then the cache is shared across all invocations.
|
||
*
|
||
* @see isObjectLike
|
||
*
|
||
* @param {Array} dependants Selector dependants.
|
||
*
|
||
* @return {Object} Cache object.
|
||
*/
|
||
function getWeakMapCache( dependants ) {
|
||
var caches = rootCache,
|
||
isUniqueByDependants = true,
|
||
i, dependant, map, cache;
|
||
|
||
for ( i = 0; i < dependants.length; i++ ) {
|
||
dependant = dependants[ i ];
|
||
|
||
// Can only compose WeakMap from object-like key.
|
||
if ( ! isObjectLike( dependant ) ) {
|
||
isUniqueByDependants = false;
|
||
break;
|
||
}
|
||
|
||
// Does current segment of cache already have a WeakMap?
|
||
if ( caches.has( dependant ) ) {
|
||
// Traverse into nested WeakMap.
|
||
caches = caches.get( dependant );
|
||
} else {
|
||
// Create, set, and traverse into a new one.
|
||
map = new WeakMap();
|
||
caches.set( dependant, map );
|
||
caches = map;
|
||
}
|
||
}
|
||
|
||
// We use an arbitrary (but consistent) object as key for the last item
|
||
// in the WeakMap to serve as our running cache.
|
||
if ( ! caches.has( LEAF_KEY ) ) {
|
||
cache = createCache();
|
||
cache.isUniqueByDependants = isUniqueByDependants;
|
||
caches.set( LEAF_KEY, cache );
|
||
}
|
||
|
||
return caches.get( LEAF_KEY );
|
||
}
|
||
|
||
// Assign cache handler by availability of WeakMap
|
||
getCache = hasWeakMap ? getWeakMapCache : getRootCache;
|
||
|
||
/**
|
||
* Resets root memoization cache.
|
||
*/
|
||
function clear() {
|
||
rootCache = hasWeakMap ? new WeakMap() : createCache();
|
||
}
|
||
|
||
// eslint-disable-next-line jsdoc/check-param-names
|
||
/**
|
||
* The augmented selector call, considering first whether dependants have
|
||
* changed before passing it to underlying memoize function.
|
||
*
|
||
* @param {Object} source Source object for derivation.
|
||
* @param {...*} extraArgs Additional arguments to pass to selector.
|
||
*
|
||
* @return {*} Selector result.
|
||
*/
|
||
function callSelector( /* source, ...extraArgs */ ) {
|
||
var len = arguments.length,
|
||
cache, node, i, args, dependants;
|
||
|
||
// Create copy of arguments (avoid leaking deoptimization).
|
||
args = new Array( len );
|
||
for ( i = 0; i < len; i++ ) {
|
||
args[ i ] = arguments[ i ];
|
||
}
|
||
|
||
dependants = getDependants.apply( null, args );
|
||
cache = getCache( dependants );
|
||
|
||
// If not guaranteed uniqueness by dependants (primitive type or lack
|
||
// of WeakMap support), shallow compare against last dependants and, if
|
||
// references have changed, destroy cache to recalculate result.
|
||
if ( ! cache.isUniqueByDependants ) {
|
||
if ( cache.lastDependants && ! isShallowEqual( dependants, cache.lastDependants, 0 ) ) {
|
||
cache.clear();
|
||
}
|
||
|
||
cache.lastDependants = dependants;
|
||
}
|
||
|
||
node = cache.head;
|
||
while ( node ) {
|
||
// Check whether node arguments match arguments
|
||
if ( ! isShallowEqual( node.args, args, 1 ) ) {
|
||
node = node.next;
|
||
continue;
|
||
}
|
||
|
||
// At this point we can assume we've found a match
|
||
|
||
// Surface matched node to head if not already
|
||
if ( node !== cache.head ) {
|
||
// Adjust siblings to point to each other.
|
||
node.prev.next = node.next;
|
||
if ( node.next ) {
|
||
node.next.prev = node.prev;
|
||
}
|
||
|
||
node.next = cache.head;
|
||
node.prev = null;
|
||
cache.head.prev = node;
|
||
cache.head = node;
|
||
}
|
||
|
||
// Return immediately
|
||
return node.val;
|
||
}
|
||
|
||
// No cached value found. Continue to insertion phase:
|
||
|
||
node = {
|
||
// Generate the result from original function
|
||
val: selector.apply( null, args ),
|
||
};
|
||
|
||
// Avoid including the source object in the cache.
|
||
args[ 0 ] = null;
|
||
node.args = args;
|
||
|
||
// Don't need to check whether node is already head, since it would
|
||
// have been returned above already if it was
|
||
|
||
// Shift existing head down list
|
||
if ( cache.head ) {
|
||
cache.head.prev = node;
|
||
node.next = cache.head;
|
||
}
|
||
|
||
cache.head = node;
|
||
|
||
return node.val;
|
||
}
|
||
|
||
callSelector.getDependants = getDependants;
|
||
callSelector.clear = clear;
|
||
clear();
|
||
|
||
return callSelector;
|
||
});
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 37:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["deprecated"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 38:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _arrayWithHoles; });
|
||
function _arrayWithHoles(arr) {
|
||
if (Array.isArray(arr)) return arr;
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 381:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
var actions_namespaceObject = {};
|
||
__webpack_require__.r(actions_namespaceObject);
|
||
__webpack_require__.d(actions_namespaceObject, "resetBlocks", function() { return resetBlocks; });
|
||
__webpack_require__.d(actions_namespaceObject, "receiveBlocks", function() { return receiveBlocks; });
|
||
__webpack_require__.d(actions_namespaceObject, "updateBlockAttributes", function() { return actions_updateBlockAttributes; });
|
||
__webpack_require__.d(actions_namespaceObject, "updateBlock", function() { return updateBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "selectBlock", function() { return actions_selectBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "selectPreviousBlock", function() { return selectPreviousBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "selectNextBlock", function() { return selectNextBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "startMultiSelect", function() { return startMultiSelect; });
|
||
__webpack_require__.d(actions_namespaceObject, "stopMultiSelect", function() { return stopMultiSelect; });
|
||
__webpack_require__.d(actions_namespaceObject, "multiSelect", function() { return actions_multiSelect; });
|
||
__webpack_require__.d(actions_namespaceObject, "clearSelectedBlock", function() { return clearSelectedBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "toggleSelection", function() { return actions_toggleSelection; });
|
||
__webpack_require__.d(actions_namespaceObject, "replaceBlocks", function() { return actions_replaceBlocks; });
|
||
__webpack_require__.d(actions_namespaceObject, "replaceBlock", function() { return replaceBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "moveBlocksDown", function() { return actions_moveBlocksDown; });
|
||
__webpack_require__.d(actions_namespaceObject, "moveBlocksUp", function() { return actions_moveBlocksUp; });
|
||
__webpack_require__.d(actions_namespaceObject, "moveBlockToPosition", function() { return moveBlockToPosition; });
|
||
__webpack_require__.d(actions_namespaceObject, "insertBlock", function() { return actions_insertBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "insertBlocks", function() { return actions_insertBlocks; });
|
||
__webpack_require__.d(actions_namespaceObject, "showInsertionPoint", function() { return actions_showInsertionPoint; });
|
||
__webpack_require__.d(actions_namespaceObject, "hideInsertionPoint", function() { return actions_hideInsertionPoint; });
|
||
__webpack_require__.d(actions_namespaceObject, "setTemplateValidity", function() { return setTemplateValidity; });
|
||
__webpack_require__.d(actions_namespaceObject, "synchronizeTemplate", function() { return synchronizeTemplate; });
|
||
__webpack_require__.d(actions_namespaceObject, "mergeBlocks", function() { return actions_mergeBlocks; });
|
||
__webpack_require__.d(actions_namespaceObject, "removeBlocks", function() { return actions_removeBlocks; });
|
||
__webpack_require__.d(actions_namespaceObject, "removeBlock", function() { return actions_removeBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "replaceInnerBlocks", function() { return actions_replaceInnerBlocks; });
|
||
__webpack_require__.d(actions_namespaceObject, "toggleBlockMode", function() { return toggleBlockMode; });
|
||
__webpack_require__.d(actions_namespaceObject, "startTyping", function() { return startTyping; });
|
||
__webpack_require__.d(actions_namespaceObject, "stopTyping", function() { return stopTyping; });
|
||
__webpack_require__.d(actions_namespaceObject, "enterFormattedText", function() { return enterFormattedText; });
|
||
__webpack_require__.d(actions_namespaceObject, "exitFormattedText", function() { return exitFormattedText; });
|
||
__webpack_require__.d(actions_namespaceObject, "selectionChange", function() { return selectionChange; });
|
||
__webpack_require__.d(actions_namespaceObject, "insertDefaultBlock", function() { return actions_insertDefaultBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "updateBlockListSettings", function() { return updateBlockListSettings; });
|
||
__webpack_require__.d(actions_namespaceObject, "updateSettings", function() { return updateSettings; });
|
||
__webpack_require__.d(actions_namespaceObject, "__unstableSaveReusableBlock", function() { return __unstableSaveReusableBlock; });
|
||
__webpack_require__.d(actions_namespaceObject, "__unstableMarkLastChangeAsPersistent", function() { return actions_unstableMarkLastChangeAsPersistent; });
|
||
__webpack_require__.d(actions_namespaceObject, "__unstableMarkAutomaticChange", function() { return __unstableMarkAutomaticChange; });
|
||
__webpack_require__.d(actions_namespaceObject, "setNavigationMode", function() { return actions_setNavigationMode; });
|
||
var selectors_namespaceObject = {};
|
||
__webpack_require__.r(selectors_namespaceObject);
|
||
__webpack_require__.d(selectors_namespaceObject, "INSERTER_UTILITY_HIGH", function() { return INSERTER_UTILITY_HIGH; });
|
||
__webpack_require__.d(selectors_namespaceObject, "INSERTER_UTILITY_MEDIUM", function() { return INSERTER_UTILITY_MEDIUM; });
|
||
__webpack_require__.d(selectors_namespaceObject, "INSERTER_UTILITY_LOW", function() { return INSERTER_UTILITY_LOW; });
|
||
__webpack_require__.d(selectors_namespaceObject, "INSERTER_UTILITY_NONE", function() { return INSERTER_UTILITY_NONE; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockName", function() { return selectors_getBlockName; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isBlockValid", function() { return selectors_isBlockValid; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockAttributes", function() { return getBlockAttributes; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlock", function() { return selectors_getBlock; });
|
||
__webpack_require__.d(selectors_namespaceObject, "__unstableGetBlockWithoutInnerBlocks", function() { return selectors_unstableGetBlockWithoutInnerBlocks; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlocks", function() { return selectors_getBlocks; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getClientIdsOfDescendants", function() { return selectors_getClientIdsOfDescendants; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getClientIdsWithDescendants", function() { return getClientIdsWithDescendants; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getGlobalBlockCount", function() { return getGlobalBlockCount; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlocksByClientId", function() { return selectors_getBlocksByClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockCount", function() { return selectors_getBlockCount; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getSelectionStart", function() { return getSelectionStart; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getSelectionEnd", function() { return getSelectionEnd; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockSelectionStart", function() { return getBlockSelectionStart; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockSelectionEnd", function() { return getBlockSelectionEnd; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getSelectedBlockCount", function() { return selectors_getSelectedBlockCount; });
|
||
__webpack_require__.d(selectors_namespaceObject, "hasSelectedBlock", function() { return hasSelectedBlock; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getSelectedBlockClientId", function() { return selectors_getSelectedBlockClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getSelectedBlock", function() { return selectors_getSelectedBlock; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockRootClientId", function() { return selectors_getBlockRootClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockHierarchyRootClientId", function() { return getBlockHierarchyRootClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getAdjacentBlockClientId", function() { return getAdjacentBlockClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getPreviousBlockClientId", function() { return getPreviousBlockClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getNextBlockClientId", function() { return getNextBlockClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getSelectedBlocksInitialCaretPosition", function() { return selectors_getSelectedBlocksInitialCaretPosition; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getSelectedBlockClientIds", function() { return selectors_getSelectedBlockClientIds; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getMultiSelectedBlockClientIds", function() { return getMultiSelectedBlockClientIds; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getMultiSelectedBlocks", function() { return getMultiSelectedBlocks; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getFirstMultiSelectedBlockClientId", function() { return getFirstMultiSelectedBlockClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getLastMultiSelectedBlockClientId", function() { return getLastMultiSelectedBlockClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isFirstMultiSelectedBlock", function() { return selectors_isFirstMultiSelectedBlock; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isBlockMultiSelected", function() { return selectors_isBlockMultiSelected; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isAncestorMultiSelected", function() { return selectors_isAncestorMultiSelected; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getMultiSelectedBlocksStartClientId", function() { return getMultiSelectedBlocksStartClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getMultiSelectedBlocksEndClientId", function() { return getMultiSelectedBlocksEndClientId; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockOrder", function() { return selectors_getBlockOrder; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockIndex", function() { return selectors_getBlockIndex; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isBlockSelected", function() { return selectors_isBlockSelected; });
|
||
__webpack_require__.d(selectors_namespaceObject, "hasSelectedInnerBlock", function() { return selectors_hasSelectedInnerBlock; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isBlockWithinSelection", function() { return isBlockWithinSelection; });
|
||
__webpack_require__.d(selectors_namespaceObject, "hasMultiSelection", function() { return selectors_hasMultiSelection; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isMultiSelecting", function() { return isMultiSelecting; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isSelectionEnabled", function() { return selectors_isSelectionEnabled; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockMode", function() { return selectors_getBlockMode; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isTyping", function() { return selectors_isTyping; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isCaretWithinFormattedText", function() { return selectors_isCaretWithinFormattedText; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockInsertionPoint", function() { return getBlockInsertionPoint; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isBlockInsertionPointVisible", function() { return isBlockInsertionPointVisible; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isValidTemplate", function() { return isValidTemplate; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getTemplate", function() { return getTemplate; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getTemplateLock", function() { return selectors_getTemplateLock; });
|
||
__webpack_require__.d(selectors_namespaceObject, "canInsertBlockType", function() { return selectors_canInsertBlockType; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getInserterItems", function() { return selectors_getInserterItems; });
|
||
__webpack_require__.d(selectors_namespaceObject, "hasInserterItems", function() { return hasInserterItems; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getBlockListSettings", function() { return getBlockListSettings; });
|
||
__webpack_require__.d(selectors_namespaceObject, "getSettings", function() { return selectors_getSettings; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isLastBlockChangePersistent", function() { return selectors_isLastBlockChangePersistent; });
|
||
__webpack_require__.d(selectors_namespaceObject, "__experimentalGetParsedReusableBlock", function() { return __experimentalGetParsedReusableBlock; });
|
||
__webpack_require__.d(selectors_namespaceObject, "__unstableIsLastBlockChangeIgnored", function() { return selectors_unstableIsLastBlockChangeIgnored; });
|
||
__webpack_require__.d(selectors_namespaceObject, "__experimentalGetLastBlockAttributeChanges", function() { return __experimentalGetLastBlockAttributeChanges; });
|
||
__webpack_require__.d(selectors_namespaceObject, "isNavigationMode", function() { return selectors_isNavigationMode; });
|
||
__webpack_require__.d(selectors_namespaceObject, "didAutomaticChange", function() { return selectors_didAutomaticChange; });
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","blocks"]}
|
||
var external_this_wp_blocks_ = __webpack_require__(9);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","richText"]}
|
||
var external_this_wp_richText_ = __webpack_require__(22);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","viewport"]}
|
||
var external_this_wp_viewport_ = __webpack_require__(43);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread.js
|
||
var objectSpread = __webpack_require__(7);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
|
||
var esm_extends = __webpack_require__(18);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","element"]}
|
||
var external_this_wp_element_ = __webpack_require__(0);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/classnames/index.js
|
||
var classnames = __webpack_require__(16);
|
||
var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
|
||
|
||
// EXTERNAL MODULE: external "lodash"
|
||
var external_lodash_ = __webpack_require__(2);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","compose"]}
|
||
var external_this_wp_compose_ = __webpack_require__(8);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","hooks"]}
|
||
var external_this_wp_hooks_ = __webpack_require__(27);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","data"]}
|
||
var external_this_wp_data_ = __webpack_require__(4);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/tinycolor2/tinycolor.js
|
||
var tinycolor = __webpack_require__(49);
|
||
var tinycolor_default = /*#__PURE__*/__webpack_require__.n(tinycolor);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/utils.js
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Provided an array of color objects as set by the theme or by the editor defaults,
|
||
* and the values of the defined color or custom color returns a color object describing the color.
|
||
*
|
||
* @param {Array} colors Array of color objects as set by the theme or by the editor defaults.
|
||
* @param {?string} definedColor A string containing the color slug.
|
||
* @param {?string} customColor A string containing the customColor value.
|
||
*
|
||
* @return {?Object} If definedColor is passed and the name is found in colors,
|
||
* the color object exactly as set by the theme or editor defaults is returned.
|
||
* Otherwise, an object that just sets the color is defined.
|
||
*/
|
||
|
||
var utils_getColorObjectByAttributeValues = function getColorObjectByAttributeValues(colors, definedColor, customColor) {
|
||
if (definedColor) {
|
||
var colorObj = Object(external_lodash_["find"])(colors, {
|
||
slug: definedColor
|
||
});
|
||
|
||
if (colorObj) {
|
||
return colorObj;
|
||
}
|
||
}
|
||
|
||
return {
|
||
color: customColor
|
||
};
|
||
};
|
||
/**
|
||
* Provided an array of color objects as set by the theme or by the editor defaults, and a color value returns the color object matching that value or undefined.
|
||
*
|
||
* @param {Array} colors Array of color objects as set by the theme or by the editor defaults.
|
||
* @param {?string} colorValue A string containing the color value.
|
||
*
|
||
* @return {?Object} Color object included in the colors array whose color property equals colorValue.
|
||
* Returns undefined if no color object matches this requirement.
|
||
*/
|
||
|
||
var utils_getColorObjectByColorValue = function getColorObjectByColorValue(colors, colorValue) {
|
||
return Object(external_lodash_["find"])(colors, {
|
||
color: colorValue
|
||
});
|
||
};
|
||
/**
|
||
* Returns a class based on the context a color is being used and its slug.
|
||
*
|
||
* @param {string} colorContextName Context/place where color is being used e.g: background, text etc...
|
||
* @param {string} colorSlug Slug of the color.
|
||
*
|
||
* @return {?string} String with the class corresponding to the color in the provided context.
|
||
* Returns undefined if either colorContextName or colorSlug are not provided.
|
||
*/
|
||
|
||
function getColorClassName(colorContextName, colorSlug) {
|
||
if (!colorContextName || !colorSlug) {
|
||
return undefined;
|
||
}
|
||
|
||
return "has-".concat(Object(external_lodash_["kebabCase"])(colorSlug), "-").concat(colorContextName);
|
||
}
|
||
/**
|
||
* Given an array of color objects and a color value returns the color value of the most readable color in the array.
|
||
*
|
||
* @param {Array} colors Array of color objects as set by the theme or by the editor defaults.
|
||
* @param {?string} colorValue A string containing the color value.
|
||
*
|
||
* @return {string} String with the color value of the most readable color.
|
||
*/
|
||
|
||
function utils_getMostReadableColor(colors, colorValue) {
|
||
return tinycolor_default.a.mostReadable(colorValue, Object(external_lodash_["map"])(colors, 'color')).toHexString();
|
||
}
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js
|
||
var classCallCheck = __webpack_require__(12);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js
|
||
var createClass = __webpack_require__(11);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js
|
||
var possibleConstructorReturn = __webpack_require__(13);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js
|
||
var getPrototypeOf = __webpack_require__(14);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js
|
||
var assertThisInitialized = __webpack_require__(5);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inherits.js + 1 modules
|
||
var inherits = __webpack_require__(15);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
|
||
var defineProperty = __webpack_require__(10);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/with-colors.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
var DEFAULT_COLORS = [];
|
||
/**
|
||
* Higher order component factory for injecting the `colorsArray` argument as
|
||
* the colors prop in the `withCustomColors` HOC.
|
||
*
|
||
* @param {Array} colorsArray An array of color objects.
|
||
*
|
||
* @return {Function} The higher order component.
|
||
*/
|
||
|
||
var with_colors_withCustomColorPalette = function withCustomColorPalette(colorsArray) {
|
||
return Object(external_this_wp_compose_["createHigherOrderComponent"])(function (WrappedComponent) {
|
||
return function (props) {
|
||
return Object(external_this_wp_element_["createElement"])(WrappedComponent, Object(esm_extends["a" /* default */])({}, props, {
|
||
colors: colorsArray
|
||
}));
|
||
};
|
||
}, 'withCustomColorPalette');
|
||
};
|
||
/**
|
||
* Higher order component factory for injecting the editor colors as the
|
||
* `colors` prop in the `withColors` HOC.
|
||
*
|
||
* @return {Function} The higher order component.
|
||
*/
|
||
|
||
|
||
var with_colors_withEditorColorPalette = function withEditorColorPalette() {
|
||
return Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var settings = select('core/block-editor').getSettings();
|
||
return {
|
||
colors: Object(external_lodash_["get"])(settings, ['colors'], DEFAULT_COLORS)
|
||
};
|
||
});
|
||
};
|
||
/**
|
||
* Helper function used with `createHigherOrderComponent` to create
|
||
* higher order components for managing color logic.
|
||
*
|
||
* @param {Array} colorTypes An array of color types (e.g. 'backgroundColor, borderColor).
|
||
* @param {Function} withColorPalette A HOC for injecting the 'colors' prop into the WrappedComponent.
|
||
*
|
||
* @return {Component} The component that can be used as a HOC.
|
||
*/
|
||
|
||
|
||
function createColorHOC(colorTypes, withColorPalette) {
|
||
var colorMap = Object(external_lodash_["reduce"])(colorTypes, function (colorObject, colorType) {
|
||
return Object(objectSpread["a" /* default */])({}, colorObject, Object(external_lodash_["isString"])(colorType) ? Object(defineProperty["a" /* default */])({}, colorType, Object(external_lodash_["kebabCase"])(colorType)) : colorType);
|
||
}, {});
|
||
return Object(external_this_wp_compose_["compose"])([withColorPalette, function (WrappedComponent) {
|
||
return (
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(_class, _Component);
|
||
|
||
function _class(props) {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, _class);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(_class).call(this, props));
|
||
_this.setters = _this.createSetters();
|
||
_this.colorUtils = {
|
||
getMostReadableColor: _this.getMostReadableColor.bind(Object(assertThisInitialized["a" /* default */])(_this))
|
||
};
|
||
_this.state = {};
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(_class, [{
|
||
key: "getMostReadableColor",
|
||
value: function getMostReadableColor(colorValue) {
|
||
var colors = this.props.colors;
|
||
return utils_getMostReadableColor(colors, colorValue);
|
||
}
|
||
}, {
|
||
key: "createSetters",
|
||
value: function createSetters() {
|
||
var _this2 = this;
|
||
|
||
return Object(external_lodash_["reduce"])(colorMap, function (settersAccumulator, colorContext, colorAttributeName) {
|
||
var upperFirstColorAttributeName = Object(external_lodash_["upperFirst"])(colorAttributeName);
|
||
var customColorAttributeName = "custom".concat(upperFirstColorAttributeName);
|
||
settersAccumulator["set".concat(upperFirstColorAttributeName)] = _this2.createSetColor(colorAttributeName, customColorAttributeName);
|
||
return settersAccumulator;
|
||
}, {});
|
||
}
|
||
}, {
|
||
key: "createSetColor",
|
||
value: function createSetColor(colorAttributeName, customColorAttributeName) {
|
||
var _this3 = this;
|
||
|
||
return function (colorValue) {
|
||
var _this3$props$setAttri;
|
||
|
||
var colorObject = utils_getColorObjectByColorValue(_this3.props.colors, colorValue);
|
||
|
||
_this3.props.setAttributes((_this3$props$setAttri = {}, Object(defineProperty["a" /* default */])(_this3$props$setAttri, colorAttributeName, colorObject && colorObject.slug ? colorObject.slug : undefined), Object(defineProperty["a" /* default */])(_this3$props$setAttri, customColorAttributeName, colorObject && colorObject.slug ? undefined : colorValue), _this3$props$setAttri));
|
||
};
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
return Object(external_this_wp_element_["createElement"])(WrappedComponent, Object(objectSpread["a" /* default */])({}, this.props, {
|
||
colors: undefined
|
||
}, this.state, this.setters, {
|
||
colorUtils: this.colorUtils
|
||
}));
|
||
}
|
||
}], [{
|
||
key: "getDerivedStateFromProps",
|
||
value: function getDerivedStateFromProps(_ref2, previousState) {
|
||
var attributes = _ref2.attributes,
|
||
colors = _ref2.colors;
|
||
return Object(external_lodash_["reduce"])(colorMap, function (newState, colorContext, colorAttributeName) {
|
||
var colorObject = utils_getColorObjectByAttributeValues(colors, attributes[colorAttributeName], attributes["custom".concat(Object(external_lodash_["upperFirst"])(colorAttributeName))]);
|
||
var previousColorObject = previousState[colorAttributeName];
|
||
var previousColor = Object(external_lodash_["get"])(previousColorObject, ['color']);
|
||
/**
|
||
* The "and previousColorObject" condition checks that a previous color object was already computed.
|
||
* At the start previousColorObject and colorValue are both equal to undefined
|
||
* bus as previousColorObject does not exist we should compute the object.
|
||
*/
|
||
|
||
if (previousColor === colorObject.color && previousColorObject) {
|
||
newState[colorAttributeName] = previousColorObject;
|
||
} else {
|
||
newState[colorAttributeName] = Object(objectSpread["a" /* default */])({}, colorObject, {
|
||
class: getColorClassName(colorContext, colorObject.slug)
|
||
});
|
||
}
|
||
|
||
return newState;
|
||
}, {});
|
||
}
|
||
}]);
|
||
|
||
return _class;
|
||
}(external_this_wp_element_["Component"])
|
||
);
|
||
}]);
|
||
}
|
||
/**
|
||
* A higher-order component factory for creating a 'withCustomColors' HOC, which handles color logic
|
||
* for class generation color value, retrieval and color attribute setting.
|
||
*
|
||
* Use this higher-order component to work with a custom set of colors.
|
||
*
|
||
* @example
|
||
*
|
||
* ```jsx
|
||
* const CUSTOM_COLORS = [ { name: 'Red', slug: 'red', color: '#ff0000' }, { name: 'Blue', slug: 'blue', color: '#0000ff' } ];
|
||
* const withCustomColors = createCustomColorsHOC( CUSTOM_COLORS );
|
||
* // ...
|
||
* export default compose(
|
||
* withCustomColors( 'backgroundColor', 'borderColor' ),
|
||
* MyColorfulComponent,
|
||
* );
|
||
* ```
|
||
*
|
||
* @param {Array} colorsArray The array of color objects (name, slug, color, etc... ).
|
||
*
|
||
* @return {Function} Higher-order component.
|
||
*/
|
||
|
||
|
||
function createCustomColorsHOC(colorsArray) {
|
||
return function () {
|
||
var withColorPalette = with_colors_withCustomColorPalette(colorsArray);
|
||
|
||
for (var _len = arguments.length, colorTypes = new Array(_len), _key = 0; _key < _len; _key++) {
|
||
colorTypes[_key] = arguments[_key];
|
||
}
|
||
|
||
return Object(external_this_wp_compose_["createHigherOrderComponent"])(createColorHOC(colorTypes, withColorPalette), 'withCustomColors');
|
||
};
|
||
}
|
||
/**
|
||
* A higher-order component, which handles color logic for class generation color value, retrieval and color attribute setting.
|
||
*
|
||
* For use with the default editor/theme color palette.
|
||
*
|
||
* @example
|
||
*
|
||
* ```jsx
|
||
* export default compose(
|
||
* withColors( 'backgroundColor', { textColor: 'color' } ),
|
||
* MyColorfulComponent,
|
||
* );
|
||
* ```
|
||
*
|
||
* @param {...(Object|string)} colorTypes The arguments can be strings or objects. If the argument is an object,
|
||
* it should contain the color attribute name as key and the color context as value.
|
||
* If the argument is a string the value should be the color attribute name,
|
||
* the color context is computed by applying a kebab case transform to the value.
|
||
* Color context represents the context/place where the color is going to be used.
|
||
* The class name of the color is generated using 'has' followed by the color name
|
||
* and ending with the color context all in kebab case e.g: has-green-background-color.
|
||
*
|
||
* @return {Function} Higher-order component.
|
||
*/
|
||
|
||
function withColors() {
|
||
var withColorPalette = with_colors_withEditorColorPalette();
|
||
|
||
for (var _len2 = arguments.length, colorTypes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
||
colorTypes[_key2] = arguments[_key2];
|
||
}
|
||
|
||
return Object(external_this_wp_compose_["createHigherOrderComponent"])(createColorHOC(colorTypes, withColorPalette), 'withColors');
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/index.js
|
||
|
||
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/utils.js
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* Returns the font size object based on an array of named font sizes and the namedFontSize and customFontSize values.
|
||
* If namedFontSize is undefined or not found in fontSizes an object with just the size value based on customFontSize is returned.
|
||
*
|
||
* @param {Array} fontSizes Array of font size objects containing at least the "name" and "size" values as properties.
|
||
* @param {?string} fontSizeAttribute Content of the font size attribute (slug).
|
||
* @param {?number} customFontSizeAttribute Contents of the custom font size attribute (value).
|
||
*
|
||
* @return {?string} If fontSizeAttribute is set and an equal slug is found in fontSizes it returns the font size object for that slug.
|
||
* Otherwise, an object with just the size value based on customFontSize is returned.
|
||
*/
|
||
|
||
var utils_getFontSize = function getFontSize(fontSizes, fontSizeAttribute, customFontSizeAttribute) {
|
||
if (fontSizeAttribute) {
|
||
var fontSizeObject = Object(external_lodash_["find"])(fontSizes, {
|
||
slug: fontSizeAttribute
|
||
});
|
||
|
||
if (fontSizeObject) {
|
||
return fontSizeObject;
|
||
}
|
||
}
|
||
|
||
return {
|
||
size: customFontSizeAttribute
|
||
};
|
||
};
|
||
/**
|
||
* Returns a class based on fontSizeName.
|
||
*
|
||
* @param {string} fontSizeSlug Slug of the fontSize.
|
||
*
|
||
* @return {string} String with the class corresponding to the fontSize passed.
|
||
* The class is generated by appending 'has-' followed by fontSizeSlug in kebabCase and ending with '-font-size'.
|
||
*/
|
||
|
||
function getFontSizeClass(fontSizeSlug) {
|
||
if (!fontSizeSlug) {
|
||
return;
|
||
}
|
||
|
||
return "has-".concat(Object(external_lodash_["kebabCase"])(fontSizeSlug), "-font-size");
|
||
}
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","components"]}
|
||
var external_this_wp_components_ = __webpack_require__(3);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/font-size-picker.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var font_size_picker = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select$getSettings = select('core/block-editor').getSettings(),
|
||
disableCustomFontSizes = _select$getSettings.disableCustomFontSizes,
|
||
fontSizes = _select$getSettings.fontSizes;
|
||
|
||
return {
|
||
disableCustomFontSizes: disableCustomFontSizes,
|
||
fontSizes: fontSizes
|
||
};
|
||
})(external_this_wp_components_["FontSizePicker"]));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/with-font-sizes.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Higher-order component, which handles font size logic for class generation,
|
||
* font size value retrieval, and font size change handling.
|
||
*
|
||
* @param {...(Object|string)} fontSizeNames The arguments should all be strings.
|
||
* Each string contains the font size
|
||
* attribute name e.g: 'fontSize'.
|
||
*
|
||
* @return {Function} Higher-order component.
|
||
*/
|
||
|
||
/* harmony default export */ var with_font_sizes = (function () {
|
||
for (var _len = arguments.length, fontSizeNames = new Array(_len), _key = 0; _key < _len; _key++) {
|
||
fontSizeNames[_key] = arguments[_key];
|
||
}
|
||
|
||
/*
|
||
* Computes an object whose key is the font size attribute name as passed in the array,
|
||
* and the value is the custom font size attribute name.
|
||
* Custom font size is automatically compted by appending custom followed by the font size attribute name in with the first letter capitalized.
|
||
*/
|
||
var fontSizeAttributeNames = Object(external_lodash_["reduce"])(fontSizeNames, function (fontSizeAttributeNamesAccumulator, fontSizeAttributeName) {
|
||
fontSizeAttributeNamesAccumulator[fontSizeAttributeName] = "custom".concat(Object(external_lodash_["upperFirst"])(fontSizeAttributeName));
|
||
return fontSizeAttributeNamesAccumulator;
|
||
}, {});
|
||
return Object(external_this_wp_compose_["createHigherOrderComponent"])(Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select$getSettings = select('core/block-editor').getSettings(),
|
||
fontSizes = _select$getSettings.fontSizes;
|
||
|
||
return {
|
||
fontSizes: fontSizes
|
||
};
|
||
}), function (WrappedComponent) {
|
||
return (
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(_class, _Component);
|
||
|
||
function _class(props) {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, _class);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(_class).call(this, props));
|
||
_this.setters = _this.createSetters();
|
||
_this.state = {};
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(_class, [{
|
||
key: "createSetters",
|
||
value: function createSetters() {
|
||
var _this2 = this;
|
||
|
||
return Object(external_lodash_["reduce"])(fontSizeAttributeNames, function (settersAccumulator, customFontSizeAttributeName, fontSizeAttributeName) {
|
||
var upperFirstFontSizeAttributeName = Object(external_lodash_["upperFirst"])(fontSizeAttributeName);
|
||
settersAccumulator["set".concat(upperFirstFontSizeAttributeName)] = _this2.createSetFontSize(fontSizeAttributeName, customFontSizeAttributeName);
|
||
return settersAccumulator;
|
||
}, {});
|
||
}
|
||
}, {
|
||
key: "createSetFontSize",
|
||
value: function createSetFontSize(fontSizeAttributeName, customFontSizeAttributeName) {
|
||
var _this3 = this;
|
||
|
||
return function (fontSizeValue) {
|
||
var _this3$props$setAttri;
|
||
|
||
var fontSizeObject = Object(external_lodash_["find"])(_this3.props.fontSizes, {
|
||
size: Number(fontSizeValue)
|
||
});
|
||
|
||
_this3.props.setAttributes((_this3$props$setAttri = {}, Object(defineProperty["a" /* default */])(_this3$props$setAttri, fontSizeAttributeName, fontSizeObject && fontSizeObject.slug ? fontSizeObject.slug : undefined), Object(defineProperty["a" /* default */])(_this3$props$setAttri, customFontSizeAttributeName, fontSizeObject && fontSizeObject.slug ? undefined : fontSizeValue), _this3$props$setAttri));
|
||
};
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
return Object(external_this_wp_element_["createElement"])(WrappedComponent, Object(objectSpread["a" /* default */])({}, this.props, {
|
||
fontSizes: undefined
|
||
}, this.state, this.setters));
|
||
}
|
||
}], [{
|
||
key: "getDerivedStateFromProps",
|
||
value: function getDerivedStateFromProps(_ref, previousState) {
|
||
var attributes = _ref.attributes,
|
||
fontSizes = _ref.fontSizes;
|
||
|
||
var didAttributesChange = function didAttributesChange(customFontSizeAttributeName, fontSizeAttributeName) {
|
||
if (previousState[fontSizeAttributeName]) {
|
||
// if new font size is name compare with the previous slug
|
||
if (attributes[fontSizeAttributeName]) {
|
||
return attributes[fontSizeAttributeName] !== previousState[fontSizeAttributeName].slug;
|
||
} // if font size is not named, update when the font size value changes.
|
||
|
||
|
||
return previousState[fontSizeAttributeName].size !== attributes[customFontSizeAttributeName];
|
||
} // in this case we need to build the font size object
|
||
|
||
|
||
return true;
|
||
};
|
||
|
||
if (!Object(external_lodash_["some"])(fontSizeAttributeNames, didAttributesChange)) {
|
||
return null;
|
||
}
|
||
|
||
var newState = Object(external_lodash_["reduce"])(Object(external_lodash_["pickBy"])(fontSizeAttributeNames, didAttributesChange), function (newStateAccumulator, customFontSizeAttributeName, fontSizeAttributeName) {
|
||
var fontSizeAttributeValue = attributes[fontSizeAttributeName];
|
||
var fontSizeObject = utils_getFontSize(fontSizes, fontSizeAttributeValue, attributes[customFontSizeAttributeName]);
|
||
newStateAccumulator[fontSizeAttributeName] = Object(objectSpread["a" /* default */])({}, fontSizeObject, {
|
||
class: getFontSizeClass(fontSizeAttributeValue)
|
||
});
|
||
return newStateAccumulator;
|
||
}, {});
|
||
return Object(objectSpread["a" /* default */])({}, previousState, newState);
|
||
}
|
||
}]);
|
||
|
||
return _class;
|
||
}(external_this_wp_element_["Component"])
|
||
);
|
||
}]), 'withFontSizes');
|
||
});
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/index.js
|
||
|
||
|
||
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","i18n"]}
|
||
var external_this_wp_i18n_ = __webpack_require__(1);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/alignment-toolbar/index.js
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
var DEFAULT_ALIGNMENT_CONTROLS = [{
|
||
icon: 'editor-alignleft',
|
||
title: Object(external_this_wp_i18n_["__"])('Align Text Left'),
|
||
align: 'left'
|
||
}, {
|
||
icon: 'editor-aligncenter',
|
||
title: Object(external_this_wp_i18n_["__"])('Align Text Center'),
|
||
align: 'center'
|
||
}, {
|
||
icon: 'editor-alignright',
|
||
title: Object(external_this_wp_i18n_["__"])('Align Text Right'),
|
||
align: 'right'
|
||
}];
|
||
function AlignmentToolbar(props) {
|
||
var value = props.value,
|
||
onChange = props.onChange,
|
||
_props$alignmentContr = props.alignmentControls,
|
||
alignmentControls = _props$alignmentContr === void 0 ? DEFAULT_ALIGNMENT_CONTROLS : _props$alignmentContr,
|
||
_props$label = props.label,
|
||
label = _props$label === void 0 ? Object(external_this_wp_i18n_["__"])('Change text alignment') : _props$label,
|
||
_props$isCollapsed = props.isCollapsed,
|
||
isCollapsed = _props$isCollapsed === void 0 ? true : _props$isCollapsed;
|
||
|
||
function applyOrUnset(align) {
|
||
return function () {
|
||
return onChange(value === align ? undefined : align);
|
||
};
|
||
}
|
||
|
||
var activeAlignment = Object(external_lodash_["find"])(alignmentControls, function (control) {
|
||
return control.align === value;
|
||
});
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], {
|
||
isCollapsed: isCollapsed,
|
||
icon: activeAlignment ? activeAlignment.icon : 'editor-alignleft',
|
||
label: label,
|
||
controls: alignmentControls.map(function (control) {
|
||
var align = control.align;
|
||
var isActive = value === align;
|
||
return Object(objectSpread["a" /* default */])({}, control, {
|
||
isActive: isActive,
|
||
onClick: applyOrUnset(align)
|
||
});
|
||
})
|
||
});
|
||
}
|
||
/* harmony default export */ var alignment_toolbar = (AlignmentToolbar);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/context.js
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
var _createContext = Object(external_this_wp_element_["createContext"])({
|
||
name: '',
|
||
isSelected: false,
|
||
focusedElement: null,
|
||
setFocusedElement: external_lodash_["noop"],
|
||
clientId: null
|
||
}),
|
||
Consumer = _createContext.Consumer,
|
||
Provider = _createContext.Provider;
|
||
|
||
|
||
/**
|
||
* A Higher Order Component used to inject BlockEdit context to the
|
||
* wrapped component.
|
||
*
|
||
* @param {Function} mapContextToProps Function called on every context change,
|
||
* expected to return object of props to
|
||
* merge with the component's own props.
|
||
*
|
||
* @return {Component} Enhanced component with injected context as props.
|
||
*/
|
||
|
||
var context_withBlockEditContext = function withBlockEditContext(mapContextToProps) {
|
||
return Object(external_this_wp_compose_["createHigherOrderComponent"])(function (OriginalComponent) {
|
||
return function (props) {
|
||
return Object(external_this_wp_element_["createElement"])(Consumer, null, function (context) {
|
||
return Object(external_this_wp_element_["createElement"])(OriginalComponent, Object(esm_extends["a" /* default */])({}, props, mapContextToProps(context, props)));
|
||
});
|
||
};
|
||
}, 'withBlockEditContext');
|
||
};
|
||
/**
|
||
* A Higher Order Component used to render conditionally the wrapped
|
||
* component only when the BlockEdit has selected state set.
|
||
*
|
||
* @param {Component} OriginalComponent Component to wrap.
|
||
*
|
||
* @return {Component} Component which renders only when the BlockEdit is selected.
|
||
*/
|
||
|
||
var ifBlockEditSelected = Object(external_this_wp_compose_["createHigherOrderComponent"])(function (OriginalComponent) {
|
||
return function (props) {
|
||
return Object(external_this_wp_element_["createElement"])(Consumer, null, function (_ref) {
|
||
var isSelected = _ref.isSelected;
|
||
return isSelected && Object(external_this_wp_element_["createElement"])(OriginalComponent, props);
|
||
});
|
||
};
|
||
}, 'ifBlockEditSelected');
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/autocomplete/index.js
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Wrap the default Autocomplete component with one that
|
||
* supports a filter hook for customizing its list of autocompleters.
|
||
*
|
||
* This function is exported for unit test.
|
||
*
|
||
* @param {Function} Autocomplete Original component.
|
||
* @return {Function} Wrapped component
|
||
*/
|
||
|
||
function withFilteredAutocompleters(Autocomplete) {
|
||
return function (props) {
|
||
var _props$completers = props.completers,
|
||
completers = _props$completers === void 0 ? [] : _props$completers;
|
||
|
||
if (Object(external_this_wp_hooks_["hasFilter"])('editor.Autocomplete.completers')) {
|
||
completers = Object(external_this_wp_hooks_["applyFilters"])('editor.Autocomplete.completers', // Provide copies so filters may directly modify them.
|
||
completers.map(external_lodash_["clone"]), props.blockName);
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(Autocomplete, Object(esm_extends["a" /* default */])({}, props, {
|
||
completers: completers
|
||
}));
|
||
};
|
||
}
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/autocomplete/README.md
|
||
*/
|
||
|
||
/* harmony default export */ var autocomplete = (Object(external_this_wp_compose_["compose"])([context_withBlockEditContext(function (_ref) {
|
||
var name = _ref.name;
|
||
return {
|
||
blockName: name
|
||
};
|
||
}), withFilteredAutocompleters])(external_this_wp_components_["Autocomplete"]));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-toolbar/index.js
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
var BLOCK_ALIGNMENTS_CONTROLS = {
|
||
left: {
|
||
icon: 'align-left',
|
||
title: Object(external_this_wp_i18n_["__"])('Align Left')
|
||
},
|
||
center: {
|
||
icon: 'align-center',
|
||
title: Object(external_this_wp_i18n_["__"])('Align Center')
|
||
},
|
||
right: {
|
||
icon: 'align-right',
|
||
title: Object(external_this_wp_i18n_["__"])('Align Right')
|
||
},
|
||
wide: {
|
||
icon: 'align-wide',
|
||
title: Object(external_this_wp_i18n_["__"])('Wide Width')
|
||
},
|
||
full: {
|
||
icon: 'align-full-width',
|
||
title: Object(external_this_wp_i18n_["__"])('Full Width')
|
||
}
|
||
};
|
||
var DEFAULT_CONTROLS = ['left', 'center', 'right', 'wide', 'full'];
|
||
var DEFAULT_CONTROL = 'center';
|
||
var WIDE_CONTROLS = ['wide', 'full'];
|
||
function BlockAlignmentToolbar(_ref) {
|
||
var value = _ref.value,
|
||
onChange = _ref.onChange,
|
||
_ref$controls = _ref.controls,
|
||
controls = _ref$controls === void 0 ? DEFAULT_CONTROLS : _ref$controls,
|
||
_ref$isCollapsed = _ref.isCollapsed,
|
||
isCollapsed = _ref$isCollapsed === void 0 ? true : _ref$isCollapsed,
|
||
_ref$wideControlsEnab = _ref.wideControlsEnabled,
|
||
wideControlsEnabled = _ref$wideControlsEnab === void 0 ? false : _ref$wideControlsEnab;
|
||
|
||
function applyOrUnset(align) {
|
||
return function () {
|
||
return onChange(value === align ? undefined : align);
|
||
};
|
||
}
|
||
|
||
var enabledControls = wideControlsEnabled ? controls : controls.filter(function (control) {
|
||
return WIDE_CONTROLS.indexOf(control) === -1;
|
||
});
|
||
var activeAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[value];
|
||
var defaultAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[DEFAULT_CONTROL];
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], {
|
||
isCollapsed: isCollapsed,
|
||
icon: activeAlignmentControl ? activeAlignmentControl.icon : defaultAlignmentControl.icon,
|
||
label: Object(external_this_wp_i18n_["__"])('Change alignment'),
|
||
controls: enabledControls.map(function (control) {
|
||
return Object(objectSpread["a" /* default */])({}, BLOCK_ALIGNMENTS_CONTROLS[control], {
|
||
isActive: value === control,
|
||
onClick: applyOrUnset(control)
|
||
});
|
||
})
|
||
});
|
||
}
|
||
/* harmony default export */ var block_alignment_toolbar = (Object(external_this_wp_compose_["compose"])(context_withBlockEditContext(function (_ref2) {
|
||
var clientId = _ref2.clientId;
|
||
return {
|
||
clientId: clientId
|
||
};
|
||
}), Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSettings = _select.getSettings;
|
||
|
||
var settings = getSettings();
|
||
return {
|
||
wideControlsEnabled: settings.alignWide
|
||
};
|
||
}))(BlockAlignmentToolbar));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-controls/index.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var _createSlotFill = Object(external_this_wp_components_["createSlotFill"])('BlockControls'),
|
||
Fill = _createSlotFill.Fill,
|
||
Slot = _createSlotFill.Slot;
|
||
|
||
var block_controls_BlockControlsFill = function BlockControlsFill(_ref) {
|
||
var controls = _ref.controls,
|
||
children = _ref.children;
|
||
return Object(external_this_wp_element_["createElement"])(Fill, null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], {
|
||
controls: controls
|
||
}), children);
|
||
};
|
||
|
||
var BlockControls = ifBlockEditSelected(block_controls_BlockControlsFill);
|
||
BlockControls.Slot = Slot;
|
||
/* harmony default export */ var block_controls = (BlockControls);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/memize/index.js
|
||
var memize = __webpack_require__(45);
|
||
var memize_default = /*#__PURE__*/__webpack_require__.n(memize);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/edit.js
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
var edit_Edit = function Edit(props) {
|
||
var _props$attributes = props.attributes,
|
||
attributes = _props$attributes === void 0 ? {} : _props$attributes,
|
||
name = props.name;
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(name);
|
||
|
||
if (!blockType) {
|
||
return null;
|
||
} // Generate a class name for the block's editable form
|
||
|
||
|
||
var generatedClassName = Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'className', true) ? Object(external_this_wp_blocks_["getBlockDefaultClassName"])(name) : null;
|
||
var className = classnames_default()(generatedClassName, attributes.className); // `edit` and `save` are functions or components describing the markup
|
||
// with which a block is displayed. If `blockType` is valid, assign
|
||
// them preferentially as the render value for the block.
|
||
|
||
var Component = blockType.edit || blockType.save;
|
||
return Object(external_this_wp_element_["createElement"])(Component, Object(esm_extends["a" /* default */])({}, props, {
|
||
className: className
|
||
}));
|
||
};
|
||
/* harmony default export */ var edit = (Object(external_this_wp_components_["withFilters"])('editor.BlockEdit')(edit_Edit));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
var block_edit_BlockEdit =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockEdit, _Component);
|
||
|
||
function BlockEdit() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockEdit);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockEdit).apply(this, arguments)); // It is important to return the same object if props haven't changed
|
||
// to avoid unnecessary rerenders.
|
||
// See https://reactjs.org/docs/context.html#caveats.
|
||
|
||
_this.propsToContext = memize_default()(_this.propsToContext.bind(Object(assertThisInitialized["a" /* default */])(_this)), {
|
||
maxSize: 1
|
||
});
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockEdit, [{
|
||
key: "propsToContext",
|
||
value: function propsToContext(name, isSelected, clientId, onFocus, onCaretVerticalPositionChange) {
|
||
return {
|
||
name: name,
|
||
isSelected: isSelected,
|
||
clientId: clientId,
|
||
onFocus: onFocus,
|
||
onCaretVerticalPositionChange: onCaretVerticalPositionChange
|
||
};
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props = this.props,
|
||
name = _this$props.name,
|
||
isSelected = _this$props.isSelected,
|
||
clientId = _this$props.clientId,
|
||
onFocus = _this$props.onFocus,
|
||
onCaretVerticalPositionChange = _this$props.onCaretVerticalPositionChange;
|
||
var value = this.propsToContext(name, isSelected, clientId, onFocus, onCaretVerticalPositionChange);
|
||
return Object(external_this_wp_element_["createElement"])(Provider, {
|
||
value: value
|
||
}, Object(external_this_wp_element_["createElement"])(edit, this.props));
|
||
}
|
||
}]);
|
||
|
||
return BlockEdit;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var block_edit = (block_edit_BlockEdit);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-format-controls/index.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var block_format_controls_createSlotFill = Object(external_this_wp_components_["createSlotFill"])('BlockFormatControls'),
|
||
block_format_controls_Fill = block_format_controls_createSlotFill.Fill,
|
||
block_format_controls_Slot = block_format_controls_createSlotFill.Slot;
|
||
|
||
var BlockFormatControls = ifBlockEditSelected(block_format_controls_Fill);
|
||
BlockFormatControls.Slot = block_format_controls_Slot;
|
||
/* harmony default export */ var block_format_controls = (BlockFormatControls);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-icon/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
function BlockIcon(_ref) {
|
||
var icon = _ref.icon,
|
||
_ref$showColors = _ref.showColors,
|
||
showColors = _ref$showColors === void 0 ? false : _ref$showColors,
|
||
className = _ref.className;
|
||
|
||
if (Object(external_lodash_["get"])(icon, ['src']) === 'block-default') {
|
||
icon = {
|
||
src: Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
viewBox: "0 0 24 24"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M19 7h-1V5h-4v2h-4V5H6v2H5c-1.1 0-2 .9-2 2v10h18V9c0-1.1-.9-2-2-2zm0 10H5V9h14v8z"
|
||
}))
|
||
};
|
||
}
|
||
|
||
var renderedIcon = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Icon"], {
|
||
icon: icon && icon.src ? icon.src : icon
|
||
});
|
||
var style = showColors ? {
|
||
backgroundColor: icon && icon.background,
|
||
color: icon && icon.foreground
|
||
} : {};
|
||
return Object(external_this_wp_element_["createElement"])("span", {
|
||
style: style,
|
||
className: classnames_default()('editor-block-icon block-editor-block-icon', className, {
|
||
'has-colors': showColors
|
||
})
|
||
}, renderedIcon);
|
||
}
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","keycodes"]}
|
||
var external_this_wp_keycodes_ = __webpack_require__(19);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-navigation/list.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
function BlockNavigationList(_ref) {
|
||
var blocks = _ref.blocks,
|
||
selectedBlockClientId = _ref.selectedBlockClientId,
|
||
selectBlock = _ref.selectBlock,
|
||
showNestedBlocks = _ref.showNestedBlocks;
|
||
return (
|
||
/*
|
||
* Disable reason: The `list` ARIA role is redundant but
|
||
* Safari+VoiceOver won't announce the list otherwise.
|
||
*/
|
||
|
||
/* eslint-disable jsx-a11y/no-redundant-roles */
|
||
Object(external_this_wp_element_["createElement"])("ul", {
|
||
className: "editor-block-navigation__list block-editor-block-navigation__list",
|
||
role: "list"
|
||
}, Object(external_lodash_["map"])(blocks, function (block) {
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(block.name);
|
||
var isSelected = block.clientId === selectedBlockClientId;
|
||
return Object(external_this_wp_element_["createElement"])("li", {
|
||
key: block.clientId
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-navigation__item block-editor-block-navigation__item"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
className: classnames_default()('editor-block-navigation__item-button block-editor-block-navigation__item-button', {
|
||
'is-selected': isSelected
|
||
}),
|
||
onClick: function onClick() {
|
||
return selectBlock(block.clientId);
|
||
}
|
||
}, Object(external_this_wp_element_["createElement"])(BlockIcon, {
|
||
icon: blockType.icon,
|
||
showColors: true
|
||
}), blockType.title, isSelected && Object(external_this_wp_element_["createElement"])("span", {
|
||
className: "screen-reader-text"
|
||
}, Object(external_this_wp_i18n_["__"])('(selected block)')))), showNestedBlocks && !!block.innerBlocks && !!block.innerBlocks.length && Object(external_this_wp_element_["createElement"])(BlockNavigationList, {
|
||
blocks: block.innerBlocks,
|
||
selectedBlockClientId: selectedBlockClientId,
|
||
selectBlock: selectBlock,
|
||
showNestedBlocks: true
|
||
}));
|
||
}))
|
||
/* eslint-enable jsx-a11y/no-redundant-roles */
|
||
|
||
);
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-navigation/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
function BlockNavigation(_ref) {
|
||
var rootBlock = _ref.rootBlock,
|
||
rootBlocks = _ref.rootBlocks,
|
||
selectedBlockClientId = _ref.selectedBlockClientId,
|
||
selectBlock = _ref.selectBlock;
|
||
|
||
if (!rootBlocks || rootBlocks.length === 0) {
|
||
return null;
|
||
}
|
||
|
||
var hasHierarchy = rootBlock && (rootBlock.clientId !== selectedBlockClientId || rootBlock.innerBlocks && rootBlock.innerBlocks.length !== 0);
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["NavigableMenu"], {
|
||
role: "presentation",
|
||
className: "editor-block-navigation__container block-editor-block-navigation__container"
|
||
}, Object(external_this_wp_element_["createElement"])("p", {
|
||
className: "editor-block-navigation__label block-editor-block-navigation__label"
|
||
}, Object(external_this_wp_i18n_["__"])('Block navigation')), hasHierarchy && Object(external_this_wp_element_["createElement"])(BlockNavigationList, {
|
||
blocks: [rootBlock],
|
||
selectedBlockClientId: selectedBlockClientId,
|
||
selectBlock: selectBlock,
|
||
showNestedBlocks: true
|
||
}), !hasHierarchy && Object(external_this_wp_element_["createElement"])(BlockNavigationList, {
|
||
blocks: rootBlocks,
|
||
selectedBlockClientId: selectedBlockClientId,
|
||
selectBlock: selectBlock
|
||
}));
|
||
}
|
||
|
||
/* harmony default export */ var block_navigation = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSelectedBlockClientId = _select.getSelectedBlockClientId,
|
||
getBlockHierarchyRootClientId = _select.getBlockHierarchyRootClientId,
|
||
getBlock = _select.getBlock,
|
||
getBlocks = _select.getBlocks;
|
||
|
||
var selectedBlockClientId = getSelectedBlockClientId();
|
||
return {
|
||
rootBlocks: getBlocks(),
|
||
rootBlock: selectedBlockClientId ? getBlock(getBlockHierarchyRootClientId(selectedBlockClientId)) : null,
|
||
selectedBlockClientId: selectedBlockClientId
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref2) {
|
||
var _ref2$onSelect = _ref2.onSelect,
|
||
onSelect = _ref2$onSelect === void 0 ? external_lodash_["noop"] : _ref2$onSelect;
|
||
return {
|
||
selectBlock: function selectBlock(clientId) {
|
||
dispatch('core/block-editor').selectBlock(clientId);
|
||
onSelect(clientId);
|
||
}
|
||
};
|
||
}))(BlockNavigation));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-navigation/dropdown.js
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
var MenuIcon = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
viewBox: "0 0 24 24",
|
||
width: "20",
|
||
height: "20"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M5 5H3v2h2V5zm3 8h11v-2H8v2zm9-8H6v2h11V5zM7 11H5v2h2v-2zm0 8h2v-2H7v2zm3-2v2h11v-2H10z"
|
||
}));
|
||
|
||
function BlockNavigationDropdown(_ref) {
|
||
var hasBlocks = _ref.hasBlocks,
|
||
isDisabled = _ref.isDisabled;
|
||
var isEnabled = hasBlocks && !isDisabled;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Dropdown"], {
|
||
renderToggle: function renderToggle(_ref2) {
|
||
var isOpen = _ref2.isOpen,
|
||
onToggle = _ref2.onToggle;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, isEnabled && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["KeyboardShortcuts"], {
|
||
bindGlobal: true,
|
||
shortcuts: Object(defineProperty["a" /* default */])({}, external_this_wp_keycodes_["rawShortcut"].access('o'), onToggle)
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
icon: MenuIcon,
|
||
"aria-expanded": isOpen,
|
||
onClick: isEnabled ? onToggle : undefined,
|
||
label: Object(external_this_wp_i18n_["__"])('Block navigation'),
|
||
className: "editor-block-navigation block-editor-block-navigation",
|
||
shortcut: external_this_wp_keycodes_["displayShortcut"].access('o'),
|
||
"aria-disabled": !isEnabled
|
||
}));
|
||
},
|
||
renderContent: function renderContent(_ref4) {
|
||
var onClose = _ref4.onClose;
|
||
return Object(external_this_wp_element_["createElement"])(block_navigation, {
|
||
onSelect: onClose
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
/* harmony default export */ var dropdown = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
return {
|
||
hasBlocks: !!select('core/block-editor').getBlockCount()
|
||
};
|
||
})(BlockNavigationDropdown));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-toolbar/icons.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
var alignBottom = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
width: "20",
|
||
height: "20",
|
||
viewBox: "0 0 24 24"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
fill: "none",
|
||
d: "M0 0h24v24H0V0z"
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M16 13h-3V3h-2v10H8l4 4 4-4zM4 19v2h16v-2H4z"
|
||
}));
|
||
var alignCenter = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
width: "20",
|
||
height: "20",
|
||
viewBox: "0 0 24 24"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
fill: "none",
|
||
d: "M0 0h24v24H0V0z"
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M8 19h3v4h2v-4h3l-4-4-4 4zm8-14h-3V1h-2v4H8l4 4 4-4zM4 11v2h16v-2H4z"
|
||
}));
|
||
var alignTop = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
width: "20",
|
||
height: "20",
|
||
viewBox: "0 0 24 24"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
fill: "none",
|
||
d: "M0 0h24v24H0V0z"
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M8 11h3v10h2V11h3l-4-4-4 4zM4 3v2h16V3H4z"
|
||
}));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-toolbar/index.js
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
var block_vertical_alignment_toolbar_BLOCK_ALIGNMENTS_CONTROLS = {
|
||
top: {
|
||
icon: alignTop,
|
||
title: Object(external_this_wp_i18n_["_x"])('Vertically Align Top', 'Block vertical alignment setting')
|
||
},
|
||
center: {
|
||
icon: alignCenter,
|
||
title: Object(external_this_wp_i18n_["_x"])('Vertically Align Middle', 'Block vertical alignment setting')
|
||
},
|
||
bottom: {
|
||
icon: alignBottom,
|
||
title: Object(external_this_wp_i18n_["_x"])('Vertically Align Bottom', 'Block vertical alignment setting')
|
||
}
|
||
};
|
||
var block_vertical_alignment_toolbar_DEFAULT_CONTROLS = ['top', 'center', 'bottom'];
|
||
var block_vertical_alignment_toolbar_DEFAULT_CONTROL = 'top';
|
||
function BlockVerticalAlignmentToolbar(_ref) {
|
||
var value = _ref.value,
|
||
onChange = _ref.onChange,
|
||
_ref$controls = _ref.controls,
|
||
controls = _ref$controls === void 0 ? block_vertical_alignment_toolbar_DEFAULT_CONTROLS : _ref$controls,
|
||
_ref$isCollapsed = _ref.isCollapsed,
|
||
isCollapsed = _ref$isCollapsed === void 0 ? true : _ref$isCollapsed;
|
||
|
||
function applyOrUnset(align) {
|
||
return function () {
|
||
return onChange(value === align ? undefined : align);
|
||
};
|
||
}
|
||
|
||
var activeAlignment = block_vertical_alignment_toolbar_BLOCK_ALIGNMENTS_CONTROLS[value];
|
||
var defaultAlignmentControl = block_vertical_alignment_toolbar_BLOCK_ALIGNMENTS_CONTROLS[block_vertical_alignment_toolbar_DEFAULT_CONTROL];
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], {
|
||
isCollapsed: isCollapsed,
|
||
icon: activeAlignment ? activeAlignment.icon : defaultAlignmentControl.icon,
|
||
label: Object(external_this_wp_i18n_["_x"])('Change vertical alignment', 'Block vertical alignment setting label'),
|
||
controls: controls.map(function (control) {
|
||
return Object(objectSpread["a" /* default */])({}, block_vertical_alignment_toolbar_BLOCK_ALIGNMENTS_CONTROLS[control], {
|
||
isActive: value === control,
|
||
onClick: applyOrUnset(control)
|
||
});
|
||
})
|
||
});
|
||
}
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/block-vertical-alignment-toolbar/README.md
|
||
*/
|
||
|
||
/* harmony default export */ var block_vertical_alignment_toolbar = (BlockVerticalAlignmentToolbar);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/media-upload/check.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
function MediaUploadCheck(_ref) {
|
||
var hasUploadPermissions = _ref.hasUploadPermissions,
|
||
_ref$fallback = _ref.fallback,
|
||
fallback = _ref$fallback === void 0 ? null : _ref$fallback,
|
||
children = _ref.children;
|
||
return hasUploadPermissions ? children : fallback;
|
||
}
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/media-upload/README.md
|
||
*/
|
||
|
||
/* harmony default export */ var check = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSettings = _select.getSettings;
|
||
|
||
return {
|
||
hasUploadPermissions: !!getSettings().__experimentalMediaUpload
|
||
};
|
||
})(MediaUploadCheck));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-drop-zone/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var parseDropEvent = function parseDropEvent(event) {
|
||
var result = {
|
||
srcRootClientId: null,
|
||
srcClientId: null,
|
||
srcIndex: null,
|
||
type: null
|
||
};
|
||
|
||
if (!event.dataTransfer) {
|
||
return result;
|
||
}
|
||
|
||
try {
|
||
result = Object.assign(result, JSON.parse(event.dataTransfer.getData('text')));
|
||
} catch (err) {
|
||
return result;
|
||
}
|
||
|
||
return result;
|
||
};
|
||
|
||
var block_drop_zone_BlockDropZone =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockDropZone, _Component);
|
||
|
||
function BlockDropZone() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockDropZone);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockDropZone).apply(this, arguments));
|
||
_this.onFilesDrop = _this.onFilesDrop.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onHTMLDrop = _this.onHTMLDrop.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onDrop = _this.onDrop.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockDropZone, [{
|
||
key: "getInsertIndex",
|
||
value: function getInsertIndex(position) {
|
||
var _this$props = this.props,
|
||
clientId = _this$props.clientId,
|
||
rootClientId = _this$props.rootClientId,
|
||
getBlockIndex = _this$props.getBlockIndex;
|
||
|
||
if (clientId !== undefined) {
|
||
var index = getBlockIndex(clientId, rootClientId);
|
||
return position && position.y === 'top' ? index : index + 1;
|
||
}
|
||
}
|
||
}, {
|
||
key: "onFilesDrop",
|
||
value: function onFilesDrop(files, position) {
|
||
var transformation = Object(external_this_wp_blocks_["findTransform"])(Object(external_this_wp_blocks_["getBlockTransforms"])('from'), function (transform) {
|
||
return transform.type === 'files' && transform.isMatch(files);
|
||
});
|
||
|
||
if (transformation) {
|
||
var insertIndex = this.getInsertIndex(position);
|
||
var blocks = transformation.transform(files, this.props.updateBlockAttributes);
|
||
this.props.insertBlocks(blocks, insertIndex);
|
||
}
|
||
}
|
||
}, {
|
||
key: "onHTMLDrop",
|
||
value: function onHTMLDrop(HTML, position) {
|
||
var blocks = Object(external_this_wp_blocks_["pasteHandler"])({
|
||
HTML: HTML,
|
||
mode: 'BLOCKS'
|
||
});
|
||
|
||
if (blocks.length) {
|
||
this.props.insertBlocks(blocks, this.getInsertIndex(position));
|
||
}
|
||
}
|
||
}, {
|
||
key: "onDrop",
|
||
value: function onDrop(event, position) {
|
||
var _this$props2 = this.props,
|
||
dstRootClientId = _this$props2.rootClientId,
|
||
dstClientId = _this$props2.clientId,
|
||
getClientIdsOfDescendants = _this$props2.getClientIdsOfDescendants,
|
||
getBlockIndex = _this$props2.getBlockIndex;
|
||
|
||
var _parseDropEvent = parseDropEvent(event),
|
||
srcRootClientId = _parseDropEvent.srcRootClientId,
|
||
srcClientId = _parseDropEvent.srcClientId,
|
||
srcIndex = _parseDropEvent.srcIndex,
|
||
type = _parseDropEvent.type;
|
||
|
||
var isBlockDropType = function isBlockDropType(dropType) {
|
||
return dropType === 'block';
|
||
};
|
||
|
||
var isSameLevel = function isSameLevel(srcRoot, dstRoot) {
|
||
// Note that rootClientId of top-level blocks will be undefined OR a void string,
|
||
// so we also need to account for that case separately.
|
||
return srcRoot === dstRoot || !srcRoot === true && !dstRoot === true;
|
||
};
|
||
|
||
var isSameBlock = function isSameBlock(src, dst) {
|
||
return src === dst;
|
||
};
|
||
|
||
var isSrcBlockAnAncestorOfDstBlock = function isSrcBlockAnAncestorOfDstBlock(src, dst) {
|
||
return getClientIdsOfDescendants([src]).some(function (id) {
|
||
return id === dst;
|
||
});
|
||
};
|
||
|
||
if (!isBlockDropType(type) || isSameBlock(srcClientId, dstClientId) || isSrcBlockAnAncestorOfDstBlock(srcClientId, dstClientId || dstRootClientId)) {
|
||
return;
|
||
}
|
||
|
||
var dstIndex = dstClientId ? getBlockIndex(dstClientId, dstRootClientId) : undefined;
|
||
var positionIndex = this.getInsertIndex(position); // If the block is kept at the same level and moved downwards,
|
||
// subtract to account for blocks shifting upward to occupy its old position.
|
||
|
||
var insertIndex = dstIndex && srcIndex < dstIndex && isSameLevel(srcRootClientId, dstRootClientId) ? positionIndex - 1 : positionIndex;
|
||
this.props.moveBlockToPosition(srcClientId, srcRootClientId, insertIndex);
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var isLockedAll = this.props.isLockedAll;
|
||
|
||
if (isLockedAll) {
|
||
return null;
|
||
}
|
||
|
||
var index = this.getInsertIndex();
|
||
var isAppender = index === undefined;
|
||
return Object(external_this_wp_element_["createElement"])(check, null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["DropZone"], {
|
||
className: classnames_default()('editor-block-drop-zone block-editor-block-drop-zone', {
|
||
'is-appender': isAppender
|
||
}),
|
||
onFilesDrop: this.onFilesDrop,
|
||
onHTMLDrop: this.onHTMLDrop,
|
||
onDrop: this.onDrop
|
||
}));
|
||
}
|
||
}]);
|
||
|
||
return BlockDropZone;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var block_drop_zone = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
_insertBlocks = _dispatch.insertBlocks,
|
||
_updateBlockAttributes = _dispatch.updateBlockAttributes,
|
||
_moveBlockToPosition = _dispatch.moveBlockToPosition;
|
||
|
||
return {
|
||
insertBlocks: function insertBlocks(blocks, index) {
|
||
var rootClientId = ownProps.rootClientId;
|
||
|
||
_insertBlocks(blocks, index, rootClientId);
|
||
},
|
||
updateBlockAttributes: function updateBlockAttributes() {
|
||
_updateBlockAttributes.apply(void 0, arguments);
|
||
},
|
||
moveBlockToPosition: function moveBlockToPosition(srcClientId, srcRootClientId, dstIndex) {
|
||
var dstRootClientId = ownProps.rootClientId;
|
||
|
||
_moveBlockToPosition(srcClientId, srcRootClientId, dstRootClientId, dstIndex);
|
||
}
|
||
};
|
||
}), Object(external_this_wp_data_["withSelect"])(function (select, _ref) {
|
||
var rootClientId = _ref.rootClientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getClientIdsOfDescendants = _select.getClientIdsOfDescendants,
|
||
getTemplateLock = _select.getTemplateLock,
|
||
getBlockIndex = _select.getBlockIndex;
|
||
|
||
return {
|
||
isLockedAll: getTemplateLock(rootClientId) === 'all',
|
||
getClientIdsOfDescendants: getClientIdsOfDescendants,
|
||
getBlockIndex: getBlockIndex
|
||
};
|
||
}), Object(external_this_wp_components_["withFilters"])('editor.BlockDropZone'))(block_drop_zone_BlockDropZone));
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 2 modules
|
||
var toConsumableArray = __webpack_require__(17);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/dom-scroll-into-view/lib/index.js
|
||
var lib = __webpack_require__(71);
|
||
var lib_default = /*#__PURE__*/__webpack_require__.n(lib);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","url"]}
|
||
var external_this_wp_url_ = __webpack_require__(26);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 1 modules
|
||
var slicedToArray = __webpack_require__(23);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js + 1 modules
|
||
var objectWithoutProperties = __webpack_require__(21);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/defaults.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
var PREFERENCES_DEFAULTS = {
|
||
insertUsage: {}
|
||
};
|
||
/**
|
||
* The default editor settings
|
||
*
|
||
* alignWide boolean Enable/Disable Wide/Full Alignments
|
||
* availableLegacyWidgets Array Array of objects representing the legacy widgets available.
|
||
* colors Array Palette colors
|
||
* disableCustomColors boolean Whether or not the custom colors are disabled
|
||
* fontSizes Array Available font sizes
|
||
* disableCustomFontSizes boolean Whether or not the custom font sizes are disabled
|
||
* imageSizes Array Available image sizes
|
||
* maxWidth number Max width to constraint resizing
|
||
* allowedBlockTypes boolean|Array Allowed block types
|
||
* hasFixedToolbar boolean Whether or not the editor toolbar is fixed
|
||
* hasPermissionsToManageWidgets boolean Whether or not the user is able to manage widgets.
|
||
* focusMode boolean Whether the focus mode is enabled or not
|
||
* styles Array Editor Styles
|
||
* isRTL boolean Whether the editor is in RTL mode
|
||
* bodyPlaceholder string Empty post placeholder
|
||
* titlePlaceholder string Empty title placeholder
|
||
* codeEditingEnabled string Whether or not the user can switch to the code editor
|
||
* showInserterHelpPanel boolean Whether or not the inserter help panel is shown
|
||
* __experimentalCanUserUseUnfilteredHTML string Whether the user should be able to use unfiltered HTML or the HTML should be filtered e.g., to remove elements considered insecure like iframes.
|
||
* __experimentalEnableLegacyWidgetBlock boolean Whether the user has enabled the Legacy Widget Block
|
||
* __experimentalEnableMenuBlock boolean Whether the user has enabled the Menu Block
|
||
* __experimentalBlockDirectory boolean Whether the user has enabled the Block Directory
|
||
*/
|
||
|
||
var SETTINGS_DEFAULTS = {
|
||
alignWide: false,
|
||
colors: [{
|
||
name: Object(external_this_wp_i18n_["__"])('Pale pink'),
|
||
slug: 'pale-pink',
|
||
color: '#f78da7'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Vivid red'),
|
||
slug: 'vivid-red',
|
||
color: '#cf2e2e'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Luminous vivid orange'),
|
||
slug: 'luminous-vivid-orange',
|
||
color: '#ff6900'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Luminous vivid amber'),
|
||
slug: 'luminous-vivid-amber',
|
||
color: '#fcb900'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Light green cyan'),
|
||
slug: 'light-green-cyan',
|
||
color: '#7bdcb5'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Vivid green cyan'),
|
||
slug: 'vivid-green-cyan',
|
||
color: '#00d084'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Pale cyan blue'),
|
||
slug: 'pale-cyan-blue',
|
||
color: '#8ed1fc'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Vivid cyan blue'),
|
||
slug: 'vivid-cyan-blue',
|
||
color: '#0693e3'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Vivid purple'),
|
||
slug: 'vivid-purple',
|
||
color: '#9b51e0'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Very light gray'),
|
||
slug: 'very-light-gray',
|
||
color: '#eeeeee'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Cyan bluish gray'),
|
||
slug: 'cyan-bluish-gray',
|
||
color: '#abb8c3'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["__"])('Very dark gray'),
|
||
slug: 'very-dark-gray',
|
||
color: '#313131'
|
||
}],
|
||
fontSizes: [{
|
||
name: Object(external_this_wp_i18n_["_x"])('Small', 'font size name'),
|
||
size: 13,
|
||
slug: 'small'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["_x"])('Normal', 'font size name'),
|
||
size: 16,
|
||
slug: 'normal'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["_x"])('Medium', 'font size name'),
|
||
size: 20,
|
||
slug: 'medium'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["_x"])('Large', 'font size name'),
|
||
size: 36,
|
||
slug: 'large'
|
||
}, {
|
||
name: Object(external_this_wp_i18n_["_x"])('Huge', 'font size name'),
|
||
size: 48,
|
||
slug: 'huge'
|
||
}],
|
||
imageSizes: [{
|
||
slug: 'thumbnail',
|
||
label: Object(external_this_wp_i18n_["__"])('Thumbnail')
|
||
}, {
|
||
slug: 'medium',
|
||
label: Object(external_this_wp_i18n_["__"])('Medium')
|
||
}, {
|
||
slug: 'large',
|
||
label: Object(external_this_wp_i18n_["__"])('Large')
|
||
}, {
|
||
slug: 'full',
|
||
label: Object(external_this_wp_i18n_["__"])('Full Size')
|
||
}],
|
||
// This is current max width of the block inner area
|
||
// It's used to constraint image resizing and this value could be overridden later by themes
|
||
maxWidth: 580,
|
||
// Allowed block types for the editor, defaulting to true (all supported).
|
||
allowedBlockTypes: true,
|
||
// Maximum upload size in bytes allowed for the site.
|
||
maxUploadFileSize: 0,
|
||
// List of allowed mime types and file extensions.
|
||
allowedMimeTypes: null,
|
||
availableLegacyWidgets: {},
|
||
hasPermissionsToManageWidgets: false,
|
||
showInserterHelpPanel: true,
|
||
__experimentalCanUserUseUnfilteredHTML: false,
|
||
__experimentalEnableLegacyWidgetBlock: false,
|
||
__experimentalEnableMenuBlock: false,
|
||
__experimentalBlockDirectory: false
|
||
};
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/array.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* Insert one or multiple elements into a given position of an array.
|
||
*
|
||
* @param {Array} array Source array.
|
||
* @param {*} elements Elements to insert.
|
||
* @param {number} index Insert Position.
|
||
*
|
||
* @return {Array} Result.
|
||
*/
|
||
|
||
function insertAt(array, elements, index) {
|
||
return [].concat(Object(toConsumableArray["a" /* default */])(array.slice(0, index)), Object(toConsumableArray["a" /* default */])(Object(external_lodash_["castArray"])(elements)), Object(toConsumableArray["a" /* default */])(array.slice(index)));
|
||
}
|
||
/**
|
||
* Moves an element in an array.
|
||
*
|
||
* @param {Array} array Source array.
|
||
* @param {number} from Source index.
|
||
* @param {number} to Destination index.
|
||
* @param {number} count Number of elements to move.
|
||
*
|
||
* @return {Array} Result.
|
||
*/
|
||
|
||
function moveTo(array, from, to) {
|
||
var count = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
|
||
|
||
var withoutMovedElements = Object(toConsumableArray["a" /* default */])(array);
|
||
|
||
withoutMovedElements.splice(from, count);
|
||
return insertAt(withoutMovedElements, array.slice(from, from + count), to);
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/reducer.js
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Given an array of blocks, returns an object where each key is a nesting
|
||
* context, the value of which is an array of block client IDs existing within
|
||
* that nesting context.
|
||
*
|
||
* @param {Array} blocks Blocks to map.
|
||
* @param {?string} rootClientId Assumed root client ID.
|
||
*
|
||
* @return {Object} Block order map object.
|
||
*/
|
||
|
||
function mapBlockOrder(blocks) {
|
||
var rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
||
|
||
var result = Object(defineProperty["a" /* default */])({}, rootClientId, []);
|
||
|
||
blocks.forEach(function (block) {
|
||
var clientId = block.clientId,
|
||
innerBlocks = block.innerBlocks;
|
||
result[rootClientId].push(clientId);
|
||
Object.assign(result, mapBlockOrder(innerBlocks, clientId));
|
||
});
|
||
return result;
|
||
}
|
||
/**
|
||
* Given an array of blocks, returns an object where each key contains
|
||
* the clientId of the block and the value is the parent of the block.
|
||
*
|
||
* @param {Array} blocks Blocks to map.
|
||
* @param {?string} rootClientId Assumed root client ID.
|
||
*
|
||
* @return {Object} Block order map object.
|
||
*/
|
||
|
||
|
||
function mapBlockParents(blocks) {
|
||
var rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
||
return blocks.reduce(function (result, block) {
|
||
return Object.assign(result, Object(defineProperty["a" /* default */])({}, block.clientId, rootClientId), mapBlockParents(block.innerBlocks, block.clientId));
|
||
}, {});
|
||
}
|
||
/**
|
||
* Helper method to iterate through all blocks, recursing into inner blocks,
|
||
* applying a transformation function to each one.
|
||
* Returns a flattened object with the transformed blocks.
|
||
*
|
||
* @param {Array} blocks Blocks to flatten.
|
||
* @param {Function} transform Transforming function to be applied to each block.
|
||
*
|
||
* @return {Object} Flattened object.
|
||
*/
|
||
|
||
|
||
function flattenBlocks(blocks) {
|
||
var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : external_lodash_["identity"];
|
||
var result = {};
|
||
|
||
var stack = Object(toConsumableArray["a" /* default */])(blocks);
|
||
|
||
while (stack.length) {
|
||
var _stack$shift = stack.shift(),
|
||
innerBlocks = _stack$shift.innerBlocks,
|
||
block = Object(objectWithoutProperties["a" /* default */])(_stack$shift, ["innerBlocks"]);
|
||
|
||
stack.push.apply(stack, Object(toConsumableArray["a" /* default */])(innerBlocks));
|
||
result[block.clientId] = transform(block);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
/**
|
||
* Given an array of blocks, returns an object containing all blocks, without
|
||
* attributes, recursing into inner blocks. Keys correspond to the block client
|
||
* ID, the value of which is the attributes object.
|
||
*
|
||
* @param {Array} blocks Blocks to flatten.
|
||
*
|
||
* @return {Object} Flattened block attributes object.
|
||
*/
|
||
|
||
|
||
function getFlattenedBlocksWithoutAttributes(blocks) {
|
||
return flattenBlocks(blocks, function (block) {
|
||
return Object(external_lodash_["omit"])(block, 'attributes');
|
||
});
|
||
}
|
||
/**
|
||
* Given an array of blocks, returns an object containing all block attributes,
|
||
* recursing into inner blocks. Keys correspond to the block client ID, the
|
||
* value of which is the attributes object.
|
||
*
|
||
* @param {Array} blocks Blocks to flatten.
|
||
*
|
||
* @return {Object} Flattened block attributes object.
|
||
*/
|
||
|
||
|
||
function getFlattenedBlockAttributes(blocks) {
|
||
return flattenBlocks(blocks, function (block) {
|
||
return block.attributes;
|
||
});
|
||
}
|
||
/**
|
||
* Given a block order map object, returns *all* of the block client IDs that are
|
||
* a descendant of the given root client ID.
|
||
*
|
||
* Calling this with `rootClientId` set to `''` results in a list of client IDs
|
||
* that are in the post. That is, it excludes blocks like fetched reusable
|
||
* blocks which are stored into state but not visible.
|
||
*
|
||
* @param {Object} blocksOrder Object that maps block client IDs to a list of
|
||
* nested block client IDs.
|
||
* @param {?string} rootClientId The root client ID to search. Defaults to ''.
|
||
*
|
||
* @return {Array} List of descendant client IDs.
|
||
*/
|
||
|
||
|
||
function getNestedBlockClientIds(blocksOrder) {
|
||
var rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
||
return Object(external_lodash_["reduce"])(blocksOrder[rootClientId], function (result, clientId) {
|
||
return [].concat(Object(toConsumableArray["a" /* default */])(result), [clientId], Object(toConsumableArray["a" /* default */])(getNestedBlockClientIds(blocksOrder, clientId)));
|
||
}, []);
|
||
}
|
||
/**
|
||
* Returns an object against which it is safe to perform mutating operations,
|
||
* given the original object and its current working copy.
|
||
*
|
||
* @param {Object} original Original object.
|
||
* @param {Object} working Working object.
|
||
*
|
||
* @return {Object} Mutation-safe object.
|
||
*/
|
||
|
||
|
||
function getMutateSafeObject(original, working) {
|
||
if (original === working) {
|
||
return Object(objectSpread["a" /* default */])({}, original);
|
||
}
|
||
|
||
return working;
|
||
}
|
||
/**
|
||
* Returns true if the two object arguments have the same keys, or false
|
||
* otherwise.
|
||
*
|
||
* @param {Object} a First object.
|
||
* @param {Object} b Second object.
|
||
*
|
||
* @return {boolean} Whether the two objects have the same keys.
|
||
*/
|
||
|
||
|
||
function hasSameKeys(a, b) {
|
||
return Object(external_lodash_["isEqual"])(Object(external_lodash_["keys"])(a), Object(external_lodash_["keys"])(b));
|
||
}
|
||
/**
|
||
* Returns true if, given the currently dispatching action and the previously
|
||
* dispatched action, the two actions are updating the same block attribute, or
|
||
* false otherwise.
|
||
*
|
||
* @param {Object} action Currently dispatching action.
|
||
* @param {Object} lastAction Previously dispatched action.
|
||
*
|
||
* @return {boolean} Whether actions are updating the same block attribute.
|
||
*/
|
||
|
||
function isUpdatingSameBlockAttribute(action, lastAction) {
|
||
return action.type === 'UPDATE_BLOCK_ATTRIBUTES' && lastAction !== undefined && lastAction.type === 'UPDATE_BLOCK_ATTRIBUTES' && action.clientId === lastAction.clientId && hasSameKeys(action.attributes, lastAction.attributes);
|
||
}
|
||
/**
|
||
* Utility returning an object with an empty object value for each key.
|
||
*
|
||
* @param {Array} objectKeys Keys to fill.
|
||
* @return {Object} Object filled with empty object as values for each clientId.
|
||
*/
|
||
|
||
var fillKeysWithEmptyObject = function fillKeysWithEmptyObject(objectKeys) {
|
||
return objectKeys.reduce(function (result, key) {
|
||
result[key] = {};
|
||
return result;
|
||
}, {});
|
||
};
|
||
/**
|
||
* Higher-order reducer intended to compute a cache key for each block in the post.
|
||
* A new instance of the cache key (empty object) is created each time the block object
|
||
* needs to be refreshed (for any change in the block or its children).
|
||
*
|
||
* @param {Function} reducer Original reducer function.
|
||
*
|
||
* @return {Function} Enhanced reducer function.
|
||
*/
|
||
|
||
|
||
var reducer_withBlockCache = function withBlockCache(reducer) {
|
||
return function () {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
var newState = reducer(state, action);
|
||
|
||
if (newState === state) {
|
||
return state;
|
||
}
|
||
|
||
newState.cache = state.cache ? state.cache : {};
|
||
/**
|
||
* For each clientId provided, traverses up parents, adding the provided clientIds
|
||
* and each parent's clientId to the returned array.
|
||
*
|
||
* When calling this function consider that it uses the old state, so any state
|
||
* modifications made by the `reducer` will not be present.
|
||
*
|
||
* @param {Array} clientIds an Array of block clientIds.
|
||
*
|
||
* @return {Array} The provided clientIds and all of their parent clientIds.
|
||
*/
|
||
|
||
var getBlocksWithParentsClientIds = function getBlocksWithParentsClientIds(clientIds) {
|
||
return clientIds.reduce(function (result, clientId) {
|
||
var current = clientId;
|
||
|
||
do {
|
||
result.push(current);
|
||
current = state.parents[current];
|
||
} while (current);
|
||
|
||
return result;
|
||
}, []);
|
||
};
|
||
|
||
switch (action.type) {
|
||
case 'RESET_BLOCKS':
|
||
newState.cache = Object(external_lodash_["mapValues"])(flattenBlocks(action.blocks), function () {
|
||
return {};
|
||
});
|
||
break;
|
||
|
||
case 'RECEIVE_BLOCKS':
|
||
case 'INSERT_BLOCKS':
|
||
{
|
||
var updatedBlockUids = Object(external_lodash_["keys"])(flattenBlocks(action.blocks));
|
||
|
||
if (action.rootClientId) {
|
||
updatedBlockUids.push(action.rootClientId);
|
||
}
|
||
|
||
newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds(updatedBlockUids)));
|
||
break;
|
||
}
|
||
|
||
case 'UPDATE_BLOCK':
|
||
case 'UPDATE_BLOCK_ATTRIBUTES':
|
||
newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds([action.clientId])));
|
||
break;
|
||
|
||
case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
var parentClientIds = fillKeysWithEmptyObject(getBlocksWithParentsClientIds(action.replacedClientIds));
|
||
newState.cache = Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(newState.cache, action.replacedClientIds), Object(external_lodash_["omit"])(parentClientIds, action.replacedClientIds), fillKeysWithEmptyObject(Object(external_lodash_["keys"])(flattenBlocks(action.blocks))));
|
||
break;
|
||
|
||
case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
newState.cache = Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(newState.cache, action.removedClientIds), fillKeysWithEmptyObject(Object(external_lodash_["difference"])(getBlocksWithParentsClientIds(action.clientIds), action.clientIds)));
|
||
break;
|
||
|
||
case 'MOVE_BLOCK_TO_POSITION':
|
||
{
|
||
var _updatedBlockUids = [action.clientId];
|
||
|
||
if (action.fromRootClientId) {
|
||
_updatedBlockUids.push(action.fromRootClientId);
|
||
}
|
||
|
||
if (action.toRootClientId) {
|
||
_updatedBlockUids.push(action.toRootClientId);
|
||
}
|
||
|
||
newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds(_updatedBlockUids)));
|
||
break;
|
||
}
|
||
|
||
case 'MOVE_BLOCKS_UP':
|
||
case 'MOVE_BLOCKS_DOWN':
|
||
{
|
||
var _updatedBlockUids2 = [];
|
||
|
||
if (action.rootClientId) {
|
||
_updatedBlockUids2.push(action.rootClientId);
|
||
}
|
||
|
||
newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds(_updatedBlockUids2)));
|
||
break;
|
||
}
|
||
|
||
case 'SAVE_REUSABLE_BLOCK_SUCCESS':
|
||
{
|
||
var _updatedBlockUids3 = Object(external_lodash_["keys"])(Object(external_lodash_["omitBy"])(newState.attributes, function (attributes, clientId) {
|
||
return newState.byClientId[clientId].name !== 'core/block' || attributes.ref !== action.updatedId;
|
||
}));
|
||
|
||
newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds(_updatedBlockUids3)));
|
||
}
|
||
}
|
||
|
||
return newState;
|
||
};
|
||
};
|
||
/**
|
||
* Higher-order reducer intended to augment the blocks reducer, assigning an
|
||
* `isPersistentChange` property value corresponding to whether a change in
|
||
* state can be considered as persistent. All changes are considered persistent
|
||
* except when updating the same block attribute as in the previous action.
|
||
*
|
||
* @param {Function} reducer Original reducer function.
|
||
*
|
||
* @return {Function} Enhanced reducer function.
|
||
*/
|
||
|
||
|
||
function withPersistentBlockChange(reducer) {
|
||
var lastAction;
|
||
return function (state, action) {
|
||
var nextState = reducer(state, action);
|
||
var isExplicitPersistentChange = action.type === 'MARK_LAST_CHANGE_AS_PERSISTENT'; // Defer to previous state value (or default) unless changing or
|
||
// explicitly marking as persistent.
|
||
|
||
if (state === nextState && !isExplicitPersistentChange) {
|
||
var nextIsPersistentChange = Object(external_lodash_["get"])(state, ['isPersistentChange'], true);
|
||
|
||
if (state.isPersistentChange === nextIsPersistentChange) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, nextState, {
|
||
isPersistentChange: nextIsPersistentChange
|
||
});
|
||
}
|
||
|
||
nextState = Object(objectSpread["a" /* default */])({}, nextState, {
|
||
isPersistentChange: isExplicitPersistentChange || !isUpdatingSameBlockAttribute(action, lastAction)
|
||
}); // In comparing against the previous action, consider only those which
|
||
// would have qualified as one which would have been ignored or not
|
||
// have resulted in a changed state.
|
||
|
||
lastAction = action;
|
||
return nextState;
|
||
};
|
||
}
|
||
/**
|
||
* Higher-order reducer intended to augment the blocks reducer, assigning an
|
||
* `isIgnoredChange` property value corresponding to whether a change in state
|
||
* can be considered as ignored. A change is considered ignored when the result
|
||
* of an action not incurred by direct user interaction.
|
||
*
|
||
* @param {Function} reducer Original reducer function.
|
||
*
|
||
* @return {Function} Enhanced reducer function.
|
||
*/
|
||
|
||
|
||
function withIgnoredBlockChange(reducer) {
|
||
/**
|
||
* Set of action types for which a blocks state change should be ignored.
|
||
*
|
||
* @type {Set}
|
||
*/
|
||
var IGNORED_ACTION_TYPES = new Set(['RECEIVE_BLOCKS']);
|
||
return function (state, action) {
|
||
var nextState = reducer(state, action);
|
||
|
||
if (nextState !== state) {
|
||
nextState.isIgnoredChange = IGNORED_ACTION_TYPES.has(action.type);
|
||
}
|
||
|
||
return nextState;
|
||
};
|
||
}
|
||
/**
|
||
* Higher-order reducer targeting the combined blocks reducer, augmenting
|
||
* block client IDs in remove action to include cascade of inner blocks.
|
||
*
|
||
* @param {Function} reducer Original reducer function.
|
||
*
|
||
* @return {Function} Enhanced reducer function.
|
||
*/
|
||
|
||
|
||
var reducer_withInnerBlocksRemoveCascade = function withInnerBlocksRemoveCascade(reducer) {
|
||
return function (state, action) {
|
||
var getAllChildren = function getAllChildren(clientIds) {
|
||
var result = clientIds;
|
||
|
||
for (var i = 0; i < result.length; i++) {
|
||
var _result2;
|
||
|
||
if (!state.order[result[i]]) {
|
||
continue;
|
||
}
|
||
|
||
if (result === clientIds) {
|
||
result = Object(toConsumableArray["a" /* default */])(result);
|
||
}
|
||
|
||
(_result2 = result).push.apply(_result2, Object(toConsumableArray["a" /* default */])(state.order[result[i]]));
|
||
}
|
||
|
||
return result;
|
||
};
|
||
|
||
if (state) {
|
||
switch (action.type) {
|
||
case 'REMOVE_BLOCKS':
|
||
action = Object(objectSpread["a" /* default */])({}, action, {
|
||
type: 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN',
|
||
removedClientIds: getAllChildren(action.clientIds)
|
||
});
|
||
break;
|
||
|
||
case 'REPLACE_BLOCKS':
|
||
action = Object(objectSpread["a" /* default */])({}, action, {
|
||
type: 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN',
|
||
replacedClientIds: getAllChildren(action.clientIds)
|
||
});
|
||
break;
|
||
}
|
||
}
|
||
|
||
return reducer(state, action);
|
||
};
|
||
};
|
||
/**
|
||
* Higher-order reducer which targets the combined blocks reducer and handles
|
||
* the `RESET_BLOCKS` action. When dispatched, this action will replace all
|
||
* blocks that exist in the post, leaving blocks that exist only in state (e.g.
|
||
* reusable blocks) alone.
|
||
*
|
||
* @param {Function} reducer Original reducer function.
|
||
*
|
||
* @return {Function} Enhanced reducer function.
|
||
*/
|
||
|
||
|
||
var reducer_withBlockReset = function withBlockReset(reducer) {
|
||
return function (state, action) {
|
||
if (state && action.type === 'RESET_BLOCKS') {
|
||
var visibleClientIds = getNestedBlockClientIds(state.order);
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
byClientId: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.byClientId, visibleClientIds), getFlattenedBlocksWithoutAttributes(action.blocks)),
|
||
attributes: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.attributes, visibleClientIds), getFlattenedBlockAttributes(action.blocks)),
|
||
order: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.order, visibleClientIds), mapBlockOrder(action.blocks)),
|
||
parents: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.parents, visibleClientIds), mapBlockParents(action.blocks)),
|
||
cache: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.cache, visibleClientIds), Object(external_lodash_["mapValues"])(flattenBlocks(action.blocks), function () {
|
||
return {};
|
||
}))
|
||
});
|
||
}
|
||
|
||
return reducer(state, action);
|
||
};
|
||
};
|
||
/**
|
||
* Higher-order reducer which targets the combined blocks reducer and handles
|
||
* the `REPLACE_INNER_BLOCKS` action. When dispatched, this action the state should become equivalent
|
||
* to the execution of a `REMOVE_BLOCKS` action containing all the child's of the root block followed by
|
||
* the execution of `INSERT_BLOCKS` with the new blocks.
|
||
*
|
||
* @param {Function} reducer Original reducer function.
|
||
*
|
||
* @return {Function} Enhanced reducer function.
|
||
*/
|
||
|
||
|
||
var reducer_withReplaceInnerBlocks = function withReplaceInnerBlocks(reducer) {
|
||
return function (state, action) {
|
||
if (action.type !== 'REPLACE_INNER_BLOCKS') {
|
||
return reducer(state, action);
|
||
}
|
||
|
||
var stateAfterBlocksRemoval = state;
|
||
|
||
if (state.order[action.rootClientId]) {
|
||
stateAfterBlocksRemoval = reducer(stateAfterBlocksRemoval, {
|
||
type: 'REMOVE_BLOCKS',
|
||
clientIds: state.order[action.rootClientId]
|
||
});
|
||
}
|
||
|
||
var stateAfterInsert = stateAfterBlocksRemoval;
|
||
|
||
if (action.blocks.length) {
|
||
stateAfterInsert = reducer(stateAfterInsert, Object(objectSpread["a" /* default */])({}, action, {
|
||
type: 'INSERT_BLOCKS',
|
||
index: 0
|
||
}));
|
||
}
|
||
|
||
return stateAfterInsert;
|
||
};
|
||
};
|
||
/**
|
||
* Higher-order reducer which targets the combined blocks reducer and handles
|
||
* the `SAVE_REUSABLE_BLOCK_SUCCESS` action. This action can't be handled by
|
||
* regular reducers and needs a higher-order reducer since it needs access to
|
||
* both `byClientId` and `attributes` simultaneously.
|
||
*
|
||
* @param {Function} reducer Original reducer function.
|
||
*
|
||
* @return {Function} Enhanced reducer function.
|
||
*/
|
||
|
||
|
||
var reducer_withSaveReusableBlock = function withSaveReusableBlock(reducer) {
|
||
return function (state, action) {
|
||
if (state && action.type === 'SAVE_REUSABLE_BLOCK_SUCCESS') {
|
||
var id = action.id,
|
||
updatedId = action.updatedId; // If a temporary reusable block is saved, we swap the temporary id with the final one
|
||
|
||
if (id === updatedId) {
|
||
return state;
|
||
}
|
||
|
||
state = Object(objectSpread["a" /* default */])({}, state);
|
||
state.attributes = Object(external_lodash_["mapValues"])(state.attributes, function (attributes, clientId) {
|
||
var name = state.byClientId[clientId].name;
|
||
|
||
if (name === 'core/block' && attributes.ref === id) {
|
||
return Object(objectSpread["a" /* default */])({}, attributes, {
|
||
ref: updatedId
|
||
});
|
||
}
|
||
|
||
return attributes;
|
||
});
|
||
}
|
||
|
||
return reducer(state, action);
|
||
};
|
||
};
|
||
/**
|
||
* Reducer returning the blocks state.
|
||
*
|
||
* @param {Object} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {Object} Updated state.
|
||
*/
|
||
|
||
|
||
var reducer_blocks = Object(external_lodash_["flow"])(external_this_wp_data_["combineReducers"], reducer_withSaveReusableBlock, // needs to be before withBlockCache
|
||
reducer_withBlockCache, // needs to be before withInnerBlocksRemoveCascade
|
||
reducer_withInnerBlocksRemoveCascade, reducer_withReplaceInnerBlocks, // needs to be after withInnerBlocksRemoveCascade
|
||
reducer_withBlockReset, withPersistentBlockChange, withIgnoredBlockChange)({
|
||
byClientId: function byClientId() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'RESET_BLOCKS':
|
||
return getFlattenedBlocksWithoutAttributes(action.blocks);
|
||
|
||
case 'RECEIVE_BLOCKS':
|
||
case 'INSERT_BLOCKS':
|
||
return Object(objectSpread["a" /* default */])({}, state, getFlattenedBlocksWithoutAttributes(action.blocks));
|
||
|
||
case 'UPDATE_BLOCK':
|
||
// Ignore updates if block isn't known
|
||
if (!state[action.clientId]) {
|
||
return state;
|
||
} // Do nothing if only attributes change.
|
||
|
||
|
||
var changes = Object(external_lodash_["omit"])(action.updates, 'attributes');
|
||
|
||
if (Object(external_lodash_["isEmpty"])(changes)) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, action.clientId, Object(objectSpread["a" /* default */])({}, state[action.clientId], changes)));
|
||
|
||
case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
if (!action.blocks) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state, action.replacedClientIds), getFlattenedBlocksWithoutAttributes(action.blocks));
|
||
|
||
case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
return Object(external_lodash_["omit"])(state, action.removedClientIds);
|
||
}
|
||
|
||
return state;
|
||
},
|
||
attributes: function attributes() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'RESET_BLOCKS':
|
||
return getFlattenedBlockAttributes(action.blocks);
|
||
|
||
case 'RECEIVE_BLOCKS':
|
||
case 'INSERT_BLOCKS':
|
||
return Object(objectSpread["a" /* default */])({}, state, getFlattenedBlockAttributes(action.blocks));
|
||
|
||
case 'UPDATE_BLOCK':
|
||
// Ignore updates if block isn't known or there are no attribute changes.
|
||
if (!state[action.clientId] || !action.updates.attributes) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, action.clientId, Object(objectSpread["a" /* default */])({}, state[action.clientId], action.updates.attributes)));
|
||
|
||
case 'UPDATE_BLOCK_ATTRIBUTES':
|
||
// Ignore updates if block isn't known
|
||
if (!state[action.clientId]) {
|
||
return state;
|
||
} // Consider as updates only changed values
|
||
|
||
|
||
var nextAttributes = Object(external_lodash_["reduce"])(action.attributes, function (result, value, key) {
|
||
if (value !== result[key]) {
|
||
result = getMutateSafeObject(state[action.clientId], result);
|
||
result[key] = value;
|
||
}
|
||
|
||
return result;
|
||
}, state[action.clientId]); // Skip update if nothing has been changed. The reference will
|
||
// match the original block if `reduce` had no changed values.
|
||
|
||
if (nextAttributes === state[action.clientId]) {
|
||
return state;
|
||
} // Otherwise replace attributes in state
|
||
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, action.clientId, nextAttributes));
|
||
|
||
case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
if (!action.blocks) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state, action.replacedClientIds), getFlattenedBlockAttributes(action.blocks));
|
||
|
||
case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
return Object(external_lodash_["omit"])(state, action.removedClientIds);
|
||
}
|
||
|
||
return state;
|
||
},
|
||
order: function order() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'RESET_BLOCKS':
|
||
return mapBlockOrder(action.blocks);
|
||
|
||
case 'RECEIVE_BLOCKS':
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(external_lodash_["omit"])(mapBlockOrder(action.blocks), ''));
|
||
|
||
case 'INSERT_BLOCKS':
|
||
{
|
||
var _action$rootClientId = action.rootClientId,
|
||
rootClientId = _action$rootClientId === void 0 ? '' : _action$rootClientId;
|
||
var subState = state[rootClientId] || [];
|
||
var mappedBlocks = mapBlockOrder(action.blocks, rootClientId);
|
||
var _action$index = action.index,
|
||
index = _action$index === void 0 ? subState.length : _action$index;
|
||
return Object(objectSpread["a" /* default */])({}, state, mappedBlocks, Object(defineProperty["a" /* default */])({}, rootClientId, insertAt(subState, mappedBlocks[rootClientId], index)));
|
||
}
|
||
|
||
case 'MOVE_BLOCK_TO_POSITION':
|
||
{
|
||
var _objectSpread7;
|
||
|
||
var _action$fromRootClien = action.fromRootClientId,
|
||
fromRootClientId = _action$fromRootClien === void 0 ? '' : _action$fromRootClien,
|
||
_action$toRootClientI = action.toRootClientId,
|
||
toRootClientId = _action$toRootClientI === void 0 ? '' : _action$toRootClientI,
|
||
clientId = action.clientId;
|
||
|
||
var _action$index2 = action.index,
|
||
_index = _action$index2 === void 0 ? state[toRootClientId].length : _action$index2; // Moving inside the same parent block
|
||
|
||
|
||
if (fromRootClientId === toRootClientId) {
|
||
var _subState = state[toRootClientId];
|
||
|
||
var fromIndex = _subState.indexOf(clientId);
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, toRootClientId, moveTo(state[toRootClientId], fromIndex, _index)));
|
||
} // Moving from a parent block to another
|
||
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, (_objectSpread7 = {}, Object(defineProperty["a" /* default */])(_objectSpread7, fromRootClientId, Object(external_lodash_["without"])(state[fromRootClientId], clientId)), Object(defineProperty["a" /* default */])(_objectSpread7, toRootClientId, insertAt(state[toRootClientId], clientId, _index)), _objectSpread7));
|
||
}
|
||
|
||
case 'MOVE_BLOCKS_UP':
|
||
{
|
||
var clientIds = action.clientIds,
|
||
_action$rootClientId2 = action.rootClientId,
|
||
_rootClientId = _action$rootClientId2 === void 0 ? '' : _action$rootClientId2;
|
||
|
||
var firstClientId = Object(external_lodash_["first"])(clientIds);
|
||
var _subState2 = state[_rootClientId];
|
||
|
||
if (!_subState2.length || firstClientId === Object(external_lodash_["first"])(_subState2)) {
|
||
return state;
|
||
}
|
||
|
||
var firstIndex = _subState2.indexOf(firstClientId);
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, _rootClientId, moveTo(_subState2, firstIndex, firstIndex - 1, clientIds.length)));
|
||
}
|
||
|
||
case 'MOVE_BLOCKS_DOWN':
|
||
{
|
||
var _clientIds = action.clientIds,
|
||
_action$rootClientId3 = action.rootClientId,
|
||
_rootClientId2 = _action$rootClientId3 === void 0 ? '' : _action$rootClientId3;
|
||
|
||
var _firstClientId = Object(external_lodash_["first"])(_clientIds);
|
||
|
||
var lastClientId = Object(external_lodash_["last"])(_clientIds);
|
||
var _subState3 = state[_rootClientId2];
|
||
|
||
if (!_subState3.length || lastClientId === Object(external_lodash_["last"])(_subState3)) {
|
||
return state;
|
||
}
|
||
|
||
var _firstIndex = _subState3.indexOf(_firstClientId);
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, _rootClientId2, moveTo(_subState3, _firstIndex, _firstIndex + 1, _clientIds.length)));
|
||
}
|
||
|
||
case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
{
|
||
var _clientIds2 = action.clientIds;
|
||
|
||
if (!action.blocks) {
|
||
return state;
|
||
}
|
||
|
||
var _mappedBlocks = mapBlockOrder(action.blocks);
|
||
|
||
return Object(external_lodash_["flow"])([function (nextState) {
|
||
return Object(external_lodash_["omit"])(nextState, action.replacedClientIds);
|
||
}, function (nextState) {
|
||
return Object(objectSpread["a" /* default */])({}, nextState, Object(external_lodash_["omit"])(_mappedBlocks, ''));
|
||
}, function (nextState) {
|
||
return Object(external_lodash_["mapValues"])(nextState, function (subState) {
|
||
return Object(external_lodash_["reduce"])(subState, function (result, clientId) {
|
||
if (clientId === _clientIds2[0]) {
|
||
return [].concat(Object(toConsumableArray["a" /* default */])(result), Object(toConsumableArray["a" /* default */])(_mappedBlocks['']));
|
||
}
|
||
|
||
if (_clientIds2.indexOf(clientId) === -1) {
|
||
result.push(clientId);
|
||
}
|
||
|
||
return result;
|
||
}, []);
|
||
});
|
||
}])(state);
|
||
}
|
||
|
||
case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
return Object(external_lodash_["flow"])([// Remove inner block ordering for removed blocks
|
||
function (nextState) {
|
||
return Object(external_lodash_["omit"])(nextState, action.removedClientIds);
|
||
}, // Remove deleted blocks from other blocks' orderings
|
||
function (nextState) {
|
||
return Object(external_lodash_["mapValues"])(nextState, function (subState) {
|
||
return external_lodash_["without"].apply(void 0, [subState].concat(Object(toConsumableArray["a" /* default */])(action.removedClientIds)));
|
||
});
|
||
}])(state);
|
||
}
|
||
|
||
return state;
|
||
},
|
||
// While technically redundant data as the inverse of `order`, it serves as
|
||
// an optimization for the selectors which derive the ancestry of a block.
|
||
parents: function parents() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'RESET_BLOCKS':
|
||
return mapBlockParents(action.blocks);
|
||
|
||
case 'RECEIVE_BLOCKS':
|
||
return Object(objectSpread["a" /* default */])({}, state, mapBlockParents(action.blocks));
|
||
|
||
case 'INSERT_BLOCKS':
|
||
return Object(objectSpread["a" /* default */])({}, state, mapBlockParents(action.blocks, action.rootClientId || ''));
|
||
|
||
case 'MOVE_BLOCK_TO_POSITION':
|
||
{
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, action.clientId, action.toRootClientId || ''));
|
||
}
|
||
|
||
case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
return Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state, action.replacedClientIds), mapBlockParents(action.blocks, state[action.clientIds[0]]));
|
||
|
||
case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
|
||
return Object(external_lodash_["omit"])(state, action.removedClientIds);
|
||
}
|
||
|
||
return state;
|
||
}
|
||
});
|
||
/**
|
||
* Reducer returning typing state.
|
||
*
|
||
* @param {boolean} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {boolean} Updated state.
|
||
*/
|
||
|
||
function reducer_isTyping() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'START_TYPING':
|
||
return true;
|
||
|
||
case 'STOP_TYPING':
|
||
return false;
|
||
}
|
||
|
||
return state;
|
||
}
|
||
/**
|
||
* Reducer returning whether the caret is within formatted text.
|
||
*
|
||
* @param {boolean} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {boolean} Updated state.
|
||
*/
|
||
|
||
function reducer_isCaretWithinFormattedText() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'ENTER_FORMATTED_TEXT':
|
||
return true;
|
||
|
||
case 'EXIT_FORMATTED_TEXT':
|
||
return false;
|
||
}
|
||
|
||
return state;
|
||
}
|
||
var BLOCK_SELECTION_EMPTY_OBJECT = {};
|
||
var BLOCK_SELECTION_INITIAL_STATE = {
|
||
start: BLOCK_SELECTION_EMPTY_OBJECT,
|
||
end: BLOCK_SELECTION_EMPTY_OBJECT,
|
||
isMultiSelecting: false,
|
||
isEnabled: true,
|
||
initialPosition: null
|
||
};
|
||
/**
|
||
* Reducer returning the block selection's state.
|
||
*
|
||
* @param {Object} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {Object} Updated state.
|
||
*/
|
||
|
||
function blockSelection() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : BLOCK_SELECTION_INITIAL_STATE;
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'CLEAR_SELECTED_BLOCK':
|
||
if (!state.start || !state.start.clientId) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
start: BLOCK_SELECTION_EMPTY_OBJECT,
|
||
end: BLOCK_SELECTION_EMPTY_OBJECT,
|
||
isMultiSelecting: false,
|
||
initialPosition: null
|
||
});
|
||
|
||
case 'START_MULTI_SELECT':
|
||
if (state.isMultiSelecting) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
isMultiSelecting: true,
|
||
initialPosition: null
|
||
});
|
||
|
||
case 'STOP_MULTI_SELECT':
|
||
if (!state.isMultiSelecting) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
isMultiSelecting: false,
|
||
initialPosition: null
|
||
});
|
||
|
||
case 'MULTI_SELECT':
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
isMultiSelecting: state.isMultiSelecting,
|
||
start: {
|
||
clientId: action.start
|
||
},
|
||
end: {
|
||
clientId: action.end
|
||
}
|
||
});
|
||
|
||
case 'SELECT_BLOCK':
|
||
if (action.clientId === state.start.clientId && action.clientId === state.end.clientId) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
initialPosition: action.initialPosition,
|
||
start: {
|
||
clientId: action.clientId
|
||
},
|
||
end: {
|
||
clientId: action.clientId
|
||
}
|
||
});
|
||
|
||
case 'REPLACE_INNER_BLOCKS': // REPLACE_INNER_BLOCKS and INSERT_BLOCKS should follow the same logic.
|
||
|
||
case 'INSERT_BLOCKS':
|
||
{
|
||
if (action.updateSelection) {
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
start: {
|
||
clientId: action.blocks[0].clientId
|
||
},
|
||
end: {
|
||
clientId: action.blocks[0].clientId
|
||
}
|
||
});
|
||
}
|
||
|
||
return state;
|
||
}
|
||
|
||
case 'REMOVE_BLOCKS':
|
||
if (!action.clientIds || !action.clientIds.length || action.clientIds.indexOf(state.start.clientId) === -1) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
start: BLOCK_SELECTION_EMPTY_OBJECT,
|
||
end: BLOCK_SELECTION_EMPTY_OBJECT,
|
||
isMultiSelecting: false,
|
||
initialPosition: null
|
||
});
|
||
|
||
case 'REPLACE_BLOCKS':
|
||
{
|
||
if (action.clientIds.indexOf(state.start.clientId) === -1) {
|
||
return state;
|
||
}
|
||
|
||
var indexToSelect = action.indexToSelect || action.blocks.length - 1;
|
||
var blockToSelect = action.blocks[indexToSelect];
|
||
|
||
if (!blockToSelect) {
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
start: BLOCK_SELECTION_EMPTY_OBJECT,
|
||
end: BLOCK_SELECTION_EMPTY_OBJECT,
|
||
isMultiSelecting: false,
|
||
initialPosition: null
|
||
});
|
||
}
|
||
|
||
if (blockToSelect.clientId === state.start.clientId && blockToSelect.clientId === state.end.clientId) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
start: {
|
||
clientId: blockToSelect.clientId
|
||
},
|
||
end: {
|
||
clientId: blockToSelect.clientId
|
||
}
|
||
});
|
||
}
|
||
|
||
case 'TOGGLE_SELECTION':
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
isEnabled: action.isSelectionEnabled
|
||
});
|
||
|
||
case 'SELECTION_CHANGE':
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
start: {
|
||
clientId: action.clientId,
|
||
attributeKey: action.attributeKey,
|
||
offset: action.startOffset
|
||
},
|
||
end: {
|
||
clientId: action.clientId,
|
||
attributeKey: action.attributeKey,
|
||
offset: action.endOffset
|
||
}
|
||
});
|
||
}
|
||
|
||
return state;
|
||
}
|
||
function blocksMode() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
if (action.type === 'TOGGLE_BLOCK_MODE') {
|
||
var clientId = action.clientId;
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, clientId, state[clientId] && state[clientId] === 'html' ? 'visual' : 'html'));
|
||
}
|
||
|
||
return state;
|
||
}
|
||
/**
|
||
* Reducer returning the block insertion point visibility, either null if there
|
||
* is not an explicit insertion point assigned, or an object of its `index` and
|
||
* `rootClientId`.
|
||
*
|
||
* @param {Object} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {Object} Updated state.
|
||
*/
|
||
|
||
function insertionPoint() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'SHOW_INSERTION_POINT':
|
||
var rootClientId = action.rootClientId,
|
||
index = action.index;
|
||
return {
|
||
rootClientId: rootClientId,
|
||
index: index
|
||
};
|
||
|
||
case 'HIDE_INSERTION_POINT':
|
||
return null;
|
||
}
|
||
|
||
return state;
|
||
}
|
||
/**
|
||
* Reducer returning whether the post blocks match the defined template or not.
|
||
*
|
||
* @param {Object} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {boolean} Updated state.
|
||
*/
|
||
|
||
function reducer_template() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
||
isValid: true
|
||
};
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'SET_TEMPLATE_VALIDITY':
|
||
return Object(objectSpread["a" /* default */])({}, state, {
|
||
isValid: action.isValid
|
||
});
|
||
}
|
||
|
||
return state;
|
||
}
|
||
/**
|
||
* Reducer returning the editor setting.
|
||
*
|
||
* @param {Object} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {Object} Updated state.
|
||
*/
|
||
|
||
function reducer_settings() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SETTINGS_DEFAULTS;
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'UPDATE_SETTINGS':
|
||
return Object(objectSpread["a" /* default */])({}, state, action.settings);
|
||
}
|
||
|
||
return state;
|
||
}
|
||
/**
|
||
* Reducer returning the user preferences.
|
||
*
|
||
* @param {Object} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {string} Updated state.
|
||
*/
|
||
|
||
function preferences() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : PREFERENCES_DEFAULTS;
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
case 'INSERT_BLOCKS':
|
||
case 'REPLACE_BLOCKS':
|
||
return action.blocks.reduce(function (prevState, block) {
|
||
var id = block.name;
|
||
var insert = {
|
||
name: block.name
|
||
};
|
||
|
||
if (Object(external_this_wp_blocks_["isReusableBlock"])(block)) {
|
||
insert.ref = block.attributes.ref;
|
||
id += '/' + block.attributes.ref;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, prevState, {
|
||
insertUsage: Object(objectSpread["a" /* default */])({}, prevState.insertUsage, Object(defineProperty["a" /* default */])({}, id, {
|
||
time: action.time,
|
||
count: prevState.insertUsage[id] ? prevState.insertUsage[id].count + 1 : 1,
|
||
insert: insert
|
||
}))
|
||
});
|
||
}, state);
|
||
}
|
||
|
||
return state;
|
||
}
|
||
/**
|
||
* Reducer returning an object where each key is a block client ID, its value
|
||
* representing the settings for its nested blocks.
|
||
*
|
||
* @param {Object} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {Object} Updated state.
|
||
*/
|
||
|
||
var reducer_blockListSettings = function blockListSettings() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
switch (action.type) {
|
||
// Even if the replaced blocks have the same client ID, our logic
|
||
// should correct the state.
|
||
case 'REPLACE_BLOCKS':
|
||
case 'REMOVE_BLOCKS':
|
||
{
|
||
return Object(external_lodash_["omit"])(state, action.clientIds);
|
||
}
|
||
|
||
case 'UPDATE_BLOCK_LIST_SETTINGS':
|
||
{
|
||
var clientId = action.clientId;
|
||
|
||
if (!action.settings) {
|
||
if (state.hasOwnProperty(clientId)) {
|
||
return Object(external_lodash_["omit"])(state, clientId);
|
||
}
|
||
|
||
return state;
|
||
}
|
||
|
||
if (Object(external_lodash_["isEqual"])(state[clientId], action.settings)) {
|
||
return state;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, clientId, action.settings));
|
||
}
|
||
}
|
||
|
||
return state;
|
||
};
|
||
/**
|
||
* Reducer returning whether the navigation mode is enabled or not.
|
||
*
|
||
* @param {string} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {string} Updated state.
|
||
*/
|
||
|
||
function reducer_isNavigationMode() {
|
||
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
||
var action = arguments.length > 1 ? arguments[1] : undefined;
|
||
|
||
if (action.type === 'SET_NAVIGATION_MODE') {
|
||
return action.isNavigationMode;
|
||
}
|
||
|
||
return state;
|
||
}
|
||
/**
|
||
* Reducer return an updated state representing the most recent block attribute
|
||
* update. The state is structured as an object where the keys represent the
|
||
* client IDs of blocks, the values a subset of attributes from the most recent
|
||
* block update. The state is always reset to null if the last action is
|
||
* anything other than an attributes update.
|
||
*
|
||
* @param {Object<string,Object>} state Current state.
|
||
* @param {Object} action Action object.
|
||
*
|
||
* @return {[string,Object]} Updated state.
|
||
*/
|
||
|
||
function lastBlockAttributesChange(state, action) {
|
||
switch (action.type) {
|
||
case 'UPDATE_BLOCK':
|
||
if (!action.updates.attributes) {
|
||
break;
|
||
}
|
||
|
||
return Object(defineProperty["a" /* default */])({}, action.clientId, action.updates.attributes);
|
||
|
||
case 'UPDATE_BLOCK_ATTRIBUTES':
|
||
return Object(defineProperty["a" /* default */])({}, action.clientId, action.attributes);
|
||
}
|
||
|
||
return null;
|
||
}
|
||
/**
|
||
* Reducer returning automatic change state.
|
||
*
|
||
* @param {boolean} state Current state.
|
||
* @param {Object} action Dispatched action.
|
||
*
|
||
* @return {boolean} Updated state.
|
||
*/
|
||
|
||
function reducer_didAutomaticChange(state, action) {
|
||
return action.type === 'MARK_AUTOMATIC_CHANGE';
|
||
}
|
||
/* harmony default export */ var store_reducer = (Object(external_this_wp_data_["combineReducers"])({
|
||
blocks: reducer_blocks,
|
||
isTyping: reducer_isTyping,
|
||
isCaretWithinFormattedText: reducer_isCaretWithinFormattedText,
|
||
blockSelection: blockSelection,
|
||
blocksMode: blocksMode,
|
||
blockListSettings: reducer_blockListSettings,
|
||
insertionPoint: insertionPoint,
|
||
template: reducer_template,
|
||
settings: reducer_settings,
|
||
preferences: preferences,
|
||
lastBlockAttributesChange: lastBlockAttributesChange,
|
||
isNavigationMode: reducer_isNavigationMode,
|
||
didAutomaticChange: reducer_didAutomaticChange
|
||
}));
|
||
|
||
// EXTERNAL MODULE: ./node_modules/refx/refx.js
|
||
var refx = __webpack_require__(76);
|
||
var refx_default = /*#__PURE__*/__webpack_require__.n(refx);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/redux-multi/lib/index.js
|
||
var redux_multi_lib = __webpack_require__(226);
|
||
var redux_multi_lib_default = /*#__PURE__*/__webpack_require__.n(redux_multi_lib);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","a11y"]}
|
||
var external_this_wp_a11y_ = __webpack_require__(46);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js
|
||
var regenerator = __webpack_require__(20);
|
||
var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/controls.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Calls a selector using the current state.
|
||
*
|
||
* @param {string} storeName Store name.
|
||
* @param {string} selectorName Selector name.
|
||
* @param {Array} args Selector arguments.
|
||
*
|
||
* @return {Object} control descriptor.
|
||
*/
|
||
|
||
function controls_select(storeName, selectorName) {
|
||
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
||
args[_key - 2] = arguments[_key];
|
||
}
|
||
|
||
return {
|
||
type: 'SELECT',
|
||
storeName: storeName,
|
||
selectorName: selectorName,
|
||
args: args
|
||
};
|
||
}
|
||
var controls_controls = {
|
||
SELECT: Object(external_this_wp_data_["createRegistryControl"])(function (registry) {
|
||
return function (_ref) {
|
||
var _registry$select;
|
||
|
||
var storeName = _ref.storeName,
|
||
selectorName = _ref.selectorName,
|
||
args = _ref.args;
|
||
return (_registry$select = registry.select(storeName))[selectorName].apply(_registry$select, Object(toConsumableArray["a" /* default */])(args));
|
||
};
|
||
})
|
||
};
|
||
/* harmony default export */ var store_controls = (controls_controls);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/actions.js
|
||
|
||
|
||
|
||
var _marked =
|
||
/*#__PURE__*/
|
||
regenerator_default.a.mark(ensureDefaultBlock),
|
||
_marked2 =
|
||
/*#__PURE__*/
|
||
regenerator_default.a.mark(selectPreviousBlock),
|
||
_marked3 =
|
||
/*#__PURE__*/
|
||
regenerator_default.a.mark(selectNextBlock),
|
||
_marked4 =
|
||
/*#__PURE__*/
|
||
regenerator_default.a.mark(actions_replaceBlocks),
|
||
_marked5 =
|
||
/*#__PURE__*/
|
||
regenerator_default.a.mark(moveBlockToPosition),
|
||
_marked6 =
|
||
/*#__PURE__*/
|
||
regenerator_default.a.mark(actions_insertBlocks),
|
||
_marked7 =
|
||
/*#__PURE__*/
|
||
regenerator_default.a.mark(actions_removeBlocks);
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Generator which will yield a default block insert action if there
|
||
* are no other blocks at the root of the editor. This generator should be used
|
||
* in actions which may result in no blocks remaining in the editor (removal,
|
||
* replacement, etc).
|
||
*/
|
||
|
||
function ensureDefaultBlock() {
|
||
var count;
|
||
return regenerator_default.a.wrap(function ensureDefaultBlock$(_context) {
|
||
while (1) {
|
||
switch (_context.prev = _context.next) {
|
||
case 0:
|
||
_context.next = 2;
|
||
return controls_select('core/block-editor', 'getBlockCount');
|
||
|
||
case 2:
|
||
count = _context.sent;
|
||
|
||
if (!(count === 0)) {
|
||
_context.next = 6;
|
||
break;
|
||
}
|
||
|
||
_context.next = 6;
|
||
return actions_insertDefaultBlock();
|
||
|
||
case 6:
|
||
case "end":
|
||
return _context.stop();
|
||
}
|
||
}
|
||
}, _marked);
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that blocks state should be
|
||
* reset to the specified array of blocks, taking precedence over any other
|
||
* content reflected as an edit in state.
|
||
*
|
||
* @param {Array} blocks Array of blocks.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
|
||
function resetBlocks(blocks) {
|
||
return {
|
||
type: 'RESET_BLOCKS',
|
||
blocks: blocks
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that blocks have been received.
|
||
* Unlike resetBlocks, these should be appended to the existing known set, not
|
||
* replacing.
|
||
*
|
||
* @param {Object[]} blocks Array of block objects.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function receiveBlocks(blocks) {
|
||
return {
|
||
type: 'RECEIVE_BLOCKS',
|
||
blocks: blocks
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the block attributes with
|
||
* the specified client ID has been updated.
|
||
*
|
||
* @param {string} clientId Block client ID.
|
||
* @param {Object} attributes Block attributes to be merged.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_updateBlockAttributes(clientId, attributes) {
|
||
return {
|
||
type: 'UPDATE_BLOCK_ATTRIBUTES',
|
||
clientId: clientId,
|
||
attributes: attributes
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the block with the
|
||
* specified client ID has been updated.
|
||
*
|
||
* @param {string} clientId Block client ID.
|
||
* @param {Object} updates Block attributes to be merged.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function updateBlock(clientId, updates) {
|
||
return {
|
||
type: 'UPDATE_BLOCK',
|
||
clientId: clientId,
|
||
updates: updates
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the block with the
|
||
* specified client ID has been selected, optionally accepting a position
|
||
* value reflecting its selection directionality. An initialPosition of -1
|
||
* reflects a reverse selection.
|
||
*
|
||
* @param {string} clientId Block client ID.
|
||
* @param {?number} initialPosition Optional initial position. Pass as -1 to
|
||
* reflect reverse selection.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_selectBlock(clientId) {
|
||
var initialPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
||
return {
|
||
type: 'SELECT_BLOCK',
|
||
initialPosition: initialPosition,
|
||
clientId: clientId
|
||
};
|
||
}
|
||
/**
|
||
* Yields action objects used in signalling that the block preceding the given
|
||
* clientId should be selected.
|
||
*
|
||
* @param {string} clientId Block client ID.
|
||
*/
|
||
|
||
function selectPreviousBlock(clientId) {
|
||
var previousBlockClientId;
|
||
return regenerator_default.a.wrap(function selectPreviousBlock$(_context2) {
|
||
while (1) {
|
||
switch (_context2.prev = _context2.next) {
|
||
case 0:
|
||
_context2.next = 2;
|
||
return controls_select('core/block-editor', 'getPreviousBlockClientId', clientId);
|
||
|
||
case 2:
|
||
previousBlockClientId = _context2.sent;
|
||
|
||
if (!previousBlockClientId) {
|
||
_context2.next = 6;
|
||
break;
|
||
}
|
||
|
||
_context2.next = 6;
|
||
return actions_selectBlock(previousBlockClientId, -1);
|
||
|
||
case 6:
|
||
case "end":
|
||
return _context2.stop();
|
||
}
|
||
}
|
||
}, _marked2);
|
||
}
|
||
/**
|
||
* Yields action objects used in signalling that the block following the given
|
||
* clientId should be selected.
|
||
*
|
||
* @param {string} clientId Block client ID.
|
||
*/
|
||
|
||
function selectNextBlock(clientId) {
|
||
var nextBlockClientId;
|
||
return regenerator_default.a.wrap(function selectNextBlock$(_context3) {
|
||
while (1) {
|
||
switch (_context3.prev = _context3.next) {
|
||
case 0:
|
||
_context3.next = 2;
|
||
return controls_select('core/block-editor', 'getNextBlockClientId', clientId);
|
||
|
||
case 2:
|
||
nextBlockClientId = _context3.sent;
|
||
|
||
if (!nextBlockClientId) {
|
||
_context3.next = 6;
|
||
break;
|
||
}
|
||
|
||
_context3.next = 6;
|
||
return actions_selectBlock(nextBlockClientId);
|
||
|
||
case 6:
|
||
case "end":
|
||
return _context3.stop();
|
||
}
|
||
}
|
||
}, _marked3);
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that a block multi-selection has started.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function startMultiSelect() {
|
||
return {
|
||
type: 'START_MULTI_SELECT'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that block multi-selection stopped.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function stopMultiSelect() {
|
||
return {
|
||
type: 'STOP_MULTI_SELECT'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that block multi-selection changed.
|
||
*
|
||
* @param {string} start First block of the multi selection.
|
||
* @param {string} end Last block of the multiselection.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_multiSelect(start, end) {
|
||
return {
|
||
type: 'MULTI_SELECT',
|
||
start: start,
|
||
end: end
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the block selection is cleared.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function clearSelectedBlock() {
|
||
return {
|
||
type: 'CLEAR_SELECTED_BLOCK'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object that enables or disables block selection.
|
||
*
|
||
* @param {boolean} [isSelectionEnabled=true] Whether block selection should
|
||
* be enabled.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_toggleSelection() {
|
||
var isSelectionEnabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
||
return {
|
||
type: 'TOGGLE_SELECTION',
|
||
isSelectionEnabled: isSelectionEnabled
|
||
};
|
||
}
|
||
|
||
function getBlocksWithDefaultStylesApplied(blocks, blockEditorSettings) {
|
||
var preferredStyleVariations = Object(external_lodash_["get"])(blockEditorSettings, ['__experimentalPreferredStyleVariations', 'value'], {});
|
||
return blocks.map(function (block) {
|
||
var blockName = block.name;
|
||
|
||
if (!preferredStyleVariations[blockName]) {
|
||
return block;
|
||
}
|
||
|
||
var className = Object(external_lodash_["get"])(block, ['attributes', 'className']);
|
||
|
||
if (Object(external_lodash_["includes"])(className, 'is-style-')) {
|
||
return block;
|
||
}
|
||
|
||
var _block$attributes = block.attributes,
|
||
attributes = _block$attributes === void 0 ? {} : _block$attributes;
|
||
var blockStyle = preferredStyleVariations[blockName];
|
||
return Object(objectSpread["a" /* default */])({}, block, {
|
||
attributes: Object(objectSpread["a" /* default */])({}, attributes, {
|
||
className: "".concat(className || '', " is-style-").concat(blockStyle).trim()
|
||
})
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* Returns an action object signalling that a blocks should be replaced with
|
||
* one or more replacement blocks.
|
||
*
|
||
* @param {(string|string[])} clientIds Block client ID(s) to replace.
|
||
* @param {(Object|Object[])} blocks Replacement block(s).
|
||
* @param {number} indexToSelect Index of replacement block to
|
||
* select.
|
||
*
|
||
* @yield {Object} Action object.
|
||
*/
|
||
|
||
|
||
function actions_replaceBlocks(clientIds, blocks, indexToSelect) {
|
||
var rootClientId, index, block, canInsertBlock;
|
||
return regenerator_default.a.wrap(function replaceBlocks$(_context4) {
|
||
while (1) {
|
||
switch (_context4.prev = _context4.next) {
|
||
case 0:
|
||
clientIds = Object(external_lodash_["castArray"])(clientIds);
|
||
_context4.t0 = getBlocksWithDefaultStylesApplied;
|
||
_context4.t1 = Object(external_lodash_["castArray"])(blocks);
|
||
_context4.next = 5;
|
||
return controls_select('core/block-editor', 'getSettings');
|
||
|
||
case 5:
|
||
_context4.t2 = _context4.sent;
|
||
blocks = (0, _context4.t0)(_context4.t1, _context4.t2);
|
||
_context4.next = 9;
|
||
return controls_select('core/block-editor', 'getBlockRootClientId', Object(external_lodash_["first"])(clientIds));
|
||
|
||
case 9:
|
||
rootClientId = _context4.sent;
|
||
index = 0;
|
||
|
||
case 11:
|
||
if (!(index < blocks.length)) {
|
||
_context4.next = 21;
|
||
break;
|
||
}
|
||
|
||
block = blocks[index];
|
||
_context4.next = 15;
|
||
return controls_select('core/block-editor', 'canInsertBlockType', block.name, rootClientId);
|
||
|
||
case 15:
|
||
canInsertBlock = _context4.sent;
|
||
|
||
if (canInsertBlock) {
|
||
_context4.next = 18;
|
||
break;
|
||
}
|
||
|
||
return _context4.abrupt("return");
|
||
|
||
case 18:
|
||
index++;
|
||
_context4.next = 11;
|
||
break;
|
||
|
||
case 21:
|
||
_context4.next = 23;
|
||
return {
|
||
type: 'REPLACE_BLOCKS',
|
||
clientIds: clientIds,
|
||
blocks: blocks,
|
||
time: Date.now(),
|
||
indexToSelect: indexToSelect
|
||
};
|
||
|
||
case 23:
|
||
return _context4.delegateYield(ensureDefaultBlock(), "t3", 24);
|
||
|
||
case 24:
|
||
case "end":
|
||
return _context4.stop();
|
||
}
|
||
}
|
||
}, _marked4);
|
||
}
|
||
/**
|
||
* Returns an action object signalling that a single block should be replaced
|
||
* with one or more replacement blocks.
|
||
*
|
||
* @param {(string|string[])} clientId Block client ID to replace.
|
||
* @param {(Object|Object[])} block Replacement block(s).
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function replaceBlock(clientId, block) {
|
||
return actions_replaceBlocks(clientId, block);
|
||
}
|
||
/**
|
||
* Higher-order action creator which, given the action type to dispatch creates
|
||
* an action creator for managing block movement.
|
||
*
|
||
* @param {string} type Action type to dispatch.
|
||
*
|
||
* @return {Function} Action creator.
|
||
*/
|
||
|
||
function createOnMove(type) {
|
||
return function (clientIds, rootClientId) {
|
||
return {
|
||
clientIds: Object(external_lodash_["castArray"])(clientIds),
|
||
type: type,
|
||
rootClientId: rootClientId
|
||
};
|
||
};
|
||
}
|
||
|
||
var actions_moveBlocksDown = createOnMove('MOVE_BLOCKS_DOWN');
|
||
var actions_moveBlocksUp = createOnMove('MOVE_BLOCKS_UP');
|
||
/**
|
||
* Returns an action object signalling that an indexed block should be moved
|
||
* to a new index.
|
||
*
|
||
* @param {?string} clientId The client ID of the block.
|
||
* @param {?string} fromRootClientId Root client ID source.
|
||
* @param {?string} toRootClientId Root client ID destination.
|
||
* @param {number} index The index to move the block into.
|
||
*
|
||
* @yield {Object} Action object.
|
||
*/
|
||
|
||
function moveBlockToPosition(clientId) {
|
||
var fromRootClientId,
|
||
toRootClientId,
|
||
index,
|
||
templateLock,
|
||
action,
|
||
blockName,
|
||
canInsertBlock,
|
||
_args5 = arguments;
|
||
return regenerator_default.a.wrap(function moveBlockToPosition$(_context5) {
|
||
while (1) {
|
||
switch (_context5.prev = _context5.next) {
|
||
case 0:
|
||
fromRootClientId = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : '';
|
||
toRootClientId = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : '';
|
||
index = _args5.length > 3 ? _args5[3] : undefined;
|
||
_context5.next = 5;
|
||
return controls_select('core/block-editor', 'getTemplateLock', fromRootClientId);
|
||
|
||
case 5:
|
||
templateLock = _context5.sent;
|
||
|
||
if (!(templateLock === 'all')) {
|
||
_context5.next = 8;
|
||
break;
|
||
}
|
||
|
||
return _context5.abrupt("return");
|
||
|
||
case 8:
|
||
action = {
|
||
type: 'MOVE_BLOCK_TO_POSITION',
|
||
fromRootClientId: fromRootClientId,
|
||
toRootClientId: toRootClientId,
|
||
clientId: clientId,
|
||
index: index
|
||
}; // If moving inside the same root block the move is always possible.
|
||
|
||
if (!(fromRootClientId === toRootClientId)) {
|
||
_context5.next = 13;
|
||
break;
|
||
}
|
||
|
||
_context5.next = 12;
|
||
return action;
|
||
|
||
case 12:
|
||
return _context5.abrupt("return");
|
||
|
||
case 13:
|
||
if (!(templateLock === 'insert')) {
|
||
_context5.next = 15;
|
||
break;
|
||
}
|
||
|
||
return _context5.abrupt("return");
|
||
|
||
case 15:
|
||
_context5.next = 17;
|
||
return controls_select('core/block-editor', 'getBlockName', clientId);
|
||
|
||
case 17:
|
||
blockName = _context5.sent;
|
||
_context5.next = 20;
|
||
return controls_select('core/block-editor', 'canInsertBlockType', blockName, toRootClientId);
|
||
|
||
case 20:
|
||
canInsertBlock = _context5.sent;
|
||
|
||
if (!canInsertBlock) {
|
||
_context5.next = 24;
|
||
break;
|
||
}
|
||
|
||
_context5.next = 24;
|
||
return action;
|
||
|
||
case 24:
|
||
case "end":
|
||
return _context5.stop();
|
||
}
|
||
}
|
||
}, _marked5);
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that a single block should be
|
||
* inserted, optionally at a specific index respective a root block list.
|
||
*
|
||
* @param {Object} block Block object to insert.
|
||
* @param {?number} index Index at which block should be inserted.
|
||
* @param {?string} rootClientId Optional root client ID of block list on which to insert.
|
||
* @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to true.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_insertBlock(block, index, rootClientId) {
|
||
var updateSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
||
return actions_insertBlocks([block], index, rootClientId, updateSelection);
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that an array of blocks should
|
||
* be inserted, optionally at a specific index respective a root block list.
|
||
*
|
||
* @param {Object[]} blocks Block objects to insert.
|
||
* @param {?number} index Index at which block should be inserted.
|
||
* @param {?string} rootClientId Optional root client ID of block list on which to insert.
|
||
* @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to true.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_insertBlocks(blocks, index, rootClientId) {
|
||
var updateSelection,
|
||
allowedBlocks,
|
||
_iteratorNormalCompletion,
|
||
_didIteratorError,
|
||
_iteratorError,
|
||
_iterator,
|
||
_step,
|
||
block,
|
||
isValid,
|
||
_args6 = arguments;
|
||
|
||
return regenerator_default.a.wrap(function insertBlocks$(_context6) {
|
||
while (1) {
|
||
switch (_context6.prev = _context6.next) {
|
||
case 0:
|
||
updateSelection = _args6.length > 3 && _args6[3] !== undefined ? _args6[3] : true;
|
||
_context6.t0 = getBlocksWithDefaultStylesApplied;
|
||
_context6.t1 = Object(external_lodash_["castArray"])(blocks);
|
||
_context6.next = 5;
|
||
return controls_select('core/block-editor', 'getSettings');
|
||
|
||
case 5:
|
||
_context6.t2 = _context6.sent;
|
||
blocks = (0, _context6.t0)(_context6.t1, _context6.t2);
|
||
allowedBlocks = [];
|
||
_iteratorNormalCompletion = true;
|
||
_didIteratorError = false;
|
||
_iteratorError = undefined;
|
||
_context6.prev = 11;
|
||
_iterator = blocks[Symbol.iterator]();
|
||
|
||
case 13:
|
||
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
|
||
_context6.next = 22;
|
||
break;
|
||
}
|
||
|
||
block = _step.value;
|
||
_context6.next = 17;
|
||
return controls_select('core/block-editor', 'canInsertBlockType', block.name, rootClientId);
|
||
|
||
case 17:
|
||
isValid = _context6.sent;
|
||
|
||
if (isValid) {
|
||
allowedBlocks.push(block);
|
||
}
|
||
|
||
case 19:
|
||
_iteratorNormalCompletion = true;
|
||
_context6.next = 13;
|
||
break;
|
||
|
||
case 22:
|
||
_context6.next = 28;
|
||
break;
|
||
|
||
case 24:
|
||
_context6.prev = 24;
|
||
_context6.t3 = _context6["catch"](11);
|
||
_didIteratorError = true;
|
||
_iteratorError = _context6.t3;
|
||
|
||
case 28:
|
||
_context6.prev = 28;
|
||
_context6.prev = 29;
|
||
|
||
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
||
_iterator.return();
|
||
}
|
||
|
||
case 31:
|
||
_context6.prev = 31;
|
||
|
||
if (!_didIteratorError) {
|
||
_context6.next = 34;
|
||
break;
|
||
}
|
||
|
||
throw _iteratorError;
|
||
|
||
case 34:
|
||
return _context6.finish(31);
|
||
|
||
case 35:
|
||
return _context6.finish(28);
|
||
|
||
case 36:
|
||
if (!allowedBlocks.length) {
|
||
_context6.next = 38;
|
||
break;
|
||
}
|
||
|
||
return _context6.abrupt("return", {
|
||
type: 'INSERT_BLOCKS',
|
||
blocks: allowedBlocks,
|
||
index: index,
|
||
rootClientId: rootClientId,
|
||
time: Date.now(),
|
||
updateSelection: updateSelection
|
||
});
|
||
|
||
case 38:
|
||
case "end":
|
||
return _context6.stop();
|
||
}
|
||
}
|
||
}, _marked6, null, [[11, 24, 28, 36], [29,, 31, 35]]);
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the insertion point should
|
||
* be shown.
|
||
*
|
||
* @param {?string} rootClientId Optional root client ID of block list on
|
||
* which to insert.
|
||
* @param {?number} index Index at which block should be inserted.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_showInsertionPoint(rootClientId, index) {
|
||
return {
|
||
type: 'SHOW_INSERTION_POINT',
|
||
rootClientId: rootClientId,
|
||
index: index
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object hiding the insertion point.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_hideInsertionPoint() {
|
||
return {
|
||
type: 'HIDE_INSERTION_POINT'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object resetting the template validity.
|
||
*
|
||
* @param {boolean} isValid template validity flag.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function setTemplateValidity(isValid) {
|
||
return {
|
||
type: 'SET_TEMPLATE_VALIDITY',
|
||
isValid: isValid
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object synchronize the template with the list of blocks
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function synchronizeTemplate() {
|
||
return {
|
||
type: 'SYNCHRONIZE_TEMPLATE'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that two blocks should be merged
|
||
*
|
||
* @param {string} firstBlockClientId Client ID of the first block to merge.
|
||
* @param {string} secondBlockClientId Client ID of the second block to merge.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_mergeBlocks(firstBlockClientId, secondBlockClientId) {
|
||
return {
|
||
type: 'MERGE_BLOCKS',
|
||
blocks: [firstBlockClientId, secondBlockClientId]
|
||
};
|
||
}
|
||
/**
|
||
* Yields action objects used in signalling that the blocks corresponding to
|
||
* the set of specified client IDs are to be removed.
|
||
*
|
||
* @param {string|string[]} clientIds Client IDs of blocks to remove.
|
||
* @param {boolean} selectPrevious True if the previous block should be
|
||
* selected when a block is removed.
|
||
*/
|
||
|
||
function actions_removeBlocks(clientIds) {
|
||
var selectPrevious,
|
||
_args7 = arguments;
|
||
return regenerator_default.a.wrap(function removeBlocks$(_context7) {
|
||
while (1) {
|
||
switch (_context7.prev = _context7.next) {
|
||
case 0:
|
||
selectPrevious = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : true;
|
||
clientIds = Object(external_lodash_["castArray"])(clientIds);
|
||
|
||
if (!selectPrevious) {
|
||
_context7.next = 5;
|
||
break;
|
||
}
|
||
|
||
_context7.next = 5;
|
||
return selectPreviousBlock(clientIds[0]);
|
||
|
||
case 5:
|
||
_context7.next = 7;
|
||
return {
|
||
type: 'REMOVE_BLOCKS',
|
||
clientIds: clientIds
|
||
};
|
||
|
||
case 7:
|
||
return _context7.delegateYield(ensureDefaultBlock(), "t0", 8);
|
||
|
||
case 8:
|
||
case "end":
|
||
return _context7.stop();
|
||
}
|
||
}
|
||
}, _marked7);
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the block with the
|
||
* specified client ID is to be removed.
|
||
*
|
||
* @param {string} clientId Client ID of block to remove.
|
||
* @param {boolean} selectPrevious True if the previous block should be
|
||
* selected when a block is removed.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_removeBlock(clientId, selectPrevious) {
|
||
return actions_removeBlocks([clientId], selectPrevious);
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the inner blocks with the
|
||
* specified client ID should be replaced.
|
||
*
|
||
* @param {string} rootClientId Client ID of the block whose InnerBlocks will re replaced.
|
||
* @param {Object[]} blocks Block objects to insert as new InnerBlocks
|
||
* @param {?boolean} updateSelection If true block selection will be updated. If false, block selection will not change. Defaults to true.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_replaceInnerBlocks(rootClientId, blocks) {
|
||
var updateSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
||
return {
|
||
type: 'REPLACE_INNER_BLOCKS',
|
||
rootClientId: rootClientId,
|
||
blocks: blocks,
|
||
updateSelection: updateSelection,
|
||
time: Date.now()
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used to toggle the block editing mode between
|
||
* visual and HTML modes.
|
||
*
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function toggleBlockMode(clientId) {
|
||
return {
|
||
type: 'TOGGLE_BLOCK_MODE',
|
||
clientId: clientId
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the user has begun to type.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function startTyping() {
|
||
return {
|
||
type: 'START_TYPING'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the user has stopped typing.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function stopTyping() {
|
||
return {
|
||
type: 'STOP_TYPING'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the caret has entered formatted text.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function enterFormattedText() {
|
||
return {
|
||
type: 'ENTER_FORMATTED_TEXT'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the user caret has exited formatted text.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function exitFormattedText() {
|
||
return {
|
||
type: 'EXIT_FORMATTED_TEXT'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the user caret has changed
|
||
* position.
|
||
*
|
||
* @param {string} clientId The selected block client ID.
|
||
* @param {string} attributeKey The selected block attribute key.
|
||
* @param {number} startOffset The start offset.
|
||
* @param {number} endOffset The end offset.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function selectionChange(clientId, attributeKey, startOffset, endOffset) {
|
||
return {
|
||
type: 'SELECTION_CHANGE',
|
||
clientId: clientId,
|
||
attributeKey: attributeKey,
|
||
startOffset: startOffset,
|
||
endOffset: endOffset
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that a new block of the default
|
||
* type should be added to the block list.
|
||
*
|
||
* @param {?Object} attributes Optional attributes of the block to assign.
|
||
* @param {?string} rootClientId Optional root client ID of block list on which
|
||
* to append.
|
||
* @param {?number} index Optional index where to insert the default block
|
||
*
|
||
* @return {Object} Action object
|
||
*/
|
||
|
||
function actions_insertDefaultBlock(attributes, rootClientId, index) {
|
||
// Abort if there is no default block type (if it has been unregistered).
|
||
var defaultBlockName = Object(external_this_wp_blocks_["getDefaultBlockName"])();
|
||
|
||
if (!defaultBlockName) {
|
||
return;
|
||
}
|
||
|
||
var block = Object(external_this_wp_blocks_["createBlock"])(defaultBlockName, attributes);
|
||
return actions_insertBlock(block, index, rootClientId);
|
||
}
|
||
/**
|
||
* Returns an action object that changes the nested settings of a given block.
|
||
*
|
||
* @param {string} clientId Client ID of the block whose nested setting are
|
||
* being received.
|
||
* @param {Object} settings Object with the new settings for the nested block.
|
||
*
|
||
* @return {Object} Action object
|
||
*/
|
||
|
||
function updateBlockListSettings(clientId, settings) {
|
||
return {
|
||
type: 'UPDATE_BLOCK_LIST_SETTINGS',
|
||
clientId: clientId,
|
||
settings: settings
|
||
};
|
||
}
|
||
/*
|
||
* Returns an action object used in signalling that the block editor settings have been updated.
|
||
*
|
||
* @param {Object} settings Updated settings
|
||
*
|
||
* @return {Object} Action object
|
||
*/
|
||
|
||
function updateSettings(settings) {
|
||
return {
|
||
type: 'UPDATE_SETTINGS',
|
||
settings: settings
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that a temporary reusable blocks have been saved
|
||
* in order to switch its temporary id with the real id.
|
||
*
|
||
* @param {string} id Reusable block's id.
|
||
* @param {string} updatedId Updated block's id.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function __unstableSaveReusableBlock(id, updatedId) {
|
||
return {
|
||
type: 'SAVE_REUSABLE_BLOCK_SUCCESS',
|
||
id: id,
|
||
updatedId: updatedId
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the last block change should be marked explicitely as persistent.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function actions_unstableMarkLastChangeAsPersistent() {
|
||
return {
|
||
type: 'MARK_LAST_CHANGE_AS_PERSISTENT'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used in signalling that the last block change is
|
||
* an automatic change, meaning it was not performed by the user, and can be
|
||
* undone using the `Escape` and `Backspace` keys. This action must be called
|
||
* after the change was made, and any actions that are a consequence of it, so
|
||
* it is recommended to be called at the next idle period to ensure all
|
||
* selection changes have been recorded.
|
||
*
|
||
* @return {Object} Action object.
|
||
*/
|
||
|
||
function __unstableMarkAutomaticChange() {
|
||
return {
|
||
type: 'MARK_AUTOMATIC_CHANGE'
|
||
};
|
||
}
|
||
/**
|
||
* Returns an action object used to enable or disable the navigation mode.
|
||
*
|
||
* @param {string} isNavigationMode Enable/Disable navigation mode.
|
||
*
|
||
* @return {Object} Action object
|
||
*/
|
||
|
||
function actions_setNavigationMode() {
|
||
var isNavigationMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
||
return {
|
||
type: 'SET_NAVIGATION_MODE',
|
||
isNavigationMode: isNavigationMode
|
||
};
|
||
}
|
||
|
||
// EXTERNAL MODULE: ./node_modules/rememo/es/rememo.js
|
||
var rememo = __webpack_require__(36);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/selectors.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
// Module constants
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
|
||
var INSERTER_UTILITY_HIGH = 3;
|
||
/**
|
||
* @private
|
||
*/
|
||
|
||
var INSERTER_UTILITY_MEDIUM = 2;
|
||
/**
|
||
* @private
|
||
*/
|
||
|
||
var INSERTER_UTILITY_LOW = 1;
|
||
/**
|
||
* @private
|
||
*/
|
||
|
||
var INSERTER_UTILITY_NONE = 0;
|
||
var MILLISECONDS_PER_HOUR = 3600 * 1000;
|
||
var MILLISECONDS_PER_DAY = 24 * 3600 * 1000;
|
||
var MILLISECONDS_PER_WEEK = 7 * 24 * 3600 * 1000;
|
||
var templateIcon = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
viewBox: "0 0 24 24"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Rect"], {
|
||
x: "0",
|
||
fill: "none",
|
||
width: "24",
|
||
height: "24"
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["G"], null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M19 3H5c-1.105 0-2 .895-2 2v14c0 1.105.895 2 2 2h14c1.105 0 2-.895 2-2V5c0-1.105-.895-2-2-2zM6 6h5v5H6V6zm4.5 13C9.12 19 8 17.88 8 16.5S9.12 14 10.5 14s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5zm3-6l3-5 3 5h-6z"
|
||
})));
|
||
/**
|
||
* Shared reference to an empty array for cases where it is important to avoid
|
||
* returning a new array reference on every invocation, as in a connected or
|
||
* other pure component which performs `shouldComponentUpdate` check on props.
|
||
* This should be used as a last resort, since the normalized data should be
|
||
* maintained by the reducer result in state.
|
||
*
|
||
* @type {Array}
|
||
*/
|
||
|
||
var EMPTY_ARRAY = [];
|
||
/**
|
||
* Returns a block's name given its client ID, or null if no block exists with
|
||
* the client ID.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {string} Block name.
|
||
*/
|
||
|
||
function selectors_getBlockName(state, clientId) {
|
||
var block = state.blocks.byClientId[clientId];
|
||
return block ? block.name : null;
|
||
}
|
||
/**
|
||
* Returns whether a block is valid or not.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {boolean} Is Valid.
|
||
*/
|
||
|
||
function selectors_isBlockValid(state, clientId) {
|
||
var block = state.blocks.byClientId[clientId];
|
||
return !!block && block.isValid;
|
||
}
|
||
/**
|
||
* Returns a block's attributes given its client ID, or null if no block exists with
|
||
* the client ID.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {Object?} Block attributes.
|
||
*/
|
||
|
||
function getBlockAttributes(state, clientId) {
|
||
var block = state.blocks.byClientId[clientId];
|
||
|
||
if (!block) {
|
||
return null;
|
||
}
|
||
|
||
return state.blocks.attributes[clientId];
|
||
}
|
||
/**
|
||
* Returns a block given its client ID. This is a parsed copy of the block,
|
||
* containing its `blockName`, `clientId`, and current `attributes` state. This
|
||
* is not the block's registration settings, which must be retrieved from the
|
||
* blocks module registration store.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {Object} Parsed block object.
|
||
*/
|
||
|
||
var selectors_getBlock = Object(rememo["a" /* default */])(function (state, clientId) {
|
||
var block = state.blocks.byClientId[clientId];
|
||
|
||
if (!block) {
|
||
return null;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, block, {
|
||
attributes: getBlockAttributes(state, clientId),
|
||
innerBlocks: selectors_getBlocks(state, clientId)
|
||
});
|
||
}, function (state, clientId) {
|
||
return [// Normally, we'd have both `getBlockAttributes` dependancies and
|
||
// `getBlocks` (children) dependancies here but for performance reasons
|
||
// we use a denormalized cache key computed in the reducer that takes both
|
||
// the attributes and inner blocks into account. The value of the cache key
|
||
// is being changed whenever one of these dependencies is out of date.
|
||
state.blocks.cache[clientId]];
|
||
});
|
||
var selectors_unstableGetBlockWithoutInnerBlocks = Object(rememo["a" /* default */])(function (state, clientId) {
|
||
var block = state.blocks.byClientId[clientId];
|
||
|
||
if (!block) {
|
||
return null;
|
||
}
|
||
|
||
return Object(objectSpread["a" /* default */])({}, block, {
|
||
attributes: getBlockAttributes(state, clientId)
|
||
});
|
||
}, function (state, clientId) {
|
||
return [state.blocks.byClientId[clientId], state.blocks.attributes[clientId]];
|
||
});
|
||
/**
|
||
* Returns all block objects for the current post being edited as an array in
|
||
* the order they appear in the post.
|
||
*
|
||
* Note: It's important to memoize this selector to avoid return a new instance
|
||
* on each call
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {Object[]} Post blocks.
|
||
*/
|
||
|
||
var selectors_getBlocks = Object(rememo["a" /* default */])(function (state, rootClientId) {
|
||
return Object(external_lodash_["map"])(selectors_getBlockOrder(state, rootClientId), function (clientId) {
|
||
return selectors_getBlock(state, clientId);
|
||
});
|
||
}, function (state) {
|
||
return [state.blocks.byClientId, state.blocks.order, state.blocks.attributes];
|
||
});
|
||
/**
|
||
* Returns an array containing the clientIds of all descendants
|
||
* of the blocks given.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
* @param {Array} clientIds Array of blocks to inspect.
|
||
*
|
||
* @return {Array} ids of descendants.
|
||
*/
|
||
|
||
var selectors_getClientIdsOfDescendants = function getClientIdsOfDescendants(state, clientIds) {
|
||
return Object(external_lodash_["flatMap"])(clientIds, function (clientId) {
|
||
var descendants = selectors_getBlockOrder(state, clientId);
|
||
return [].concat(Object(toConsumableArray["a" /* default */])(descendants), Object(toConsumableArray["a" /* default */])(getClientIdsOfDescendants(state, descendants)));
|
||
});
|
||
};
|
||
/**
|
||
* Returns an array containing the clientIds of the top-level blocks
|
||
* and their descendants of any depth (for nested blocks).
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {Array} ids of top-level and descendant blocks.
|
||
*/
|
||
|
||
var getClientIdsWithDescendants = Object(rememo["a" /* default */])(function (state) {
|
||
var topLevelIds = selectors_getBlockOrder(state);
|
||
return [].concat(Object(toConsumableArray["a" /* default */])(topLevelIds), Object(toConsumableArray["a" /* default */])(selectors_getClientIdsOfDescendants(state, topLevelIds)));
|
||
}, function (state) {
|
||
return [state.blocks.order];
|
||
});
|
||
/**
|
||
* Returns the total number of blocks, or the total number of blocks with a specific name in a post.
|
||
* The number returned includes nested blocks.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
* @param {?string} blockName Optional block name, if specified only blocks of that type will be counted.
|
||
*
|
||
* @return {number} Number of blocks in the post, or number of blocks with name equal to blockName.
|
||
*/
|
||
|
||
var getGlobalBlockCount = Object(rememo["a" /* default */])(function (state, blockName) {
|
||
var clientIds = getClientIdsWithDescendants(state);
|
||
|
||
if (!blockName) {
|
||
return clientIds.length;
|
||
}
|
||
|
||
return Object(external_lodash_["reduce"])(clientIds, function (count, clientId) {
|
||
var block = state.blocks.byClientId[clientId];
|
||
return block.name === blockName ? count + 1 : count;
|
||
}, 0);
|
||
}, function (state) {
|
||
return [state.blocks.order, state.blocks.byClientId];
|
||
});
|
||
/**
|
||
* Given an array of block client IDs, returns the corresponding array of block
|
||
* objects.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string[]} clientIds Client IDs for which blocks are to be returned.
|
||
*
|
||
* @return {WPBlock[]} Block objects.
|
||
*/
|
||
|
||
var selectors_getBlocksByClientId = Object(rememo["a" /* default */])(function (state, clientIds) {
|
||
return Object(external_lodash_["map"])(Object(external_lodash_["castArray"])(clientIds), function (clientId) {
|
||
return selectors_getBlock(state, clientId);
|
||
});
|
||
}, function (state) {
|
||
return [state.blocks.byClientId, state.blocks.order, state.blocks.attributes];
|
||
});
|
||
/**
|
||
* Returns the number of blocks currently present in the post.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {number} Number of blocks in the post.
|
||
*/
|
||
|
||
function selectors_getBlockCount(state, rootClientId) {
|
||
return selectors_getBlockOrder(state, rootClientId).length;
|
||
}
|
||
/**
|
||
* @typedef {WPBlockSelection} A block selection object.
|
||
*
|
||
* @property {string} clientId The selected block client ID.
|
||
* @property {string} attributeKey The selected block attribute key.
|
||
* @property {number} offset The selected block attribute offset.
|
||
*/
|
||
|
||
/**
|
||
* Returns the current selection start block client ID, attribute key and text
|
||
* offset.
|
||
*
|
||
* @param {Object} state Block editor state.
|
||
*
|
||
* @return {WPBlockSelection} Selection start information.
|
||
*/
|
||
|
||
function getSelectionStart(state) {
|
||
return state.blockSelection.start;
|
||
}
|
||
/**
|
||
* Returns the current selection end block client ID, attribute key and text
|
||
* offset.
|
||
*
|
||
* @param {Object} state Block editor state.
|
||
*
|
||
* @return {WPBlockSelection} Selection end information.
|
||
*/
|
||
|
||
function getSelectionEnd(state) {
|
||
return state.blockSelection.end;
|
||
}
|
||
/**
|
||
* Returns the current block selection start. This value may be null, and it
|
||
* may represent either a singular block selection or multi-selection start.
|
||
* A selection is singular if its start and end match.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {?string} Client ID of block selection start.
|
||
*/
|
||
|
||
function getBlockSelectionStart(state) {
|
||
return state.blockSelection.start.clientId;
|
||
}
|
||
/**
|
||
* Returns the current block selection end. This value may be null, and it
|
||
* may represent either a singular block selection or multi-selection end.
|
||
* A selection is singular if its start and end match.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {?string} Client ID of block selection end.
|
||
*/
|
||
|
||
function getBlockSelectionEnd(state) {
|
||
return state.blockSelection.end.clientId;
|
||
}
|
||
/**
|
||
* Returns the number of blocks currently selected in the post.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {number} Number of blocks selected in the post.
|
||
*/
|
||
|
||
function selectors_getSelectedBlockCount(state) {
|
||
var multiSelectedBlockCount = getMultiSelectedBlockClientIds(state).length;
|
||
|
||
if (multiSelectedBlockCount) {
|
||
return multiSelectedBlockCount;
|
||
}
|
||
|
||
return state.blockSelection.start.clientId ? 1 : 0;
|
||
}
|
||
/**
|
||
* Returns true if there is a single selected block, or false otherwise.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {boolean} Whether a single block is selected.
|
||
*/
|
||
|
||
function hasSelectedBlock(state) {
|
||
var _state$blockSelection = state.blockSelection,
|
||
start = _state$blockSelection.start,
|
||
end = _state$blockSelection.end;
|
||
return !!start.clientId && start.clientId === end.clientId;
|
||
}
|
||
/**
|
||
* Returns the currently selected block client ID, or null if there is no
|
||
* selected block.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {?string} Selected block client ID.
|
||
*/
|
||
|
||
function selectors_getSelectedBlockClientId(state) {
|
||
var _state$blockSelection2 = state.blockSelection,
|
||
start = _state$blockSelection2.start,
|
||
end = _state$blockSelection2.end; // We need to check the block exists because the current blockSelection
|
||
// reducer doesn't take into account when blocks are reset via undo. To be
|
||
// removed when that's fixed.
|
||
|
||
return start.clientId && start.clientId === end.clientId && !!state.blocks.byClientId[start.clientId] ? start.clientId : null;
|
||
}
|
||
/**
|
||
* Returns the currently selected block, or null if there is no selected block.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {?Object} Selected block.
|
||
*/
|
||
|
||
function selectors_getSelectedBlock(state) {
|
||
var clientId = selectors_getSelectedBlockClientId(state);
|
||
return clientId ? selectors_getBlock(state, clientId) : null;
|
||
}
|
||
/**
|
||
* Given a block client ID, returns the root block from which the block is
|
||
* nested, an empty string for top-level blocks, or null if the block does not
|
||
* exist.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block from which to find root client ID.
|
||
*
|
||
* @return {?string} Root client ID, if exists
|
||
*/
|
||
|
||
function selectors_getBlockRootClientId(state, clientId) {
|
||
return state.blocks.parents[clientId] !== undefined ? state.blocks.parents[clientId] : null;
|
||
}
|
||
/**
|
||
* Given a block client ID, returns the root of the hierarchy from which the block is nested, return the block itself for root level blocks.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block from which to find root client ID.
|
||
*
|
||
* @return {string} Root client ID
|
||
*/
|
||
|
||
function getBlockHierarchyRootClientId(state, clientId) {
|
||
var current = clientId;
|
||
var parent;
|
||
|
||
do {
|
||
parent = current;
|
||
current = state.blocks.parents[current];
|
||
} while (current);
|
||
|
||
return parent;
|
||
}
|
||
/**
|
||
* Returns the client ID of the block adjacent one at the given reference
|
||
* startClientId and modifier directionality. Defaults start startClientId to
|
||
* the selected block, and direction as next block. Returns null if there is no
|
||
* adjacent block.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} startClientId Optional client ID of block from which to
|
||
* search.
|
||
* @param {?number} modifier Directionality multiplier (1 next, -1
|
||
* previous).
|
||
*
|
||
* @return {?string} Return the client ID of the block, or null if none exists.
|
||
*/
|
||
|
||
function getAdjacentBlockClientId(state, startClientId) {
|
||
var modifier = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
||
|
||
// Default to selected block.
|
||
if (startClientId === undefined) {
|
||
startClientId = selectors_getSelectedBlockClientId(state);
|
||
} // Try multi-selection starting at extent based on modifier.
|
||
|
||
|
||
if (startClientId === undefined) {
|
||
if (modifier < 0) {
|
||
startClientId = getFirstMultiSelectedBlockClientId(state);
|
||
} else {
|
||
startClientId = getLastMultiSelectedBlockClientId(state);
|
||
}
|
||
} // Validate working start client ID.
|
||
|
||
|
||
if (!startClientId) {
|
||
return null;
|
||
} // Retrieve start block root client ID, being careful to allow the falsey
|
||
// empty string top-level root by explicitly testing against null.
|
||
|
||
|
||
var rootClientId = selectors_getBlockRootClientId(state, startClientId);
|
||
|
||
if (rootClientId === null) {
|
||
return null;
|
||
}
|
||
|
||
var order = state.blocks.order;
|
||
var orderSet = order[rootClientId];
|
||
var index = orderSet.indexOf(startClientId);
|
||
var nextIndex = index + 1 * modifier; // Block was first in set and we're attempting to get previous.
|
||
|
||
if (nextIndex < 0) {
|
||
return null;
|
||
} // Block was last in set and we're attempting to get next.
|
||
|
||
|
||
if (nextIndex === orderSet.length) {
|
||
return null;
|
||
} // Assume incremented index is within the set.
|
||
|
||
|
||
return orderSet[nextIndex];
|
||
}
|
||
/**
|
||
* Returns the previous block's client ID from the given reference start ID.
|
||
* Defaults start to the selected block. Returns null if there is no previous
|
||
* block.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} startClientId Optional client ID of block from which to
|
||
* search.
|
||
*
|
||
* @return {?string} Adjacent block's client ID, or null if none exists.
|
||
*/
|
||
|
||
function getPreviousBlockClientId(state, startClientId) {
|
||
return getAdjacentBlockClientId(state, startClientId, -1);
|
||
}
|
||
/**
|
||
* Returns the next block's client ID from the given reference start ID.
|
||
* Defaults start to the selected block. Returns null if there is no next
|
||
* block.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} startClientId Optional client ID of block from which to
|
||
* search.
|
||
*
|
||
* @return {?string} Adjacent block's client ID, or null if none exists.
|
||
*/
|
||
|
||
function getNextBlockClientId(state, startClientId) {
|
||
return getAdjacentBlockClientId(state, startClientId, 1);
|
||
}
|
||
/**
|
||
* Returns the initial caret position for the selected block.
|
||
* This position is to used to position the caret properly when the selected block changes.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {?Object} Selected block.
|
||
*/
|
||
|
||
function selectors_getSelectedBlocksInitialCaretPosition(state) {
|
||
var _state$blockSelection3 = state.blockSelection,
|
||
start = _state$blockSelection3.start,
|
||
end = _state$blockSelection3.end;
|
||
|
||
if (start.clientId !== end.clientId || !start.clientId) {
|
||
return null;
|
||
}
|
||
|
||
return state.blockSelection.initialPosition;
|
||
}
|
||
/**
|
||
* Returns the current selection set of block client IDs (multiselection or single selection).
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {Array} Multi-selected block client IDs.
|
||
*/
|
||
|
||
var selectors_getSelectedBlockClientIds = Object(rememo["a" /* default */])(function (state) {
|
||
var _state$blockSelection4 = state.blockSelection,
|
||
start = _state$blockSelection4.start,
|
||
end = _state$blockSelection4.end;
|
||
|
||
if (start.clientId === undefined || end.clientId === undefined) {
|
||
return EMPTY_ARRAY;
|
||
}
|
||
|
||
if (start.clientId === end.clientId) {
|
||
return [start.clientId];
|
||
} // Retrieve root client ID to aid in retrieving relevant nested block
|
||
// order, being careful to allow the falsey empty string top-level root
|
||
// by explicitly testing against null.
|
||
|
||
|
||
var rootClientId = selectors_getBlockRootClientId(state, start.clientId);
|
||
|
||
if (rootClientId === null) {
|
||
return EMPTY_ARRAY;
|
||
}
|
||
|
||
var blockOrder = selectors_getBlockOrder(state, rootClientId);
|
||
var startIndex = blockOrder.indexOf(start.clientId);
|
||
var endIndex = blockOrder.indexOf(end.clientId);
|
||
|
||
if (startIndex > endIndex) {
|
||
return blockOrder.slice(endIndex, startIndex + 1);
|
||
}
|
||
|
||
return blockOrder.slice(startIndex, endIndex + 1);
|
||
}, function (state) {
|
||
return [state.blocks.order, state.blockSelection.start.clientId, state.blockSelection.end.clientId];
|
||
});
|
||
/**
|
||
* Returns the current multi-selection set of block client IDs, or an empty
|
||
* array if there is no multi-selection.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {Array} Multi-selected block client IDs.
|
||
*/
|
||
|
||
function getMultiSelectedBlockClientIds(state) {
|
||
var _state$blockSelection5 = state.blockSelection,
|
||
start = _state$blockSelection5.start,
|
||
end = _state$blockSelection5.end;
|
||
|
||
if (start.clientId === end.clientId) {
|
||
return EMPTY_ARRAY;
|
||
}
|
||
|
||
return selectors_getSelectedBlockClientIds(state);
|
||
}
|
||
/**
|
||
* Returns the current multi-selection set of blocks, or an empty array if
|
||
* there is no multi-selection.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {Array} Multi-selected block objects.
|
||
*/
|
||
|
||
var getMultiSelectedBlocks = Object(rememo["a" /* default */])(function (state) {
|
||
var multiSelectedBlockClientIds = getMultiSelectedBlockClientIds(state);
|
||
|
||
if (!multiSelectedBlockClientIds.length) {
|
||
return EMPTY_ARRAY;
|
||
}
|
||
|
||
return multiSelectedBlockClientIds.map(function (clientId) {
|
||
return selectors_getBlock(state, clientId);
|
||
});
|
||
}, function (state) {
|
||
return [].concat(Object(toConsumableArray["a" /* default */])(selectors_getSelectedBlockClientIds.getDependants(state)), [state.blocks.byClientId, state.blocks.order, state.blocks.attributes]);
|
||
});
|
||
/**
|
||
* Returns the client ID of the first block in the multi-selection set, or null
|
||
* if there is no multi-selection.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {?string} First block client ID in the multi-selection set.
|
||
*/
|
||
|
||
function getFirstMultiSelectedBlockClientId(state) {
|
||
return Object(external_lodash_["first"])(getMultiSelectedBlockClientIds(state)) || null;
|
||
}
|
||
/**
|
||
* Returns the client ID of the last block in the multi-selection set, or null
|
||
* if there is no multi-selection.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {?string} Last block client ID in the multi-selection set.
|
||
*/
|
||
|
||
function getLastMultiSelectedBlockClientId(state) {
|
||
return Object(external_lodash_["last"])(getMultiSelectedBlockClientIds(state)) || null;
|
||
}
|
||
/**
|
||
* Returns true if a multi-selection exists, and the block corresponding to the
|
||
* specified client ID is the first block of the multi-selection set, or false
|
||
* otherwise.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {boolean} Whether block is first in multi-selection.
|
||
*/
|
||
|
||
function selectors_isFirstMultiSelectedBlock(state, clientId) {
|
||
return getFirstMultiSelectedBlockClientId(state) === clientId;
|
||
}
|
||
/**
|
||
* Returns true if the client ID occurs within the block multi-selection, or
|
||
* false otherwise.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {boolean} Whether block is in multi-selection set.
|
||
*/
|
||
|
||
function selectors_isBlockMultiSelected(state, clientId) {
|
||
return getMultiSelectedBlockClientIds(state).indexOf(clientId) !== -1;
|
||
}
|
||
/**
|
||
* Returns true if an ancestor of the block is multi-selected, or false
|
||
* otherwise.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {boolean} Whether an ancestor of the block is in multi-selection
|
||
* set.
|
||
*/
|
||
|
||
var selectors_isAncestorMultiSelected = Object(rememo["a" /* default */])(function (state, clientId) {
|
||
var ancestorClientId = clientId;
|
||
var isMultiSelected = false;
|
||
|
||
while (ancestorClientId && !isMultiSelected) {
|
||
ancestorClientId = selectors_getBlockRootClientId(state, ancestorClientId);
|
||
isMultiSelected = selectors_isBlockMultiSelected(state, ancestorClientId);
|
||
}
|
||
|
||
return isMultiSelected;
|
||
}, function (state) {
|
||
return [state.blocks.order, state.blockSelection.start.clientId, state.blockSelection.end.clientId];
|
||
});
|
||
/**
|
||
* Returns the client ID of the block which begins the multi-selection set, or
|
||
* null if there is no multi-selection.
|
||
*
|
||
* This is not necessarily the first client ID in the selection.
|
||
*
|
||
* @see getFirstMultiSelectedBlockClientId
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {?string} Client ID of block beginning multi-selection.
|
||
*/
|
||
|
||
function getMultiSelectedBlocksStartClientId(state) {
|
||
var _state$blockSelection6 = state.blockSelection,
|
||
start = _state$blockSelection6.start,
|
||
end = _state$blockSelection6.end;
|
||
|
||
if (start.clientId === end.clientId) {
|
||
return null;
|
||
}
|
||
|
||
return start.clientId || null;
|
||
}
|
||
/**
|
||
* Returns the client ID of the block which ends the multi-selection set, or
|
||
* null if there is no multi-selection.
|
||
*
|
||
* This is not necessarily the last client ID in the selection.
|
||
*
|
||
* @see getLastMultiSelectedBlockClientId
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {?string} Client ID of block ending multi-selection.
|
||
*/
|
||
|
||
function getMultiSelectedBlocksEndClientId(state) {
|
||
var _state$blockSelection7 = state.blockSelection,
|
||
start = _state$blockSelection7.start,
|
||
end = _state$blockSelection7.end;
|
||
|
||
if (start.clientId === end.clientId) {
|
||
return null;
|
||
}
|
||
|
||
return end.clientId || null;
|
||
}
|
||
/**
|
||
* Returns an array containing all block client IDs in the editor in the order
|
||
* they appear. Optionally accepts a root client ID of the block list for which
|
||
* the order should be returned, defaulting to the top-level block order.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {Array} Ordered client IDs of editor blocks.
|
||
*/
|
||
|
||
function selectors_getBlockOrder(state, rootClientId) {
|
||
return state.blocks.order[rootClientId || ''] || EMPTY_ARRAY;
|
||
}
|
||
/**
|
||
* Returns the index at which the block corresponding to the specified client
|
||
* ID occurs within the block order, or `-1` if the block does not exist.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {number} Index at which block exists in order.
|
||
*/
|
||
|
||
function selectors_getBlockIndex(state, clientId, rootClientId) {
|
||
return selectors_getBlockOrder(state, rootClientId).indexOf(clientId);
|
||
}
|
||
/**
|
||
* Returns true if the block corresponding to the specified client ID is
|
||
* currently selected and no multi-selection exists, or false otherwise.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {boolean} Whether block is selected and multi-selection exists.
|
||
*/
|
||
|
||
function selectors_isBlockSelected(state, clientId) {
|
||
var _state$blockSelection8 = state.blockSelection,
|
||
start = _state$blockSelection8.start,
|
||
end = _state$blockSelection8.end;
|
||
|
||
if (start.clientId !== end.clientId) {
|
||
return false;
|
||
}
|
||
|
||
return start.clientId === clientId;
|
||
}
|
||
/**
|
||
* Returns true if one of the block's inner blocks is selected.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
* @param {boolean} deep Perform a deep check.
|
||
*
|
||
* @return {boolean} Whether the block as an inner block selected
|
||
*/
|
||
|
||
function selectors_hasSelectedInnerBlock(state, clientId) {
|
||
var deep = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
||
return Object(external_lodash_["some"])(selectors_getBlockOrder(state, clientId), function (innerClientId) {
|
||
return selectors_isBlockSelected(state, innerClientId) || selectors_isBlockMultiSelected(state, innerClientId) || deep && selectors_hasSelectedInnerBlock(state, innerClientId, deep);
|
||
});
|
||
}
|
||
/**
|
||
* Returns true if the block corresponding to the specified client ID is
|
||
* currently selected but isn't the last of the selected blocks. Here "last"
|
||
* refers to the block sequence in the document, _not_ the sequence of
|
||
* multi-selection, which is why `state.blockSelection.end` isn't used.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {boolean} Whether block is selected and not the last in the
|
||
* selection.
|
||
*/
|
||
|
||
function isBlockWithinSelection(state, clientId) {
|
||
if (!clientId) {
|
||
return false;
|
||
}
|
||
|
||
var clientIds = getMultiSelectedBlockClientIds(state);
|
||
var index = clientIds.indexOf(clientId);
|
||
return index > -1 && index < clientIds.length - 1;
|
||
}
|
||
/**
|
||
* Returns true if a multi-selection has been made, or false otherwise.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {boolean} Whether multi-selection has been made.
|
||
*/
|
||
|
||
function selectors_hasMultiSelection(state) {
|
||
var _state$blockSelection9 = state.blockSelection,
|
||
start = _state$blockSelection9.start,
|
||
end = _state$blockSelection9.end;
|
||
return start.clientId !== end.clientId;
|
||
}
|
||
/**
|
||
* Whether in the process of multi-selecting or not. This flag is only true
|
||
* while the multi-selection is being selected (by mouse move), and is false
|
||
* once the multi-selection has been settled.
|
||
*
|
||
* @see hasMultiSelection
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {boolean} True if multi-selecting, false if not.
|
||
*/
|
||
|
||
function isMultiSelecting(state) {
|
||
return state.blockSelection.isMultiSelecting;
|
||
}
|
||
/**
|
||
* Selector that returns if multi-selection is enabled or not.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {boolean} True if it should be possible to multi-select blocks, false if multi-selection is disabled.
|
||
*/
|
||
|
||
function selectors_isSelectionEnabled(state) {
|
||
return state.blockSelection.isEnabled;
|
||
}
|
||
/**
|
||
* Returns the block's editing mode, defaulting to "visual" if not explicitly
|
||
* assigned.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {Object} Block editing mode.
|
||
*/
|
||
|
||
function selectors_getBlockMode(state, clientId) {
|
||
return state.blocksMode[clientId] || 'visual';
|
||
}
|
||
/**
|
||
* Returns true if the user is typing, or false otherwise.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {boolean} Whether user is typing.
|
||
*/
|
||
|
||
function selectors_isTyping(state) {
|
||
return state.isTyping;
|
||
}
|
||
/**
|
||
* Returns true if the caret is within formatted text, or false otherwise.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {boolean} Whether the caret is within formatted text.
|
||
*/
|
||
|
||
function selectors_isCaretWithinFormattedText(state) {
|
||
return state.isCaretWithinFormattedText;
|
||
}
|
||
/**
|
||
* Returns the insertion point, the index at which the new inserted block would
|
||
* be placed. Defaults to the last index.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {Object} Insertion point object with `rootClientId`, `index`.
|
||
*/
|
||
|
||
function getBlockInsertionPoint(state) {
|
||
var rootClientId, index;
|
||
var insertionPoint = state.insertionPoint,
|
||
blockSelection = state.blockSelection;
|
||
|
||
if (insertionPoint !== null) {
|
||
return insertionPoint;
|
||
}
|
||
|
||
var end = blockSelection.end;
|
||
|
||
if (end.clientId) {
|
||
rootClientId = selectors_getBlockRootClientId(state, end.clientId) || undefined;
|
||
index = selectors_getBlockIndex(state, end.clientId, rootClientId) + 1;
|
||
} else {
|
||
index = selectors_getBlockOrder(state).length;
|
||
}
|
||
|
||
return {
|
||
rootClientId: rootClientId,
|
||
index: index
|
||
};
|
||
}
|
||
/**
|
||
* Returns true if we should show the block insertion point.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {?boolean} Whether the insertion point is visible or not.
|
||
*/
|
||
|
||
function isBlockInsertionPointVisible(state) {
|
||
return state.insertionPoint !== null;
|
||
}
|
||
/**
|
||
* Returns whether the blocks matches the template or not.
|
||
*
|
||
* @param {boolean} state
|
||
* @return {?boolean} Whether the template is valid or not.
|
||
*/
|
||
|
||
function isValidTemplate(state) {
|
||
return state.template.isValid;
|
||
}
|
||
/**
|
||
* Returns the defined block template
|
||
*
|
||
* @param {boolean} state
|
||
* @return {?Array} Block Template
|
||
*/
|
||
|
||
function getTemplate(state) {
|
||
return state.settings.template;
|
||
}
|
||
/**
|
||
* Returns the defined block template lock. Optionally accepts a root block
|
||
* client ID as context, otherwise defaulting to the global context.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} rootClientId Optional block root client ID.
|
||
*
|
||
* @return {?string} Block Template Lock
|
||
*/
|
||
|
||
function selectors_getTemplateLock(state, rootClientId) {
|
||
if (!rootClientId) {
|
||
return state.settings.templateLock;
|
||
}
|
||
|
||
var blockListSettings = getBlockListSettings(state, rootClientId);
|
||
|
||
if (!blockListSettings) {
|
||
return null;
|
||
}
|
||
|
||
return blockListSettings.templateLock;
|
||
}
|
||
/**
|
||
* Determines if the given block type is allowed to be inserted into the block list.
|
||
* This function is not exported and not memoized because using a memoized selector
|
||
* inside another memoized selector is just a waste of time.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} blockName The name of the block type, e.g.' core/paragraph'.
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {boolean} Whether the given block type is allowed to be inserted.
|
||
*/
|
||
|
||
var selectors_canInsertBlockTypeUnmemoized = function canInsertBlockTypeUnmemoized(state, blockName) {
|
||
var rootClientId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||
|
||
var checkAllowList = function checkAllowList(list, item) {
|
||
var defaultResult = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||
|
||
if (Object(external_lodash_["isBoolean"])(list)) {
|
||
return list;
|
||
}
|
||
|
||
if (Object(external_lodash_["isArray"])(list)) {
|
||
return Object(external_lodash_["includes"])(list, item);
|
||
}
|
||
|
||
return defaultResult;
|
||
};
|
||
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(blockName);
|
||
|
||
if (!blockType) {
|
||
return false;
|
||
}
|
||
|
||
var _getSettings = selectors_getSettings(state),
|
||
allowedBlockTypes = _getSettings.allowedBlockTypes;
|
||
|
||
var isBlockAllowedInEditor = checkAllowList(allowedBlockTypes, blockName, true);
|
||
|
||
if (!isBlockAllowedInEditor) {
|
||
return false;
|
||
}
|
||
|
||
var isLocked = !!selectors_getTemplateLock(state, rootClientId);
|
||
|
||
if (isLocked) {
|
||
return false;
|
||
}
|
||
|
||
var parentBlockListSettings = getBlockListSettings(state, rootClientId);
|
||
var parentAllowedBlocks = Object(external_lodash_["get"])(parentBlockListSettings, ['allowedBlocks']);
|
||
var hasParentAllowedBlock = checkAllowList(parentAllowedBlocks, blockName);
|
||
var blockAllowedParentBlocks = blockType.parent;
|
||
var parentName = selectors_getBlockName(state, rootClientId);
|
||
var hasBlockAllowedParent = checkAllowList(blockAllowedParentBlocks, parentName);
|
||
|
||
if (hasParentAllowedBlock !== null && hasBlockAllowedParent !== null) {
|
||
return hasParentAllowedBlock || hasBlockAllowedParent;
|
||
} else if (hasParentAllowedBlock !== null) {
|
||
return hasParentAllowedBlock;
|
||
} else if (hasBlockAllowedParent !== null) {
|
||
return hasBlockAllowedParent;
|
||
}
|
||
|
||
return true;
|
||
};
|
||
/**
|
||
* Determines if the given block type is allowed to be inserted into the block list.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {string} blockName The name of the block type, e.g.' core/paragraph'.
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {boolean} Whether the given block type is allowed to be inserted.
|
||
*/
|
||
|
||
|
||
var selectors_canInsertBlockType = Object(rememo["a" /* default */])(selectors_canInsertBlockTypeUnmemoized, function (state, blockName, rootClientId) {
|
||
return [state.blockListSettings[rootClientId], state.blocks.byClientId[rootClientId], state.settings.allowedBlockTypes, state.settings.templateLock];
|
||
});
|
||
/**
|
||
* Returns information about how recently and frequently a block has been inserted.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
* @param {string} id A string which identifies the insert, e.g. 'core/block/12'
|
||
*
|
||
* @return {?{ time: number, count: number }} An object containing `time` which is when the last
|
||
* insert occurred as a UNIX epoch, and `count` which is
|
||
* the number of inserts that have occurred.
|
||
*/
|
||
|
||
function getInsertUsage(state, id) {
|
||
return Object(external_lodash_["get"])(state.preferences.insertUsage, [id], null);
|
||
}
|
||
/**
|
||
* Returns whether we can show a block type in the inserter
|
||
*
|
||
* @param {Object} state Global State
|
||
* @param {Object} blockType BlockType
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {boolean} Whether the given block type is allowed to be shown in the inserter.
|
||
*/
|
||
|
||
|
||
var selectors_canIncludeBlockTypeInInserter = function canIncludeBlockTypeInInserter(state, blockType, rootClientId) {
|
||
if (!Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'inserter', true)) {
|
||
return false;
|
||
}
|
||
|
||
return selectors_canInsertBlockTypeUnmemoized(state, blockType.name, rootClientId);
|
||
};
|
||
/**
|
||
* Determines the items that appear in the inserter. Includes both static
|
||
* items (e.g. a regular block type) and dynamic items (e.g. a reusable block).
|
||
*
|
||
* Each item object contains what's necessary to display a button in the
|
||
* inserter and handle its selection.
|
||
*
|
||
* The 'utility' property indicates how useful we think an item will be to the
|
||
* user. There are 4 levels of utility:
|
||
*
|
||
* 1. Blocks that are contextually useful (utility = 3)
|
||
* 2. Blocks that have been previously inserted (utility = 2)
|
||
* 3. Blocks that are in the common category (utility = 1)
|
||
* 4. All other blocks (utility = 0)
|
||
*
|
||
* The 'frecency' property is a heuristic (https://en.wikipedia.org/wiki/Frecency)
|
||
* that combines block usage frequenty and recency.
|
||
*
|
||
* Items are returned ordered descendingly by their 'utility' and 'frecency'.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {Editor.InserterItem[]} Items that appear in inserter.
|
||
*
|
||
* @typedef {Object} Editor.InserterItem
|
||
* @property {string} id Unique identifier for the item.
|
||
* @property {string} name The type of block to create.
|
||
* @property {Object} initialAttributes Attributes to pass to the newly created block.
|
||
* @property {string} title Title of the item, as it appears in the inserter.
|
||
* @property {string} icon Dashicon for the item, as it appears in the inserter.
|
||
* @property {string} category Block category that the item is associated with.
|
||
* @property {string[]} keywords Keywords that can be searched to find this item.
|
||
* @property {boolean} isDisabled Whether or not the user should be prevented from inserting
|
||
* this item.
|
||
* @property {number} utility How useful we think this item is, between 0 and 3.
|
||
* @property {number} frecency Hueristic that combines frequency and recency.
|
||
*/
|
||
|
||
|
||
var selectors_getInserterItems = Object(rememo["a" /* default */])(function (state) {
|
||
var rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
||
|
||
var calculateUtility = function calculateUtility(category, count, isContextual) {
|
||
if (isContextual) {
|
||
return INSERTER_UTILITY_HIGH;
|
||
} else if (count > 0) {
|
||
return INSERTER_UTILITY_MEDIUM;
|
||
} else if (category === 'common') {
|
||
return INSERTER_UTILITY_LOW;
|
||
}
|
||
|
||
return INSERTER_UTILITY_NONE;
|
||
};
|
||
|
||
var calculateFrecency = function calculateFrecency(time, count) {
|
||
if (!time) {
|
||
return count;
|
||
} // The selector is cached, which means Date.now() is the last time that the
|
||
// relevant state changed. This suits our needs.
|
||
|
||
|
||
var duration = Date.now() - time;
|
||
|
||
switch (true) {
|
||
case duration < MILLISECONDS_PER_HOUR:
|
||
return count * 4;
|
||
|
||
case duration < MILLISECONDS_PER_DAY:
|
||
return count * 2;
|
||
|
||
case duration < MILLISECONDS_PER_WEEK:
|
||
return count / 2;
|
||
|
||
default:
|
||
return count / 4;
|
||
}
|
||
};
|
||
|
||
var buildBlockTypeInserterItem = function buildBlockTypeInserterItem(blockType) {
|
||
var id = blockType.name;
|
||
var isDisabled = false;
|
||
|
||
if (!Object(external_this_wp_blocks_["hasBlockSupport"])(blockType.name, 'multiple', true)) {
|
||
isDisabled = Object(external_lodash_["some"])(selectors_getBlocksByClientId(state, getClientIdsWithDescendants(state)), {
|
||
name: blockType.name
|
||
});
|
||
}
|
||
|
||
var isContextual = Object(external_lodash_["isArray"])(blockType.parent);
|
||
|
||
var _ref = getInsertUsage(state, id) || {},
|
||
time = _ref.time,
|
||
_ref$count = _ref.count,
|
||
count = _ref$count === void 0 ? 0 : _ref$count;
|
||
|
||
return {
|
||
id: id,
|
||
name: blockType.name,
|
||
initialAttributes: {},
|
||
title: blockType.title,
|
||
icon: blockType.icon,
|
||
category: blockType.category,
|
||
keywords: blockType.keywords,
|
||
isDisabled: isDisabled,
|
||
utility: calculateUtility(blockType.category, count, isContextual),
|
||
frecency: calculateFrecency(time, count)
|
||
};
|
||
};
|
||
|
||
var buildReusableBlockInserterItem = function buildReusableBlockInserterItem(reusableBlock) {
|
||
var id = "core/block/".concat(reusableBlock.id);
|
||
|
||
var referencedBlocks = __experimentalGetParsedReusableBlock(state, reusableBlock.id);
|
||
|
||
var referencedBlockType;
|
||
|
||
if (referencedBlocks.length === 1) {
|
||
referencedBlockType = Object(external_this_wp_blocks_["getBlockType"])(referencedBlocks[0].name);
|
||
}
|
||
|
||
var _ref2 = getInsertUsage(state, id) || {},
|
||
time = _ref2.time,
|
||
_ref2$count = _ref2.count,
|
||
count = _ref2$count === void 0 ? 0 : _ref2$count;
|
||
|
||
var utility = calculateUtility('reusable', count, false);
|
||
var frecency = calculateFrecency(time, count);
|
||
return {
|
||
id: id,
|
||
name: 'core/block',
|
||
initialAttributes: {
|
||
ref: reusableBlock.id
|
||
},
|
||
title: reusableBlock.title,
|
||
icon: referencedBlockType ? referencedBlockType.icon : templateIcon,
|
||
category: 'reusable',
|
||
keywords: [],
|
||
isDisabled: false,
|
||
utility: utility,
|
||
frecency: frecency
|
||
};
|
||
};
|
||
|
||
var blockTypeInserterItems = Object(external_this_wp_blocks_["getBlockTypes"])().filter(function (blockType) {
|
||
return selectors_canIncludeBlockTypeInInserter(state, blockType, rootClientId);
|
||
}).map(buildBlockTypeInserterItem);
|
||
var reusableBlockInserterItems = selectors_canInsertBlockTypeUnmemoized(state, 'core/block', rootClientId) ? getReusableBlocks(state).map(buildReusableBlockInserterItem) : [];
|
||
return Object(external_lodash_["orderBy"])([].concat(Object(toConsumableArray["a" /* default */])(blockTypeInserterItems), Object(toConsumableArray["a" /* default */])(reusableBlockInserterItems)), ['utility', 'frecency'], ['desc', 'desc']);
|
||
}, function (state, rootClientId) {
|
||
return [state.blockListSettings[rootClientId], state.blocks.byClientId, state.blocks.order, state.preferences.insertUsage, state.settings.allowedBlockTypes, state.settings.templateLock, getReusableBlocks(state), Object(external_this_wp_blocks_["getBlockTypes"])()];
|
||
});
|
||
/**
|
||
* Determines whether there are items to show in the inserter.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} rootClientId Optional root client ID of block list.
|
||
*
|
||
* @return {boolean} Items that appear in inserter.
|
||
*/
|
||
|
||
var hasInserterItems = Object(rememo["a" /* default */])(function (state) {
|
||
var rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
||
var hasBlockType = Object(external_lodash_["some"])(Object(external_this_wp_blocks_["getBlockTypes"])(), function (blockType) {
|
||
return selectors_canIncludeBlockTypeInInserter(state, blockType, rootClientId);
|
||
});
|
||
|
||
if (hasBlockType) {
|
||
return true;
|
||
}
|
||
|
||
var hasReusableBlock = selectors_canInsertBlockTypeUnmemoized(state, 'core/block', rootClientId) && getReusableBlocks(state).length > 0;
|
||
return hasReusableBlock;
|
||
}, function (state, rootClientId) {
|
||
return [state.blockListSettings[rootClientId], state.blocks.byClientId, state.settings.allowedBlockTypes, state.settings.templateLock, getReusableBlocks(state), Object(external_this_wp_blocks_["getBlockTypes"])()];
|
||
});
|
||
/**
|
||
* Returns the Block List settings of a block, if any exist.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
* @param {?string} clientId Block client ID.
|
||
*
|
||
* @return {?Object} Block settings of the block if set.
|
||
*/
|
||
|
||
function getBlockListSettings(state, clientId) {
|
||
return state.blockListSettings[clientId];
|
||
}
|
||
/**
|
||
* Returns the editor settings.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {Object} The editor settings object.
|
||
*/
|
||
|
||
function selectors_getSettings(state) {
|
||
return state.settings;
|
||
}
|
||
/**
|
||
* Returns true if the most recent block change is be considered persistent, or
|
||
* false otherwise. A persistent change is one committed by BlockEditorProvider
|
||
* via its `onChange` callback, in addition to `onInput`.
|
||
*
|
||
* @param {Object} state Block editor state.
|
||
*
|
||
* @return {boolean} Whether the most recent block change was persistent.
|
||
*/
|
||
|
||
function selectors_isLastBlockChangePersistent(state) {
|
||
return state.blocks.isPersistentChange;
|
||
}
|
||
/**
|
||
* Returns the parsed block saved as shared block with the given ID.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
* @param {number|string} ref The shared block's ID.
|
||
*
|
||
* @return {Object} The parsed block.
|
||
*/
|
||
|
||
var __experimentalGetParsedReusableBlock = Object(rememo["a" /* default */])(function (state, ref) {
|
||
var reusableBlock = Object(external_lodash_["find"])(getReusableBlocks(state), function (block) {
|
||
return block.id === ref;
|
||
});
|
||
|
||
if (!reusableBlock) {
|
||
return null;
|
||
}
|
||
|
||
return Object(external_this_wp_blocks_["parse"])(reusableBlock.content);
|
||
}, function (state) {
|
||
return [getReusableBlocks(state)];
|
||
});
|
||
/**
|
||
* Returns true if the most recent block change is be considered ignored, or
|
||
* false otherwise. An ignored change is one not to be committed by
|
||
* BlockEditorProvider, neither via `onChange` nor `onInput`.
|
||
*
|
||
* @param {Object} state Block editor state.
|
||
*
|
||
* @return {boolean} Whether the most recent block change was ignored.
|
||
*/
|
||
|
||
function selectors_unstableIsLastBlockChangeIgnored(state) {
|
||
// TODO: Removal Plan: Changes incurred by RECEIVE_BLOCKS should not be
|
||
// ignored if in-fact they result in a change in blocks state. The current
|
||
// need to ignore changes not a result of user interaction should be
|
||
// accounted for in the refactoring of reusable blocks as occurring within
|
||
// their own separate block editor / state (#7119).
|
||
return state.blocks.isIgnoredChange;
|
||
}
|
||
/**
|
||
* Returns the block attributes changed as a result of the last dispatched
|
||
* action.
|
||
*
|
||
* @param {Object} state Block editor state.
|
||
*
|
||
* @return {Object<string,Object>} Subsets of block attributes changed, keyed
|
||
* by block client ID.
|
||
*/
|
||
|
||
function __experimentalGetLastBlockAttributeChanges(state) {
|
||
return state.lastBlockAttributesChange;
|
||
}
|
||
/**
|
||
* Returns the available reusable blocks
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {Array} Reusable blocks
|
||
*/
|
||
|
||
function getReusableBlocks(state) {
|
||
return Object(external_lodash_["get"])(state, ['settings', '__experimentalReusableBlocks'], EMPTY_ARRAY);
|
||
}
|
||
/**
|
||
* Returns whether the navigation mode is enabled.
|
||
*
|
||
* @param {Object} state Editor state.
|
||
*
|
||
* @return {boolean} Is navigation mode enabled.
|
||
*/
|
||
|
||
|
||
function selectors_isNavigationMode(state) {
|
||
return state.isNavigationMode;
|
||
}
|
||
/**
|
||
* Returns true if the last change was an automatic change, false otherwise.
|
||
*
|
||
* @param {Object} state Global application state.
|
||
*
|
||
* @return {boolean} Whether the last change was automatic.
|
||
*/
|
||
|
||
function selectors_didAutomaticChange(state) {
|
||
return state.didAutomaticChange;
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/effects.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Block validity is a function of blocks state (at the point of a
|
||
* reset) and the template setting. As a compromise to its placement
|
||
* across distinct parts of state, it is implemented here as a side-
|
||
* effect of the block reset action.
|
||
*
|
||
* @param {Object} action RESET_BLOCKS action.
|
||
* @param {Object} store Store instance.
|
||
*
|
||
* @return {?Object} New validity set action if validity has changed.
|
||
*/
|
||
|
||
function validateBlocksToTemplate(action, store) {
|
||
var state = store.getState();
|
||
var template = getTemplate(state);
|
||
var templateLock = selectors_getTemplateLock(state); // Unlocked templates are considered always valid because they act
|
||
// as default values only.
|
||
|
||
var isBlocksValidToTemplate = !template || templateLock !== 'all' || Object(external_this_wp_blocks_["doBlocksMatchTemplate"])(action.blocks, template); // Update if validity has changed.
|
||
|
||
if (isBlocksValidToTemplate !== isValidTemplate(state)) {
|
||
return setTemplateValidity(isBlocksValidToTemplate);
|
||
}
|
||
}
|
||
/* harmony default export */ var effects = ({
|
||
MERGE_BLOCKS: function MERGE_BLOCKS(action, store) {
|
||
var dispatch = store.dispatch;
|
||
var state = store.getState();
|
||
|
||
var _action$blocks = Object(slicedToArray["a" /* default */])(action.blocks, 2),
|
||
clientIdA = _action$blocks[0],
|
||
clientIdB = _action$blocks[1];
|
||
|
||
var blockA = selectors_getBlock(state, clientIdA);
|
||
var blockAType = Object(external_this_wp_blocks_["getBlockType"])(blockA.name); // Only focus the previous block if it's not mergeable
|
||
|
||
if (!blockAType.merge) {
|
||
dispatch(actions_selectBlock(blockA.clientId));
|
||
return;
|
||
}
|
||
|
||
var blockB = selectors_getBlock(state, clientIdB);
|
||
var blockBType = Object(external_this_wp_blocks_["getBlockType"])(blockB.name);
|
||
|
||
var _getSelectionStart = getSelectionStart(state),
|
||
clientId = _getSelectionStart.clientId,
|
||
attributeKey = _getSelectionStart.attributeKey,
|
||
offset = _getSelectionStart.offset;
|
||
|
||
var hasTextSelection = (clientId === clientIdA || clientId === clientIdB) && attributeKey !== undefined && offset !== undefined; // A robust way to retain selection position through various transforms
|
||
// is to insert a special character at the position and then recover it.
|
||
|
||
var START_OF_SELECTED_AREA = "\x86"; // Clone the blocks so we don't insert the character in a "live" block.
|
||
|
||
var cloneA = Object(external_this_wp_blocks_["cloneBlock"])(blockA);
|
||
var cloneB = Object(external_this_wp_blocks_["cloneBlock"])(blockB);
|
||
|
||
if (hasTextSelection) {
|
||
var selectedBlock = clientId === clientIdA ? cloneA : cloneB;
|
||
var html = selectedBlock.attributes[attributeKey];
|
||
var selectedBlockType = clientId === clientIdA ? blockAType : blockBType;
|
||
var multilineTag = selectedBlockType.attributes[attributeKey].multiline;
|
||
var value = Object(external_this_wp_richText_["insert"])(Object(external_this_wp_richText_["create"])({
|
||
html: html,
|
||
multilineTag: multilineTag
|
||
}), START_OF_SELECTED_AREA, offset, offset);
|
||
selectedBlock.attributes[attributeKey] = Object(external_this_wp_richText_["toHTMLString"])({
|
||
value: value,
|
||
multilineTag: multilineTag
|
||
});
|
||
} // We can only merge blocks with similar types
|
||
// thus, we transform the block to merge first
|
||
|
||
|
||
var blocksWithTheSameType = blockA.name === blockB.name ? [cloneB] : Object(external_this_wp_blocks_["switchToBlockType"])(cloneB, blockA.name); // If the block types can not match, do nothing
|
||
|
||
if (!blocksWithTheSameType || !blocksWithTheSameType.length) {
|
||
return;
|
||
} // Calling the merge to update the attributes and remove the block to be merged
|
||
|
||
|
||
var updatedAttributes = blockAType.merge(cloneA.attributes, blocksWithTheSameType[0].attributes);
|
||
|
||
if (hasTextSelection) {
|
||
var newAttributeKey = Object(external_lodash_["findKey"])(updatedAttributes, function (v) {
|
||
return typeof v === 'string' && v.indexOf(START_OF_SELECTED_AREA) !== -1;
|
||
});
|
||
var convertedHtml = updatedAttributes[newAttributeKey];
|
||
var _multilineTag = blockAType.attributes[newAttributeKey].multiline;
|
||
var convertedValue = Object(external_this_wp_richText_["create"])({
|
||
html: convertedHtml,
|
||
multilineTag: _multilineTag
|
||
});
|
||
var newOffset = convertedValue.text.indexOf(START_OF_SELECTED_AREA);
|
||
var newValue = Object(external_this_wp_richText_["remove"])(convertedValue, newOffset, newOffset + 1);
|
||
var newHtml = Object(external_this_wp_richText_["toHTMLString"])({
|
||
value: newValue,
|
||
multilineTag: _multilineTag
|
||
});
|
||
updatedAttributes[newAttributeKey] = newHtml;
|
||
dispatch(selectionChange(blockA.clientId, newAttributeKey, newOffset, newOffset));
|
||
}
|
||
|
||
dispatch(actions_replaceBlocks([blockA.clientId, blockB.clientId], [Object(objectSpread["a" /* default */])({}, blockA, {
|
||
attributes: Object(objectSpread["a" /* default */])({}, blockA.attributes, updatedAttributes)
|
||
})].concat(Object(toConsumableArray["a" /* default */])(blocksWithTheSameType.slice(1)))));
|
||
},
|
||
RESET_BLOCKS: [validateBlocksToTemplate],
|
||
MULTI_SELECT: function MULTI_SELECT(action, _ref) {
|
||
var getState = _ref.getState;
|
||
var blockCount = selectors_getSelectedBlockCount(getState());
|
||
/* translators: %s: number of selected blocks */
|
||
|
||
Object(external_this_wp_a11y_["speak"])(Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["_n"])('%s block selected.', '%s blocks selected.', blockCount), blockCount), 'assertive');
|
||
},
|
||
SYNCHRONIZE_TEMPLATE: function SYNCHRONIZE_TEMPLATE(action, _ref2) {
|
||
var getState = _ref2.getState;
|
||
var state = getState();
|
||
var blocks = selectors_getBlocks(state);
|
||
var template = getTemplate(state);
|
||
var updatedBlockList = Object(external_this_wp_blocks_["synchronizeBlocksWithTemplate"])(blocks, template);
|
||
return resetBlocks(updatedBlockList);
|
||
}
|
||
});
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/middlewares.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Applies the custom middlewares used specifically in the editor module.
|
||
*
|
||
* @param {Object} store Store Object.
|
||
*
|
||
* @return {Object} Update Store Object.
|
||
*/
|
||
|
||
function applyMiddlewares(store) {
|
||
var middlewares = [refx_default()(effects), redux_multi_lib_default.a];
|
||
|
||
var enhancedDispatch = function enhancedDispatch() {
|
||
throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');
|
||
};
|
||
|
||
var chain = [];
|
||
var middlewareAPI = {
|
||
getState: store.getState,
|
||
dispatch: function dispatch() {
|
||
return enhancedDispatch.apply(void 0, arguments);
|
||
}
|
||
};
|
||
chain = middlewares.map(function (middleware) {
|
||
return middleware(middlewareAPI);
|
||
});
|
||
enhancedDispatch = external_lodash_["flowRight"].apply(void 0, Object(toConsumableArray["a" /* default */])(chain))(store.dispatch);
|
||
store.dispatch = enhancedDispatch;
|
||
return store;
|
||
}
|
||
|
||
/* harmony default export */ var store_middlewares = (applyMiddlewares);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/index.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Module Constants
|
||
*/
|
||
|
||
var MODULE_KEY = 'core/block-editor';
|
||
/**
|
||
* Block editor data store configuration.
|
||
*
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/data/README.md#registerStore
|
||
*
|
||
* @type {Object}
|
||
*/
|
||
|
||
var storeConfig = {
|
||
reducer: store_reducer,
|
||
selectors: selectors_namespaceObject,
|
||
actions: actions_namespaceObject,
|
||
controls: store_controls
|
||
};
|
||
var store_store = Object(external_this_wp_data_["registerStore"])(MODULE_KEY, Object(objectSpread["a" /* default */])({}, storeConfig, {
|
||
persist: ['preferences']
|
||
}));
|
||
store_middlewares(store_store);
|
||
/* harmony default export */ var build_module_store = (store_store);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/provider/with-registry-provider.js
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var withRegistryProvider = Object(external_this_wp_compose_["createHigherOrderComponent"])(function (WrappedComponent) {
|
||
return Object(external_this_wp_data_["withRegistry"])(function (_ref) {
|
||
var _ref$useSubRegistry = _ref.useSubRegistry,
|
||
useSubRegistry = _ref$useSubRegistry === void 0 ? true : _ref$useSubRegistry,
|
||
registry = _ref.registry,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref, ["useSubRegistry", "registry"]);
|
||
|
||
if (!useSubRegistry) {
|
||
return Object(external_this_wp_element_["createElement"])(WrappedComponent, Object(esm_extends["a" /* default */])({
|
||
registry: registry
|
||
}, props));
|
||
}
|
||
|
||
var _useState = Object(external_this_wp_element_["useState"])(null),
|
||
_useState2 = Object(slicedToArray["a" /* default */])(_useState, 2),
|
||
subRegistry = _useState2[0],
|
||
setSubRegistry = _useState2[1];
|
||
|
||
Object(external_this_wp_element_["useEffect"])(function () {
|
||
var newRegistry = Object(external_this_wp_data_["createRegistry"])({}, registry);
|
||
var store = newRegistry.registerStore('core/block-editor', storeConfig); // This should be removed after the refactoring of the effects to controls.
|
||
|
||
store_middlewares(store);
|
||
setSubRegistry(newRegistry);
|
||
}, [registry]);
|
||
|
||
if (!subRegistry) {
|
||
return null;
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_data_["RegistryProvider"], {
|
||
value: subRegistry
|
||
}, Object(external_this_wp_element_["createElement"])(WrappedComponent, Object(esm_extends["a" /* default */])({
|
||
registry: subRegistry
|
||
}, props)));
|
||
});
|
||
}, 'withRegistryProvider');
|
||
/* harmony default export */ var with_registry_provider = (withRegistryProvider);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/provider/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var provider_BlockEditorProvider =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockEditorProvider, _Component);
|
||
|
||
function BlockEditorProvider() {
|
||
Object(classCallCheck["a" /* default */])(this, BlockEditorProvider);
|
||
|
||
return Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockEditorProvider).apply(this, arguments));
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockEditorProvider, [{
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
this.props.updateSettings(this.props.settings);
|
||
this.props.resetBlocks(this.props.value);
|
||
this.attachChangeObserver(this.props.registry);
|
||
}
|
||
}, {
|
||
key: "componentDidUpdate",
|
||
value: function componentDidUpdate(prevProps) {
|
||
var _this$props = this.props,
|
||
settings = _this$props.settings,
|
||
updateSettings = _this$props.updateSettings,
|
||
value = _this$props.value,
|
||
resetBlocks = _this$props.resetBlocks,
|
||
registry = _this$props.registry;
|
||
|
||
if (settings !== prevProps.settings) {
|
||
updateSettings(settings);
|
||
}
|
||
|
||
if (registry !== prevProps.registry) {
|
||
this.attachChangeObserver(registry);
|
||
}
|
||
|
||
if (this.isSyncingOutcomingValue !== null && this.isSyncingOutcomingValue === value) {
|
||
// Skip block reset if the value matches expected outbound sync
|
||
// triggered by this component by a preceding change detection.
|
||
// Only skip if the value matches expectation, since a reset should
|
||
// still occur if the value is modified (not equal by reference),
|
||
// to allow that the consumer may apply modifications to reflect
|
||
// back on the editor.
|
||
this.isSyncingOutcomingValue = null;
|
||
} else if (value !== prevProps.value) {
|
||
// Reset changing value in all other cases than the sync described
|
||
// above. Since this can be reached in an update following an out-
|
||
// bound sync, unset the outbound value to avoid considering it in
|
||
// subsequent renders.
|
||
this.isSyncingOutcomingValue = null;
|
||
this.isSyncingIncomingValue = value;
|
||
resetBlocks(value);
|
||
}
|
||
}
|
||
}, {
|
||
key: "componentWillUnmount",
|
||
value: function componentWillUnmount() {
|
||
if (this.unsubscribe) {
|
||
this.unsubscribe();
|
||
}
|
||
}
|
||
/**
|
||
* Given a registry object, overrides the default dispatch behavior for the
|
||
* `core/block-editor` store to interpret a state change and decide whether
|
||
* we should call `onChange` or `onInput` depending on whether the change
|
||
* is persistent or not.
|
||
*
|
||
* This needs to be done synchronously after state changes (instead of using
|
||
* `componentDidUpdate`) in order to avoid batching these changes.
|
||
*
|
||
* @param {WPDataRegistry} registry Registry from which block editor
|
||
* dispatch is to be overriden.
|
||
*/
|
||
|
||
}, {
|
||
key: "attachChangeObserver",
|
||
value: function attachChangeObserver(registry) {
|
||
var _this = this;
|
||
|
||
if (this.unsubscribe) {
|
||
this.unsubscribe();
|
||
}
|
||
|
||
var _registry$select = registry.select('core/block-editor'),
|
||
getBlocks = _registry$select.getBlocks,
|
||
isLastBlockChangePersistent = _registry$select.isLastBlockChangePersistent,
|
||
__unstableIsLastBlockChangeIgnored = _registry$select.__unstableIsLastBlockChangeIgnored;
|
||
|
||
var blocks = getBlocks();
|
||
var isPersistent = isLastBlockChangePersistent();
|
||
this.unsubscribe = registry.subscribe(function () {
|
||
var _this$props2 = _this.props,
|
||
_this$props2$onChange = _this$props2.onChange,
|
||
onChange = _this$props2$onChange === void 0 ? external_lodash_["noop"] : _this$props2$onChange,
|
||
_this$props2$onInput = _this$props2.onInput,
|
||
onInput = _this$props2$onInput === void 0 ? external_lodash_["noop"] : _this$props2$onInput;
|
||
var newBlocks = getBlocks();
|
||
var newIsPersistent = isLastBlockChangePersistent();
|
||
|
||
if (newBlocks !== blocks && (_this.isSyncingIncomingValue || __unstableIsLastBlockChangeIgnored())) {
|
||
_this.isSyncingIncomingValue = null;
|
||
blocks = newBlocks;
|
||
isPersistent = newIsPersistent;
|
||
return;
|
||
}
|
||
|
||
if (newBlocks !== blocks || // This happens when a previous input is explicitely marked as persistent.
|
||
newIsPersistent && !isPersistent) {
|
||
// When knowing the blocks value is changing, assign instance
|
||
// value to skip reset in subsequent `componentDidUpdate`.
|
||
if (newBlocks !== blocks) {
|
||
_this.isSyncingOutcomingValue = newBlocks;
|
||
}
|
||
|
||
blocks = newBlocks;
|
||
isPersistent = newIsPersistent;
|
||
|
||
if (isPersistent) {
|
||
onChange(blocks);
|
||
} else {
|
||
onInput(blocks);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var children = this.props.children;
|
||
return children;
|
||
}
|
||
}]);
|
||
|
||
return BlockEditorProvider;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var provider = (Object(external_this_wp_compose_["compose"])([with_registry_provider, Object(external_this_wp_data_["withDispatch"])(function (dispatch) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
updateSettings = _dispatch.updateSettings,
|
||
resetBlocks = _dispatch.resetBlocks;
|
||
|
||
return {
|
||
updateSettings: updateSettings,
|
||
resetBlocks: resetBlocks
|
||
};
|
||
})])(provider_BlockEditorProvider));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-async-mode-provider.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
var block_async_mode_provider_BlockAsyncModeProvider = function BlockAsyncModeProvider(_ref) {
|
||
var children = _ref.children,
|
||
clientId = _ref.clientId,
|
||
isBlockInSelection = _ref.isBlockInSelection;
|
||
var isParentOfSelectedBlock = Object(external_this_wp_data_["useSelect"])(function (select) {
|
||
return select('core/block-editor').hasSelectedInnerBlock(clientId, true);
|
||
});
|
||
var isSyncModeForced = isBlockInSelection || isParentOfSelectedBlock;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_data_["__experimentalAsyncModeProvider"], {
|
||
value: !isSyncModeForced
|
||
}, children);
|
||
};
|
||
|
||
/* harmony default export */ var block_async_mode_provider = (block_async_mode_provider_BlockAsyncModeProvider);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/react-spring/web.cjs.js
|
||
var web_cjs = __webpack_require__(66);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","dom"]}
|
||
var external_this_wp_dom_ = __webpack_require__(25);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-mover/mover-description.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Return a label for the block movement controls depending on block position.
|
||
*
|
||
* @param {number} selectedCount Number of blocks selected.
|
||
* @param {string} type Block type - in the case of a single block, should
|
||
* define its 'type'. I.e. 'Text', 'Heading', 'Image' etc.
|
||
* @param {number} firstIndex The index (position - 1) of the first block selected.
|
||
* @param {boolean} isFirst This is the first block.
|
||
* @param {boolean} isLast This is the last block.
|
||
* @param {number} dir Direction of movement (> 0 is considered to be going
|
||
* down, < 0 is up).
|
||
*
|
||
* @return {string} Label for the block movement controls.
|
||
*/
|
||
|
||
function getBlockMoverDescription(selectedCount, type, firstIndex, isFirst, isLast, dir) {
|
||
var position = firstIndex + 1;
|
||
|
||
if (selectedCount > 1) {
|
||
return getMultiBlockMoverDescription(selectedCount, firstIndex, isFirst, isLast, dir);
|
||
}
|
||
|
||
if (isFirst && isLast) {
|
||
// translators: %s: Type of block (i.e. Text, Image etc)
|
||
return Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["__"])('Block %s is the only block, and cannot be moved'), type);
|
||
}
|
||
|
||
if (dir > 0 && !isLast) {
|
||
// moving down
|
||
return Object(external_this_wp_i18n_["sprintf"])( // translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position
|
||
Object(external_this_wp_i18n_["__"])('Move %1$s block from position %2$d down to position %3$d'), type, position, position + 1);
|
||
}
|
||
|
||
if (dir > 0 && isLast) {
|
||
// moving down, and is the last item
|
||
// translators: %s: Type of block (i.e. Text, Image etc)
|
||
return Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["__"])('Block %s is at the end of the content and can’t be moved down'), type);
|
||
}
|
||
|
||
if (dir < 0 && !isFirst) {
|
||
// moving up
|
||
return Object(external_this_wp_i18n_["sprintf"])( // translators: 1: Type of block (i.e. Text, Image etc), 2: Position of selected block, 3: New position
|
||
Object(external_this_wp_i18n_["__"])('Move %1$s block from position %2$d up to position %3$d'), type, position, position - 1);
|
||
}
|
||
|
||
if (dir < 0 && isFirst) {
|
||
// moving up, and is the first item
|
||
// translators: %s: Type of block (i.e. Text, Image etc)
|
||
return Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["__"])('Block %s is at the beginning of the content and can’t be moved up'), type);
|
||
}
|
||
}
|
||
/**
|
||
* Return a label for the block movement controls depending on block position.
|
||
*
|
||
* @param {number} selectedCount Number of blocks selected.
|
||
* @param {number} firstIndex The index (position - 1) of the first block selected.
|
||
* @param {boolean} isFirst This is the first block.
|
||
* @param {boolean} isLast This is the last block.
|
||
* @param {number} dir Direction of movement (> 0 is considered to be going
|
||
* down, < 0 is up).
|
||
*
|
||
* @return {string} Label for the block movement controls.
|
||
*/
|
||
|
||
function getMultiBlockMoverDescription(selectedCount, firstIndex, isFirst, isLast, dir) {
|
||
var position = firstIndex + 1;
|
||
|
||
if (dir < 0 && isFirst) {
|
||
return Object(external_this_wp_i18n_["__"])('Blocks cannot be moved up as they are already at the top');
|
||
}
|
||
|
||
if (dir > 0 && isLast) {
|
||
return Object(external_this_wp_i18n_["__"])('Blocks cannot be moved down as they are already at the bottom');
|
||
}
|
||
|
||
if (dir < 0 && !isFirst) {
|
||
return Object(external_this_wp_i18n_["sprintf"])( // translators: 1: Number of selected blocks, 2: Position of selected blocks
|
||
Object(external_this_wp_i18n_["_n"])('Move %1$d block from position %2$d up by one place', 'Move %1$d blocks from position %2$d up by one place', selectedCount), selectedCount, position);
|
||
}
|
||
|
||
if (dir > 0 && !isLast) {
|
||
return Object(external_this_wp_i18n_["sprintf"])( // translators: 1: Number of selected blocks, 2: Position of selected blocks
|
||
Object(external_this_wp_i18n_["_n"])('Move %1$d block from position %2$d down by one place', 'Move %1$d blocks from position %2$d down by one place', selectedCount), selectedCount, position);
|
||
}
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-mover/icons.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
var upArrow = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
width: "18",
|
||
height: "18",
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
viewBox: "0 0 18 18"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Polygon"], {
|
||
points: "9,4.5 3.3,10.1 4.8,11.5 9,7.3 13.2,11.5 14.7,10.1 "
|
||
}));
|
||
var downArrow = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
width: "18",
|
||
height: "18",
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
viewBox: "0 0 18 18"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Polygon"], {
|
||
points: "9,13.5 14.7,7.9 13.2,6.5 9,10.7 4.8,6.5 3.3,7.9 "
|
||
}));
|
||
var dragHandle = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
width: "18",
|
||
height: "18",
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
viewBox: "0 0 18 18"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M13,8c0.6,0,1-0.4,1-1s-0.4-1-1-1s-1,0.4-1,1S12.4,8,13,8z M5,6C4.4,6,4,6.4,4,7s0.4,1,1,1s1-0.4,1-1S5.6,6,5,6z M5,10 c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S5.6,10,5,10z M13,10c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S13.6,10,13,10z M9,6 C8.4,6,8,6.4,8,7s0.4,1,1,1s1-0.4,1-1S9.6,6,9,6z M9,10c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S9.6,10,9,10z"
|
||
}));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-draggable/index.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
var block_draggable_BlockDraggable = function BlockDraggable(_ref) {
|
||
var children = _ref.children,
|
||
clientId = _ref.clientId,
|
||
rootClientId = _ref.rootClientId,
|
||
blockElementId = _ref.blockElementId,
|
||
index = _ref.index,
|
||
onDragStart = _ref.onDragStart,
|
||
onDragEnd = _ref.onDragEnd;
|
||
var transferData = {
|
||
type: 'block',
|
||
srcIndex: index,
|
||
srcRootClientId: rootClientId,
|
||
srcClientId: clientId
|
||
};
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Draggable"], {
|
||
elementId: blockElementId,
|
||
transferData: transferData,
|
||
onDragStart: onDragStart,
|
||
onDragEnd: onDragEnd
|
||
}, function (_ref2) {
|
||
var onDraggableStart = _ref2.onDraggableStart,
|
||
onDraggableEnd = _ref2.onDraggableEnd;
|
||
return children({
|
||
onDraggableStart: onDraggableStart,
|
||
onDraggableEnd: onDraggableEnd
|
||
});
|
||
});
|
||
};
|
||
|
||
/* harmony default export */ var block_draggable = (Object(external_this_wp_data_["withSelect"])(function (select, _ref3) {
|
||
var clientId = _ref3.clientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlockIndex = _select.getBlockIndex,
|
||
getBlockRootClientId = _select.getBlockRootClientId;
|
||
|
||
var rootClientId = getBlockRootClientId(clientId);
|
||
return {
|
||
index: getBlockIndex(clientId, rootClientId),
|
||
rootClientId: rootClientId
|
||
};
|
||
})(block_draggable_BlockDraggable));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-mover/drag-handle.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
var drag_handle_IconDragHandle = function IconDragHandle(_ref) {
|
||
var isVisible = _ref.isVisible,
|
||
className = _ref.className,
|
||
icon = _ref.icon,
|
||
onDragStart = _ref.onDragStart,
|
||
onDragEnd = _ref.onDragEnd,
|
||
blockElementId = _ref.blockElementId,
|
||
clientId = _ref.clientId;
|
||
|
||
if (!isVisible) {
|
||
return null;
|
||
}
|
||
|
||
var dragHandleClassNames = classnames_default()('editor-block-mover__control-drag-handle block-editor-block-mover__control-drag-handle', className);
|
||
return Object(external_this_wp_element_["createElement"])(block_draggable, {
|
||
clientId: clientId,
|
||
blockElementId: blockElementId,
|
||
onDragStart: onDragStart,
|
||
onDragEnd: onDragEnd
|
||
}, function (_ref2) {
|
||
var onDraggableStart = _ref2.onDraggableStart,
|
||
onDraggableEnd = _ref2.onDraggableEnd;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: dragHandleClassNames,
|
||
"aria-hidden": "true",
|
||
onDragStart: onDraggableStart,
|
||
onDragEnd: onDraggableEnd,
|
||
draggable: true
|
||
}, icon);
|
||
});
|
||
};
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-mover/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
var block_mover_BlockMover =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockMover, _Component);
|
||
|
||
function BlockMover() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockMover);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockMover).apply(this, arguments));
|
||
_this.state = {
|
||
isFocused: false
|
||
};
|
||
_this.onFocus = _this.onFocus.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onBlur = _this.onBlur.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockMover, [{
|
||
key: "onFocus",
|
||
value: function onFocus() {
|
||
this.setState({
|
||
isFocused: true
|
||
});
|
||
}
|
||
}, {
|
||
key: "onBlur",
|
||
value: function onBlur() {
|
||
this.setState({
|
||
isFocused: false
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props = this.props,
|
||
onMoveUp = _this$props.onMoveUp,
|
||
onMoveDown = _this$props.onMoveDown,
|
||
isFirst = _this$props.isFirst,
|
||
isLast = _this$props.isLast,
|
||
isDraggable = _this$props.isDraggable,
|
||
onDragStart = _this$props.onDragStart,
|
||
onDragEnd = _this$props.onDragEnd,
|
||
clientIds = _this$props.clientIds,
|
||
blockElementId = _this$props.blockElementId,
|
||
blockType = _this$props.blockType,
|
||
firstIndex = _this$props.firstIndex,
|
||
isLocked = _this$props.isLocked,
|
||
instanceId = _this$props.instanceId,
|
||
isHidden = _this$props.isHidden,
|
||
rootClientId = _this$props.rootClientId;
|
||
var isFocused = this.state.isFocused;
|
||
var blocksCount = Object(external_lodash_["castArray"])(clientIds).length;
|
||
|
||
if (isLocked || isFirst && isLast && !rootClientId) {
|
||
return null;
|
||
} // We emulate a disabled state because forcefully applying the `disabled`
|
||
// attribute on the button while it has focus causes the screen to change
|
||
// to an unfocused state (body as active element) without firing blur on,
|
||
// the rendering parent, leaving it unable to react to focus out.
|
||
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: classnames_default()('editor-block-mover block-editor-block-mover', {
|
||
'is-visible': isFocused || !isHidden
|
||
})
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
className: "editor-block-mover__control block-editor-block-mover__control",
|
||
onClick: isFirst ? null : onMoveUp,
|
||
icon: upArrow,
|
||
label: Object(external_this_wp_i18n_["__"])('Move up'),
|
||
"aria-describedby": "block-editor-block-mover__up-description-".concat(instanceId),
|
||
"aria-disabled": isFirst,
|
||
onFocus: this.onFocus,
|
||
onBlur: this.onBlur
|
||
}), Object(external_this_wp_element_["createElement"])(drag_handle_IconDragHandle, {
|
||
className: "editor-block-mover__control block-editor-block-mover__control",
|
||
icon: dragHandle,
|
||
clientId: clientIds,
|
||
blockElementId: blockElementId,
|
||
isVisible: isDraggable,
|
||
onDragStart: onDragStart,
|
||
onDragEnd: onDragEnd
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
className: "editor-block-mover__control block-editor-block-mover__control",
|
||
onClick: isLast ? null : onMoveDown,
|
||
icon: downArrow,
|
||
label: Object(external_this_wp_i18n_["__"])('Move down'),
|
||
"aria-describedby": "block-editor-block-mover__down-description-".concat(instanceId),
|
||
"aria-disabled": isLast,
|
||
onFocus: this.onFocus,
|
||
onBlur: this.onBlur
|
||
}), Object(external_this_wp_element_["createElement"])("span", {
|
||
id: "block-editor-block-mover__up-description-".concat(instanceId),
|
||
className: "editor-block-mover__description block-editor-block-mover__description"
|
||
}, getBlockMoverDescription(blocksCount, blockType && blockType.title, firstIndex, isFirst, isLast, -1)), Object(external_this_wp_element_["createElement"])("span", {
|
||
id: "block-editor-block-mover__down-description-".concat(instanceId),
|
||
className: "editor-block-mover__description block-editor-block-mover__description"
|
||
}, getBlockMoverDescription(blocksCount, blockType && blockType.title, firstIndex, isFirst, isLast, 1)));
|
||
}
|
||
}]);
|
||
|
||
return BlockMover;
|
||
}(external_this_wp_element_["Component"]);
|
||
/* harmony default export */ var block_mover = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withSelect"])(function (select, _ref) {
|
||
var clientIds = _ref.clientIds;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlock = _select.getBlock,
|
||
getBlockIndex = _select.getBlockIndex,
|
||
getTemplateLock = _select.getTemplateLock,
|
||
getBlockRootClientId = _select.getBlockRootClientId,
|
||
getBlockOrder = _select.getBlockOrder;
|
||
|
||
var normalizedClientIds = Object(external_lodash_["castArray"])(clientIds);
|
||
var firstClientId = Object(external_lodash_["first"])(normalizedClientIds);
|
||
var block = getBlock(firstClientId);
|
||
var rootClientId = getBlockRootClientId(Object(external_lodash_["first"])(normalizedClientIds));
|
||
var blockOrder = getBlockOrder(rootClientId);
|
||
var firstIndex = getBlockIndex(firstClientId, rootClientId);
|
||
var lastIndex = getBlockIndex(Object(external_lodash_["last"])(normalizedClientIds), rootClientId);
|
||
return {
|
||
blockType: block ? Object(external_this_wp_blocks_["getBlockType"])(block.name) : null,
|
||
isLocked: getTemplateLock(rootClientId) === 'all',
|
||
rootClientId: rootClientId,
|
||
firstIndex: firstIndex,
|
||
isFirst: firstIndex === 0,
|
||
isLast: lastIndex === blockOrder.length - 1
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref2) {
|
||
var clientIds = _ref2.clientIds,
|
||
rootClientId = _ref2.rootClientId;
|
||
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
moveBlocksDown = _dispatch.moveBlocksDown,
|
||
moveBlocksUp = _dispatch.moveBlocksUp;
|
||
|
||
return {
|
||
onMoveDown: Object(external_lodash_["partial"])(moveBlocksDown, clientIds, rootClientId),
|
||
onMoveUp: Object(external_lodash_["partial"])(moveBlocksUp, clientIds, rootClientId)
|
||
};
|
||
}), external_this_wp_compose_["withInstanceId"])(block_mover_BlockMover));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/warning/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
function Warning(_ref) {
|
||
var className = _ref.className,
|
||
actions = _ref.actions,
|
||
children = _ref.children,
|
||
secondaryActions = _ref.secondaryActions;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: classnames_default()(className, 'editor-warning block-editor-warning')
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-warning__contents block-editor-warning__contents"
|
||
}, Object(external_this_wp_element_["createElement"])("p", {
|
||
className: "editor-warning__message block-editor-warning__message"
|
||
}, children), external_this_wp_element_["Children"].count(actions) > 0 && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-warning__actions block-editor-warning__actions"
|
||
}, external_this_wp_element_["Children"].map(actions, function (action, i) {
|
||
return Object(external_this_wp_element_["createElement"])("span", {
|
||
key: i,
|
||
className: "editor-warning__action block-editor-warning__action"
|
||
}, action);
|
||
}))), secondaryActions && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Dropdown"], {
|
||
className: "editor-warning__secondary block-editor-warning__secondary",
|
||
position: "bottom left",
|
||
renderToggle: function renderToggle(_ref2) {
|
||
var isOpen = _ref2.isOpen,
|
||
onToggle = _ref2.onToggle;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
icon: "ellipsis",
|
||
label: Object(external_this_wp_i18n_["__"])('More options'),
|
||
onClick: onToggle,
|
||
"aria-expanded": isOpen
|
||
});
|
||
},
|
||
renderContent: function renderContent() {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuGroup"], null, secondaryActions.map(function (item, pos) {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuItem"], {
|
||
onClick: item.onClick,
|
||
key: pos
|
||
}, item.title);
|
||
}));
|
||
}
|
||
}));
|
||
}
|
||
|
||
/* harmony default export */ var warning = (Warning);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/diff/dist/diff.js
|
||
var dist_diff = __webpack_require__(227);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-compare/block-view.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
var block_view_BlockView = function BlockView(_ref) {
|
||
var title = _ref.title,
|
||
rawContent = _ref.rawContent,
|
||
renderedContent = _ref.renderedContent,
|
||
action = _ref.action,
|
||
actionText = _ref.actionText,
|
||
className = _ref.className;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: className
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-compare__content block-editor-block-compare__content"
|
||
}, Object(external_this_wp_element_["createElement"])("h2", {
|
||
className: "editor-block-compare__heading block-editor-block-compare__heading"
|
||
}, title), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-compare__html block-editor-block-compare__html"
|
||
}, rawContent), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-compare__preview block-editor-block-compare__preview edit-post-visual-editor"
|
||
}, renderedContent)), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-compare__action block-editor-block-compare__action"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
isLarge: true,
|
||
tabIndex: "0",
|
||
onClick: action
|
||
}, actionText)));
|
||
};
|
||
|
||
/* harmony default export */ var block_view = (block_view_BlockView);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-compare/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var block_compare_BlockCompare =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockCompare, _Component);
|
||
|
||
function BlockCompare() {
|
||
Object(classCallCheck["a" /* default */])(this, BlockCompare);
|
||
|
||
return Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockCompare).apply(this, arguments));
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockCompare, [{
|
||
key: "getDifference",
|
||
value: function getDifference(originalContent, newContent) {
|
||
var difference = Object(dist_diff["diffChars"])(originalContent, newContent);
|
||
return difference.map(function (item, pos) {
|
||
var classes = classnames_default()({
|
||
'editor-block-compare__added block-editor-block-compare__added': item.added,
|
||
'editor-block-compare__removed block-editor-block-compare__removed': item.removed
|
||
});
|
||
return Object(external_this_wp_element_["createElement"])("span", {
|
||
key: pos,
|
||
className: classes
|
||
}, item.value);
|
||
});
|
||
}
|
||
}, {
|
||
key: "getOriginalContent",
|
||
value: function getOriginalContent(block) {
|
||
return {
|
||
rawContent: block.originalContent,
|
||
renderedContent: Object(external_this_wp_blocks_["getSaveElement"])(block.name, block.attributes)
|
||
};
|
||
}
|
||
}, {
|
||
key: "getConvertedContent",
|
||
value: function getConvertedContent(block) {
|
||
// The convertor may return an array of items or a single item
|
||
var newBlocks = Object(external_lodash_["castArray"])(block); // Get converted block details
|
||
|
||
var newContent = newBlocks.map(function (item) {
|
||
return Object(external_this_wp_blocks_["getSaveContent"])(item.name, item.attributes, item.innerBlocks);
|
||
});
|
||
var renderedContent = newBlocks.map(function (item) {
|
||
return Object(external_this_wp_blocks_["getSaveElement"])(item.name, item.attributes, item.innerBlocks);
|
||
});
|
||
return {
|
||
rawContent: newContent.join(''),
|
||
renderedContent: renderedContent
|
||
};
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props = this.props,
|
||
block = _this$props.block,
|
||
onKeep = _this$props.onKeep,
|
||
onConvert = _this$props.onConvert,
|
||
convertor = _this$props.convertor,
|
||
convertButtonText = _this$props.convertButtonText;
|
||
var original = this.getOriginalContent(block);
|
||
var converted = this.getConvertedContent(convertor(block));
|
||
var difference = this.getDifference(original.rawContent, converted.rawContent);
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-compare__wrapper block-editor-block-compare__wrapper"
|
||
}, Object(external_this_wp_element_["createElement"])(block_view, {
|
||
title: Object(external_this_wp_i18n_["__"])('Current'),
|
||
className: "editor-block-compare__current block-editor-block-compare__current",
|
||
action: onKeep,
|
||
actionText: Object(external_this_wp_i18n_["__"])('Convert to HTML'),
|
||
rawContent: original.rawContent,
|
||
renderedContent: original.renderedContent
|
||
}), Object(external_this_wp_element_["createElement"])(block_view, {
|
||
title: Object(external_this_wp_i18n_["__"])('After Conversion'),
|
||
className: "editor-block-compare__converted block-editor-block-compare__converted",
|
||
action: onConvert,
|
||
actionText: convertButtonText,
|
||
rawContent: difference,
|
||
renderedContent: converted.renderedContent
|
||
}));
|
||
}
|
||
}]);
|
||
|
||
return BlockCompare;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var block_compare = (block_compare_BlockCompare);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-invalid-warning.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var block_invalid_warning_BlockInvalidWarning =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockInvalidWarning, _Component);
|
||
|
||
function BlockInvalidWarning(props) {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockInvalidWarning);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockInvalidWarning).call(this, props));
|
||
_this.state = {
|
||
compare: false
|
||
};
|
||
_this.onCompare = _this.onCompare.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onCompareClose = _this.onCompareClose.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockInvalidWarning, [{
|
||
key: "onCompare",
|
||
value: function onCompare() {
|
||
this.setState({
|
||
compare: true
|
||
});
|
||
}
|
||
}, {
|
||
key: "onCompareClose",
|
||
value: function onCompareClose() {
|
||
this.setState({
|
||
compare: false
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props = this.props,
|
||
convertToHTML = _this$props.convertToHTML,
|
||
convertToBlocks = _this$props.convertToBlocks,
|
||
convertToClassic = _this$props.convertToClassic,
|
||
attemptBlockRecovery = _this$props.attemptBlockRecovery,
|
||
block = _this$props.block;
|
||
var hasHTMLBlock = !!Object(external_this_wp_blocks_["getBlockType"])('core/html');
|
||
var compare = this.state.compare;
|
||
var hiddenActions = [{
|
||
title: Object(external_this_wp_i18n_["__"])('Convert to Classic Block'),
|
||
onClick: convertToClassic
|
||
}, {
|
||
title: Object(external_this_wp_i18n_["__"])('Attempt Block Recovery'),
|
||
onClick: attemptBlockRecovery
|
||
}];
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(warning, {
|
||
actions: [Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
key: "convert",
|
||
onClick: this.onCompare,
|
||
isLarge: true,
|
||
isPrimary: !hasHTMLBlock
|
||
}, // translators: Button to fix block content
|
||
Object(external_this_wp_i18n_["_x"])('Resolve', 'imperative verb')), hasHTMLBlock && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
key: "edit",
|
||
onClick: convertToHTML,
|
||
isLarge: true,
|
||
isPrimary: true
|
||
}, Object(external_this_wp_i18n_["__"])('Convert to HTML'))],
|
||
secondaryActions: hiddenActions
|
||
}, Object(external_this_wp_i18n_["__"])('This block contains unexpected or invalid content.')), compare && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Modal"], {
|
||
title: // translators: Dialog title to fix block content
|
||
Object(external_this_wp_i18n_["__"])('Resolve Block'),
|
||
onRequestClose: this.onCompareClose,
|
||
className: "editor-block-compare block-editor-block-compare"
|
||
}, Object(external_this_wp_element_["createElement"])(block_compare, {
|
||
block: block,
|
||
onKeep: convertToHTML,
|
||
onConvert: convertToBlocks,
|
||
convertor: block_invalid_warning_blockToBlocks,
|
||
convertButtonText: Object(external_this_wp_i18n_["__"])('Convert to Blocks')
|
||
})));
|
||
}
|
||
}]);
|
||
|
||
return BlockInvalidWarning;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
var block_invalid_warning_blockToClassic = function blockToClassic(block) {
|
||
return Object(external_this_wp_blocks_["createBlock"])('core/freeform', {
|
||
content: block.originalContent
|
||
});
|
||
};
|
||
|
||
var block_invalid_warning_blockToHTML = function blockToHTML(block) {
|
||
return Object(external_this_wp_blocks_["createBlock"])('core/html', {
|
||
content: block.originalContent
|
||
});
|
||
};
|
||
|
||
var block_invalid_warning_blockToBlocks = function blockToBlocks(block) {
|
||
return Object(external_this_wp_blocks_["rawHandler"])({
|
||
HTML: block.originalContent
|
||
});
|
||
};
|
||
|
||
var block_invalid_warning_recoverBlock = function recoverBlock(_ref) {
|
||
var name = _ref.name,
|
||
attributes = _ref.attributes,
|
||
innerBlocks = _ref.innerBlocks;
|
||
return Object(external_this_wp_blocks_["createBlock"])(name, attributes, innerBlocks);
|
||
};
|
||
|
||
/* harmony default export */ var block_invalid_warning = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select, _ref2) {
|
||
var clientId = _ref2.clientId;
|
||
return {
|
||
block: select('core/block-editor').getBlock(clientId)
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref3) {
|
||
var block = _ref3.block;
|
||
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
replaceBlock = _dispatch.replaceBlock;
|
||
|
||
return {
|
||
convertToClassic: function convertToClassic() {
|
||
replaceBlock(block.clientId, block_invalid_warning_blockToClassic(block));
|
||
},
|
||
convertToHTML: function convertToHTML() {
|
||
replaceBlock(block.clientId, block_invalid_warning_blockToHTML(block));
|
||
},
|
||
convertToBlocks: function convertToBlocks() {
|
||
replaceBlock(block.clientId, block_invalid_warning_blockToBlocks(block));
|
||
},
|
||
attemptBlockRecovery: function attemptBlockRecovery() {
|
||
replaceBlock(block.clientId, block_invalid_warning_recoverBlock(block));
|
||
}
|
||
};
|
||
})])(block_invalid_warning_BlockInvalidWarning));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-crash-warning.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
var block_crash_warning_warning = Object(external_this_wp_element_["createElement"])(warning, {
|
||
className: "block-editor-block-list__block-crash-warning"
|
||
}, Object(external_this_wp_i18n_["__"])('This block has encountered an error and cannot be previewed.'));
|
||
/* harmony default export */ var block_crash_warning = (function () {
|
||
return block_crash_warning_warning;
|
||
});
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-crash-boundary.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
var block_crash_boundary_BlockCrashBoundary =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockCrashBoundary, _Component);
|
||
|
||
function BlockCrashBoundary() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockCrashBoundary);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockCrashBoundary).apply(this, arguments));
|
||
_this.state = {
|
||
hasError: false
|
||
};
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockCrashBoundary, [{
|
||
key: "componentDidCatch",
|
||
value: function componentDidCatch(error) {
|
||
this.props.onError(error);
|
||
this.setState({
|
||
hasError: true
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
if (this.state.hasError) {
|
||
return null;
|
||
}
|
||
|
||
return this.props.children;
|
||
}
|
||
}]);
|
||
|
||
return BlockCrashBoundary;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var block_crash_boundary = (block_crash_boundary_BlockCrashBoundary);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/react-autosize-textarea/lib/index.js
|
||
var react_autosize_textarea_lib = __webpack_require__(64);
|
||
var react_autosize_textarea_lib_default = /*#__PURE__*/__webpack_require__.n(react_autosize_textarea_lib);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-html.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
var block_html_BlockHTML =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockHTML, _Component);
|
||
|
||
function BlockHTML(props) {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockHTML);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockHTML).apply(this, arguments));
|
||
_this.onChange = _this.onChange.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onBlur = _this.onBlur.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.state = {
|
||
html: props.block.isValid ? Object(external_this_wp_blocks_["getBlockContent"])(props.block) : props.block.originalContent
|
||
};
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockHTML, [{
|
||
key: "componentDidUpdate",
|
||
value: function componentDidUpdate(prevProps) {
|
||
if (!Object(external_lodash_["isEqual"])(this.props.block.attributes, prevProps.block.attributes)) {
|
||
this.setState({
|
||
html: Object(external_this_wp_blocks_["getBlockContent"])(this.props.block)
|
||
});
|
||
}
|
||
}
|
||
}, {
|
||
key: "onBlur",
|
||
value: function onBlur() {
|
||
var html = this.state.html;
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(this.props.block.name);
|
||
var attributes = Object(external_this_wp_blocks_["getBlockAttributes"])(blockType, html, this.props.block.attributes); // If html is empty we reset the block to the default HTML and mark it as valid to avoid triggering an error
|
||
|
||
var content = html ? html : Object(external_this_wp_blocks_["getSaveContent"])(blockType, attributes);
|
||
var isValid = html ? Object(external_this_wp_blocks_["isValidBlockContent"])(blockType, attributes, content) : true;
|
||
this.props.onChange(this.props.clientId, attributes, content, isValid); // Ensure the state is updated if we reset so it displays the default content
|
||
|
||
if (!html) {
|
||
this.setState({
|
||
html: content
|
||
});
|
||
}
|
||
}
|
||
}, {
|
||
key: "onChange",
|
||
value: function onChange(event) {
|
||
this.setState({
|
||
html: event.target.value
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var html = this.state.html;
|
||
return Object(external_this_wp_element_["createElement"])(react_autosize_textarea_lib_default.a, {
|
||
className: "editor-block-list__block-html-textarea block-editor-block-list__block-html-textarea",
|
||
value: html,
|
||
onBlur: this.onBlur,
|
||
onChange: this.onChange
|
||
});
|
||
}
|
||
}]);
|
||
|
||
return BlockHTML;
|
||
}(external_this_wp_element_["Component"]);
|
||
/* harmony default export */ var block_html = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select, ownProps) {
|
||
return {
|
||
block: select('core/block-editor').getBlock(ownProps.clientId)
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch) {
|
||
return {
|
||
onChange: function onChange(clientId, attributes, originalContent, isValid) {
|
||
dispatch('core/block-editor').updateBlock(clientId, {
|
||
attributes: attributes,
|
||
originalContent: originalContent,
|
||
isValid: isValid
|
||
});
|
||
}
|
||
};
|
||
})])(block_html_BlockHTML));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-title/index.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Renders the block's configured title as a string, or empty if the title
|
||
* cannot be determined.
|
||
*
|
||
* @example
|
||
*
|
||
* ```jsx
|
||
* <BlockTitle clientId="afd1cb17-2c08-4e7a-91be-007ba7ddc3a1" />
|
||
* ```
|
||
*
|
||
* @param {Object} props
|
||
* @param {?string} props.name Block name.
|
||
*
|
||
* @return {?string} Block title.
|
||
*/
|
||
|
||
function BlockTitle(_ref) {
|
||
var name = _ref.name;
|
||
|
||
if (!name) {
|
||
return null;
|
||
}
|
||
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(name);
|
||
|
||
if (!blockType) {
|
||
return null;
|
||
}
|
||
|
||
return blockType.title;
|
||
}
|
||
/* harmony default export */ var block_title = (Object(external_this_wp_data_["withSelect"])(function (select, ownProps) {
|
||
var _select = select('core/block-editor'),
|
||
getBlockName = _select.getBlockName;
|
||
|
||
var clientId = ownProps.clientId;
|
||
return {
|
||
name: getBlockName(clientId)
|
||
};
|
||
})(BlockTitle));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/breadcrumb.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Block breadcrumb component, displaying the label of the block. If the block
|
||
* descends from a root block, a button is displayed enabling the user to select
|
||
* the root block.
|
||
*
|
||
* @param {string} props.clientId Client ID of block.
|
||
* @return {WPElement} Block Breadcrumb.
|
||
*/
|
||
|
||
var BlockBreadcrumb = Object(external_this_wp_element_["forwardRef"])(function (_ref, ref) {
|
||
var clientId = _ref.clientId;
|
||
|
||
var _useDispatch = Object(external_this_wp_data_["useDispatch"])('core/block-editor'),
|
||
setNavigationMode = _useDispatch.setNavigationMode;
|
||
|
||
var _useSelect = Object(external_this_wp_data_["useSelect"])(function (select) {
|
||
return {
|
||
rootClientId: select('core/block-editor').getBlockRootClientId(clientId)
|
||
};
|
||
}),
|
||
rootClientId = _useSelect.rootClientId;
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-list__breadcrumb block-editor-block-list__breadcrumb"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], null, rootClientId && Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(block_title, {
|
||
clientId: rootClientId
|
||
}), Object(external_this_wp_element_["createElement"])("span", {
|
||
className: "editor-block-list__descendant-arrow block-editor-block-list__descendant-arrow"
|
||
})), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
ref: ref,
|
||
onClick: function onClick() {
|
||
return setNavigationMode(false);
|
||
}
|
||
}, Object(external_this_wp_element_["createElement"])(block_title, {
|
||
clientId: clientId
|
||
}))));
|
||
});
|
||
/* harmony default export */ var block_list_breadcrumb = (BlockBreadcrumb);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/navigable-toolbar/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
var navigable_toolbar_NavigableToolbar =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(NavigableToolbar, _Component);
|
||
|
||
function NavigableToolbar() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, NavigableToolbar);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(NavigableToolbar).apply(this, arguments));
|
||
_this.focusToolbar = _this.focusToolbar.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.toolbar = Object(external_this_wp_element_["createRef"])();
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(NavigableToolbar, [{
|
||
key: "focusToolbar",
|
||
value: function focusToolbar() {
|
||
var tabbables = external_this_wp_dom_["focus"].tabbable.find(this.toolbar.current);
|
||
|
||
if (tabbables.length) {
|
||
tabbables[0].focus();
|
||
}
|
||
}
|
||
}, {
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
if (this.props.focusOnMount) {
|
||
this.focusToolbar();
|
||
} // We use DOM event listeners instead of React event listeners
|
||
// because we want to catch events from the underlying DOM tree
|
||
// The React Tree can be different from the DOM tree when using
|
||
// portals. Block Toolbars for instance are rendered in a separate
|
||
// React Tree.
|
||
|
||
|
||
this.toolbar.current.addEventListener('keydown', this.switchOnKeyDown);
|
||
}
|
||
}, {
|
||
key: "componentwillUnmount",
|
||
value: function componentwillUnmount() {
|
||
this.toolbar.current.removeEventListener('keydown', this.switchOnKeyDown);
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props = this.props,
|
||
children = _this$props.children,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_this$props, ["children"]);
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["NavigableMenu"], Object(esm_extends["a" /* default */])({
|
||
orientation: "horizontal",
|
||
role: "toolbar",
|
||
ref: this.toolbar
|
||
}, Object(external_lodash_["omit"])(props, ['focusOnMount'])), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["KeyboardShortcuts"], {
|
||
bindGlobal: true // Use the same event that TinyMCE uses in the Classic block for its own `alt+f10` shortcut.
|
||
,
|
||
eventName: "keydown",
|
||
shortcuts: {
|
||
'alt+f10': this.focusToolbar
|
||
}
|
||
}), children);
|
||
}
|
||
}]);
|
||
|
||
return NavigableToolbar;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var navigable_toolbar = (navigable_toolbar_NavigableToolbar);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-contextual-toolbar.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
function BlockContextualToolbar(_ref) {
|
||
var focusOnMount = _ref.focusOnMount;
|
||
return Object(external_this_wp_element_["createElement"])(navigable_toolbar, {
|
||
focusOnMount: focusOnMount,
|
||
className: "editor-block-contextual-toolbar block-editor-block-contextual-toolbar"
|
||
/* translators: accessibility text for the block toolbar */
|
||
,
|
||
"aria-label": Object(external_this_wp_i18n_["__"])('Block tools')
|
||
}, Object(external_this_wp_element_["createElement"])(block_toolbar, null));
|
||
}
|
||
|
||
/* harmony default export */ var block_contextual_toolbar = (BlockContextualToolbar);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/multi-controls.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
function BlockListMultiControls(_ref) {
|
||
var multiSelectedBlockClientIds = _ref.multiSelectedBlockClientIds,
|
||
isSelecting = _ref.isSelecting;
|
||
|
||
if (isSelecting) {
|
||
return null;
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(block_mover, {
|
||
clientIds: multiSelectedBlockClientIds
|
||
});
|
||
}
|
||
|
||
/* harmony default export */ var multi_controls = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getMultiSelectedBlockClientIds = _select.getMultiSelectedBlockClientIds,
|
||
isMultiSelecting = _select.isMultiSelecting;
|
||
|
||
var clientIds = getMultiSelectedBlockClientIds();
|
||
return {
|
||
multiSelectedBlockClientIds: clientIds,
|
||
isSelecting: isMultiSelecting()
|
||
};
|
||
})(BlockListMultiControls));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-mobile-toolbar.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
function BlockMobileToolbar(_ref) {
|
||
var clientId = _ref.clientId;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-list__block-mobile-toolbar block-editor-block-list__block-mobile-toolbar"
|
||
}, Object(external_this_wp_element_["createElement"])(inserter, null), Object(external_this_wp_element_["createElement"])(block_mover, {
|
||
clientIds: [clientId]
|
||
}));
|
||
}
|
||
|
||
/* harmony default export */ var block_mobile_toolbar = (Object(external_this_wp_viewport_["ifViewportMatches"])('< small')(BlockMobileToolbar));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/insertion-point.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var insertion_point_BlockInsertionPoint =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockInsertionPoint, _Component);
|
||
|
||
function BlockInsertionPoint() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockInsertionPoint);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockInsertionPoint).apply(this, arguments));
|
||
_this.state = {
|
||
isInserterFocused: false
|
||
};
|
||
_this.onBlurInserter = _this.onBlurInserter.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onFocusInserter = _this.onFocusInserter.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockInsertionPoint, [{
|
||
key: "onFocusInserter",
|
||
value: function onFocusInserter(event) {
|
||
// Stop propagation of the focus event to avoid selecting the current
|
||
// block while inserting a new block, as it is not relevant to sibling
|
||
// insertion and conflicts with contextual toolbar placement.
|
||
event.stopPropagation();
|
||
this.setState({
|
||
isInserterFocused: true
|
||
});
|
||
}
|
||
}, {
|
||
key: "onBlurInserter",
|
||
value: function onBlurInserter() {
|
||
this.setState({
|
||
isInserterFocused: false
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var isInserterFocused = this.state.isInserterFocused;
|
||
var _this$props = this.props,
|
||
showInsertionPoint = _this$props.showInsertionPoint,
|
||
rootClientId = _this$props.rootClientId,
|
||
clientId = _this$props.clientId;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-list__insertion-point block-editor-block-list__insertion-point"
|
||
}, showInsertionPoint && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-list__insertion-point-indicator block-editor-block-list__insertion-point-indicator"
|
||
}), Object(external_this_wp_element_["createElement"])("div", {
|
||
onFocus: this.onFocusInserter,
|
||
onBlur: this.onBlurInserter // While ideally it would be enough to capture the
|
||
// bubbling focus event from the Inserter, due to the
|
||
// characteristics of click focusing of `button`s in
|
||
// Firefox and Safari, it is not reliable.
|
||
//
|
||
// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
|
||
,
|
||
tabIndex: -1,
|
||
className: classnames_default()('editor-block-list__insertion-point-inserter block-editor-block-list__insertion-point-inserter', {
|
||
'is-visible': isInserterFocused
|
||
})
|
||
}, Object(external_this_wp_element_["createElement"])(inserter, {
|
||
rootClientId: rootClientId,
|
||
clientId: clientId
|
||
})));
|
||
}
|
||
}]);
|
||
|
||
return BlockInsertionPoint;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var insertion_point = (Object(external_this_wp_data_["withSelect"])(function (select, _ref) {
|
||
var clientId = _ref.clientId,
|
||
rootClientId = _ref.rootClientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlockIndex = _select.getBlockIndex,
|
||
getBlockInsertionPoint = _select.getBlockInsertionPoint,
|
||
isBlockInsertionPointVisible = _select.isBlockInsertionPointVisible;
|
||
|
||
var blockIndex = getBlockIndex(clientId, rootClientId);
|
||
var insertionPoint = getBlockInsertionPoint();
|
||
var showInsertionPoint = isBlockInsertionPointVisible() && insertionPoint.index === blockIndex && insertionPoint.rootClientId === rootClientId;
|
||
return {
|
||
showInsertionPoint: showInsertionPoint
|
||
};
|
||
})(insertion_point_BlockInsertionPoint));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/ignore-nested-events/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Component which renders a div with passed props applied except the optional
|
||
* `childHandledEvents` prop. Event prop handlers are replaced with a proxying
|
||
* event handler to capture and prevent events from being handled by ancestor
|
||
* `IgnoreNestedEvents` elements by testing the presence of a private property
|
||
* assigned on the event object.
|
||
*
|
||
* Optionally accepts an `childHandledEvents` prop array, which can be used in
|
||
* instances where an inner `IgnoreNestedEvents` element exists and the outer
|
||
* element should stop propagation but not invoke a callback handler, since it
|
||
* would be assumed these are invoked by the child element.
|
||
*
|
||
* @type {Component}
|
||
*/
|
||
|
||
var ignore_nested_events_IgnoreNestedEvents =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(IgnoreNestedEvents, _Component);
|
||
|
||
function IgnoreNestedEvents() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, IgnoreNestedEvents);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(IgnoreNestedEvents).apply(this, arguments));
|
||
_this.proxyEvent = _this.proxyEvent.bind(Object(assertThisInitialized["a" /* default */])(_this)); // The event map is responsible for tracking an event type to a React
|
||
// component prop name, since it is easy to determine event type from
|
||
// a React prop name, but not the other way around.
|
||
|
||
_this.eventMap = {};
|
||
return _this;
|
||
}
|
||
/**
|
||
* General event handler which only calls to its original props callback if
|
||
* it has not already been handled by a descendant IgnoreNestedEvents.
|
||
*
|
||
* @param {Event} event Event object.
|
||
*/
|
||
|
||
|
||
Object(createClass["a" /* default */])(IgnoreNestedEvents, [{
|
||
key: "proxyEvent",
|
||
value: function proxyEvent(event) {
|
||
var isHandled = !!event.nativeEvent._blockHandled; // Assign into the native event, since React will reuse their synthetic
|
||
// event objects and this property assignment could otherwise leak.
|
||
//
|
||
// See: https://reactjs.org/docs/events.html#event-pooling
|
||
|
||
event.nativeEvent._blockHandled = true; // Invoke original prop handler
|
||
|
||
var propKey = this.eventMap[event.type]; // If already handled (i.e. assume nested block), only invoke a
|
||
// corresponding "Handled"-suffixed prop callback.
|
||
|
||
if (isHandled) {
|
||
propKey += 'Handled';
|
||
}
|
||
|
||
if (this.props[propKey]) {
|
||
this.props[propKey](event);
|
||
}
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this2 = this;
|
||
|
||
var _this$props = this.props,
|
||
_this$props$childHand = _this$props.childHandledEvents,
|
||
childHandledEvents = _this$props$childHand === void 0 ? [] : _this$props$childHand,
|
||
forwardedRef = _this$props.forwardedRef,
|
||
_this$props$tagName = _this$props.tagName,
|
||
tagName = _this$props$tagName === void 0 ? 'div' : _this$props$tagName,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_this$props, ["childHandledEvents", "forwardedRef", "tagName"]);
|
||
|
||
var eventHandlers = Object(external_lodash_["reduce"])([].concat(Object(toConsumableArray["a" /* default */])(childHandledEvents), Object(toConsumableArray["a" /* default */])(Object.keys(props))), function (result, key) {
|
||
// Try to match prop key as event handler
|
||
var match = key.match(/^on([A-Z][a-zA-Z]+?)(Handled)?$/);
|
||
|
||
if (match) {
|
||
var isHandledProp = !!match[2];
|
||
|
||
if (isHandledProp) {
|
||
// Avoid assigning through the invalid prop key. This
|
||
// assumes mutation of shallow clone by above spread.
|
||
delete props[key];
|
||
} // Re-map the prop to the local proxy handler to check whether
|
||
// the event has already been handled.
|
||
|
||
|
||
var proxiedPropName = 'on' + match[1];
|
||
result[proxiedPropName] = _this2.proxyEvent; // Assign event -> propName into an instance variable, so as to
|
||
// avoid re-renders which could be incurred either by setState
|
||
// or in mapping values to a newly created function.
|
||
|
||
_this2.eventMap[match[1].toLowerCase()] = proxiedPropName;
|
||
}
|
||
|
||
return result;
|
||
}, {});
|
||
return Object(external_this_wp_element_["createElement"])(tagName, Object(objectSpread["a" /* default */])({
|
||
ref: forwardedRef
|
||
}, props, eventHandlers));
|
||
}
|
||
}]);
|
||
|
||
return IgnoreNestedEvents;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
var ignore_nested_events_forwardedIgnoreNestedEvents = function forwardedIgnoreNestedEvents(props, ref) {
|
||
return Object(external_this_wp_element_["createElement"])(ignore_nested_events_IgnoreNestedEvents, Object(esm_extends["a" /* default */])({}, props, {
|
||
forwardedRef: ref
|
||
}));
|
||
};
|
||
|
||
ignore_nested_events_forwardedIgnoreNestedEvents.displayName = 'IgnoreNestedEvents';
|
||
/* harmony default export */ var ignore_nested_events = (Object(external_this_wp_element_["forwardRef"])(ignore_nested_events_forwardedIgnoreNestedEvents));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-with-shortcuts/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
function InserterWithShortcuts(_ref) {
|
||
var items = _ref.items,
|
||
isLocked = _ref.isLocked,
|
||
onInsert = _ref.onInsert;
|
||
|
||
if (isLocked) {
|
||
return null;
|
||
}
|
||
|
||
var itemsWithoutDefaultBlock = Object(external_lodash_["filter"])(items, function (item) {
|
||
return !item.isDisabled && (item.name !== Object(external_this_wp_blocks_["getDefaultBlockName"])() || !Object(external_lodash_["isEmpty"])(item.initialAttributes));
|
||
}).slice(0, 3);
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-inserter-with-shortcuts block-editor-inserter-with-shortcuts"
|
||
}, itemsWithoutDefaultBlock.map(function (item) {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
key: item.id,
|
||
className: "editor-inserter-with-shortcuts__block block-editor-inserter-with-shortcuts__block",
|
||
onClick: function onClick() {
|
||
return onInsert(item);
|
||
} // translators: %s: block title/name to be added
|
||
,
|
||
label: Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["__"])('Add %s'), item.title),
|
||
icon: Object(external_this_wp_element_["createElement"])(BlockIcon, {
|
||
icon: item.icon
|
||
})
|
||
});
|
||
}));
|
||
}
|
||
|
||
/* harmony default export */ var inserter_with_shortcuts = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withSelect"])(function (select, _ref2) {
|
||
var rootClientId = _ref2.rootClientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getInserterItems = _select.getInserterItems,
|
||
getTemplateLock = _select.getTemplateLock;
|
||
|
||
return {
|
||
items: getInserterItems(rootClientId),
|
||
isLocked: !!getTemplateLock(rootClientId)
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps) {
|
||
var clientId = ownProps.clientId,
|
||
rootClientId = ownProps.rootClientId;
|
||
return {
|
||
onInsert: function onInsert(_ref3) {
|
||
var name = _ref3.name,
|
||
initialAttributes = _ref3.initialAttributes;
|
||
var block = Object(external_this_wp_blocks_["createBlock"])(name, initialAttributes);
|
||
|
||
if (clientId) {
|
||
dispatch('core/block-editor').replaceBlocks(clientId, block);
|
||
} else {
|
||
dispatch('core/block-editor').insertBlock(block, undefined, rootClientId);
|
||
}
|
||
}
|
||
};
|
||
}))(InserterWithShortcuts));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/dom.js
|
||
/**
|
||
* Given a block client ID, returns the corresponding DOM node for the block,
|
||
* if exists. As much as possible, this helper should be avoided, and used only
|
||
* in cases where isolated behaviors need remote access to a block node.
|
||
*
|
||
* @param {string} clientId Block client ID.
|
||
* @param {Element} scope an optional DOM Element to which the selector should be scoped
|
||
*
|
||
* @return {Element} Block DOM node.
|
||
*/
|
||
function getBlockDOMNode(clientId) {
|
||
var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
|
||
return scope.querySelector('[data-block="' + clientId + '"]');
|
||
}
|
||
function getBlockPreviewContainerDOMNode(clientId, scope) {
|
||
var domNode = getBlockDOMNode(clientId, scope);
|
||
|
||
if (!domNode) {
|
||
return;
|
||
}
|
||
|
||
return domNode.firstChild || domNode;
|
||
}
|
||
/**
|
||
* Given a block client ID, returns the corresponding DOM node for the block
|
||
* focusable wrapper, if exists. As much as possible, this helper should be
|
||
* avoided, and used only in cases where isolated behaviors need remote access
|
||
* to a block node.
|
||
*
|
||
* @param {string} clientId Block client ID.
|
||
*
|
||
* @return {Element} Block DOM node.
|
||
*/
|
||
|
||
function getBlockFocusableWrapper(clientId) {
|
||
return getBlockDOMNode(clientId).closest('.block-editor-block-list__block');
|
||
}
|
||
/**
|
||
* Returns true if the given HTMLElement is a block focus stop. Blocks without
|
||
* their own text fields rely on the focus stop to be keyboard navigable.
|
||
*
|
||
* @param {HTMLElement} element Element to test.
|
||
*
|
||
* @return {boolean} Whether element is a block focus stop.
|
||
*/
|
||
|
||
function isBlockFocusStop(element) {
|
||
return element.classList.contains('block-editor-block-list__block');
|
||
}
|
||
/**
|
||
* Returns true if two elements are contained within the same block.
|
||
*
|
||
* @param {HTMLElement} a First element.
|
||
* @param {HTMLElement} b Second element.
|
||
*
|
||
* @return {boolean} Whether elements are in the same block.
|
||
*/
|
||
|
||
function isInSameBlock(a, b) {
|
||
return a.closest('[data-block]') === b.closest('[data-block]');
|
||
}
|
||
/**
|
||
* Returns true if an elements is considered part of the block and not its children.
|
||
*
|
||
* @param {HTMLElement} blockElement Block container element.
|
||
* @param {HTMLElement} element Element.
|
||
*
|
||
* @return {boolean} Whether element is in the block Element but not its children.
|
||
*/
|
||
|
||
function isInsideRootBlock(blockElement, element) {
|
||
var innerBlocksContainer = blockElement.querySelector('.block-editor-block-list__layout');
|
||
return blockElement.contains(element) && (!innerBlocksContainer || !innerBlocksContainer.contains(element));
|
||
}
|
||
/**
|
||
* Returns true if the given HTMLElement contains inner blocks (an InnerBlocks
|
||
* element).
|
||
*
|
||
* @param {HTMLElement} element Element to test.
|
||
*
|
||
* @return {boolean} Whether element contains inner blocks.
|
||
*/
|
||
|
||
function hasInnerBlocksContext(element) {
|
||
return !!element.querySelector('.block-editor-block-list__layout');
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/moving-animation.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Simple reducer used to increment a counter.
|
||
*
|
||
* @param {number} state Previous counter value.
|
||
* @return {number} New state value.
|
||
*/
|
||
|
||
var counterReducer = function counterReducer(state) {
|
||
return state + 1;
|
||
};
|
||
|
||
var getAbsolutePosition = function getAbsolutePosition(element) {
|
||
return {
|
||
top: element.offsetTop,
|
||
left: element.offsetLeft
|
||
};
|
||
};
|
||
/**
|
||
* Hook used to compute the styles required to move a div into a new position.
|
||
*
|
||
* The way this animation works is the following:
|
||
* - It first renders the element as if there was no animation.
|
||
* - It takes a snapshot of the position of the block to use it
|
||
* as a destination point for the animation.
|
||
* - It restores the element to the previous position using a CSS transform
|
||
* - It uses the "resetAnimation" flag to reset the animation
|
||
* from the beginning in order to animate to the new destination point.
|
||
*
|
||
* @param {Object} ref Reference to the element to animate.
|
||
* @param {boolean} isSelected Whether it's the current block or not.
|
||
* @param {boolean} adjustScrolling Adjust the scroll position to the current block.
|
||
* @param {boolean} enableAnimation Enable/Disable animation.
|
||
* @param {*} triggerAnimationOnChange Variable used to trigger the animation if it changes.
|
||
*
|
||
* @return {Object} Style object.
|
||
*/
|
||
|
||
|
||
function useMovingAnimation(ref, isSelected, adjustScrolling, enableAnimation, triggerAnimationOnChange) {
|
||
var prefersReducedMotion = Object(external_this_wp_compose_["useReducedMotion"])() || !enableAnimation;
|
||
|
||
var _useReducer = Object(external_this_wp_element_["useReducer"])(counterReducer, 0),
|
||
_useReducer2 = Object(slicedToArray["a" /* default */])(_useReducer, 2),
|
||
triggeredAnimation = _useReducer2[0],
|
||
triggerAnimation = _useReducer2[1];
|
||
|
||
var _useReducer3 = Object(external_this_wp_element_["useReducer"])(counterReducer, 0),
|
||
_useReducer4 = Object(slicedToArray["a" /* default */])(_useReducer3, 2),
|
||
finishedAnimation = _useReducer4[0],
|
||
endAnimation = _useReducer4[1];
|
||
|
||
var _useState = Object(external_this_wp_element_["useState"])({
|
||
x: 0,
|
||
y: 0,
|
||
scrollTop: 0
|
||
}),
|
||
_useState2 = Object(slicedToArray["a" /* default */])(_useState, 2),
|
||
transform = _useState2[0],
|
||
setTransform = _useState2[1];
|
||
|
||
var previous = ref.current ? getAbsolutePosition(ref.current) : null;
|
||
var scrollContainer = Object(external_this_wp_element_["useMemo"])(function () {
|
||
if (!adjustScrolling) {
|
||
return false;
|
||
}
|
||
|
||
return Object(external_this_wp_dom_["getScrollContainer"])(ref.current);
|
||
}, [adjustScrolling]);
|
||
Object(external_this_wp_element_["useLayoutEffect"])(function () {
|
||
if (triggeredAnimation) {
|
||
endAnimation();
|
||
}
|
||
}, [triggeredAnimation]);
|
||
Object(external_this_wp_element_["useLayoutEffect"])(function () {
|
||
if (prefersReducedMotion) {
|
||
if (adjustScrolling && scrollContainer) {
|
||
// if the animation is disabled and the scroll needs to be adjusted,
|
||
// just move directly to the final scroll position
|
||
ref.current.style.transform = 'none';
|
||
|
||
var _destination = getAbsolutePosition(ref.current);
|
||
|
||
scrollContainer.scrollTop = scrollContainer.scrollTop - previous.top + _destination.top;
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
ref.current.style.transform = 'none';
|
||
var destination = getAbsolutePosition(ref.current);
|
||
var newTransform = {
|
||
x: previous ? previous.left - destination.left : 0,
|
||
y: previous ? previous.top - destination.top : 0,
|
||
scrollTop: previous && scrollContainer ? scrollContainer.scrollTop - previous.top + destination.top : 0
|
||
};
|
||
ref.current.style.transform = newTransform.x === 0 && newTransform.y === 0 ? undefined : "translate3d(".concat(newTransform.x, "px,").concat(newTransform.y, "px,0)");
|
||
triggerAnimation();
|
||
setTransform(newTransform);
|
||
}, [triggerAnimationOnChange]);
|
||
var animationProps = Object(web_cjs["useSpring"])({
|
||
from: {
|
||
x: transform.x,
|
||
y: transform.y
|
||
},
|
||
to: {
|
||
x: 0,
|
||
y: 0
|
||
},
|
||
reset: triggeredAnimation !== finishedAnimation,
|
||
config: {
|
||
mass: 5,
|
||
tension: 2000,
|
||
friction: 200
|
||
},
|
||
immediate: prefersReducedMotion,
|
||
onFrame: function onFrame(props) {
|
||
if (adjustScrolling && scrollContainer && !prefersReducedMotion && props.y) {
|
||
scrollContainer.scrollTop = transform.scrollTop + props.y;
|
||
}
|
||
}
|
||
}); // Dismiss animations if disabled.
|
||
|
||
return prefersReducedMotion ? {} : {
|
||
transformOrigin: 'center',
|
||
transform: Object(web_cjs["interpolate"])([animationProps.x, animationProps.y], function (x, y) {
|
||
return x === 0 && y === 0 ? undefined : "translate3d(".concat(x, "px,").concat(y, "px,0)");
|
||
}),
|
||
zIndex: Object(web_cjs["interpolate"])([animationProps.x, animationProps.y], function (x, y) {
|
||
return !isSelected || x === 0 && y === 0 ? undefined : "1";
|
||
})
|
||
};
|
||
}
|
||
|
||
/* harmony default export */ var moving_animation = (useMovingAnimation);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block.js
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Prevents default dragging behavior within a block to allow for multi-
|
||
* selection to take effect unhampered.
|
||
*
|
||
* @param {DragEvent} event Drag event.
|
||
*/
|
||
|
||
var preventDrag = function preventDrag(event) {
|
||
event.preventDefault();
|
||
};
|
||
|
||
function block_BlockListBlock(_ref) {
|
||
var blockRef = _ref.blockRef,
|
||
mode = _ref.mode,
|
||
isFocusMode = _ref.isFocusMode,
|
||
hasFixedToolbar = _ref.hasFixedToolbar,
|
||
isLocked = _ref.isLocked,
|
||
clientId = _ref.clientId,
|
||
rootClientId = _ref.rootClientId,
|
||
isSelected = _ref.isSelected,
|
||
isPartOfMultiSelection = _ref.isPartOfMultiSelection,
|
||
isFirstMultiSelected = _ref.isFirstMultiSelected,
|
||
isTypingWithinBlock = _ref.isTypingWithinBlock,
|
||
isCaretWithinFormattedText = _ref.isCaretWithinFormattedText,
|
||
isEmptyDefaultBlock = _ref.isEmptyDefaultBlock,
|
||
isMovable = _ref.isMovable,
|
||
isParentOfSelectedBlock = _ref.isParentOfSelectedBlock,
|
||
isDraggable = _ref.isDraggable,
|
||
isSelectionEnabled = _ref.isSelectionEnabled,
|
||
className = _ref.className,
|
||
name = _ref.name,
|
||
isValid = _ref.isValid,
|
||
isLast = _ref.isLast,
|
||
attributes = _ref.attributes,
|
||
initialPosition = _ref.initialPosition,
|
||
wrapperProps = _ref.wrapperProps,
|
||
setAttributes = _ref.setAttributes,
|
||
onReplace = _ref.onReplace,
|
||
onInsertBlocksAfter = _ref.onInsertBlocksAfter,
|
||
onMerge = _ref.onMerge,
|
||
onSelect = _ref.onSelect,
|
||
onRemove = _ref.onRemove,
|
||
onInsertDefaultBlockAfter = _ref.onInsertDefaultBlockAfter,
|
||
toggleSelection = _ref.toggleSelection,
|
||
onShiftSelection = _ref.onShiftSelection,
|
||
onSelectionStart = _ref.onSelectionStart,
|
||
animateOnChange = _ref.animateOnChange,
|
||
enableAnimation = _ref.enableAnimation,
|
||
isNavigationMode = _ref.isNavigationMode,
|
||
enableNavigationMode = _ref.enableNavigationMode;
|
||
|
||
// Random state used to rerender the component if needed, ideally we don't need this
|
||
var _useState = Object(external_this_wp_element_["useState"])({}),
|
||
_useState2 = Object(slicedToArray["a" /* default */])(_useState, 2),
|
||
updateRerenderState = _useState2[1];
|
||
|
||
var rerender = function rerender() {
|
||
return updateRerenderState({});
|
||
}; // Reference of the wrapper
|
||
|
||
|
||
var wrapper = Object(external_this_wp_element_["useRef"])(null);
|
||
Object(external_this_wp_element_["useEffect"])(function () {
|
||
blockRef(wrapper.current, clientId);
|
||
}, []); // Reference to the block edit node
|
||
|
||
var blockNodeRef = Object(external_this_wp_element_["useRef"])();
|
||
var breadcrumb = Object(external_this_wp_element_["useRef"])(); // Keep track of touchstart to disable hover on iOS
|
||
|
||
var hadTouchStart = Object(external_this_wp_element_["useRef"])(false);
|
||
|
||
var onTouchStart = function onTouchStart() {
|
||
hadTouchStart.current = true;
|
||
};
|
||
|
||
var onTouchStop = function onTouchStop() {
|
||
// Clear touchstart detection
|
||
// Browser will try to emulate mouse events also see https://www.html5rocks.com/en/mobile/touchandmouse/
|
||
hadTouchStart.current = false;
|
||
}; // Handling isHovered
|
||
|
||
|
||
var _useState3 = Object(external_this_wp_element_["useState"])(false),
|
||
_useState4 = Object(slicedToArray["a" /* default */])(_useState3, 2),
|
||
isBlockHovered = _useState4[0],
|
||
setBlockHoveredState = _useState4[1];
|
||
/**
|
||
* Sets the block state as unhovered if currently hovering. There are cases
|
||
* where mouseleave may occur but the block is not hovered (multi-select),
|
||
* so to avoid unnecesary renders, the state is only set if hovered.
|
||
*/
|
||
|
||
|
||
var hideHoverEffects = function hideHoverEffects() {
|
||
if (isBlockHovered) {
|
||
setBlockHoveredState(false);
|
||
}
|
||
};
|
||
/**
|
||
* A mouseover event handler to apply hover effect when a pointer device is
|
||
* placed within the bounds of the block. The mouseover event is preferred
|
||
* over mouseenter because it may be the case that a previous mouseenter
|
||
* event was blocked from being handled by a IgnoreNestedEvents component,
|
||
* therefore transitioning out of a nested block to the bounds of the block
|
||
* would otherwise not trigger a hover effect.
|
||
*
|
||
* @see https://developer.mozilla.org/en-US/docs/Web/Events/mouseenter
|
||
*/
|
||
|
||
|
||
var maybeHover = function maybeHover() {
|
||
if (isBlockHovered || isPartOfMultiSelection || isSelected || hadTouchStart.current) {
|
||
return;
|
||
}
|
||
|
||
setBlockHoveredState(true);
|
||
}; // Set hover to false once we start typing or select the block.
|
||
|
||
|
||
Object(external_this_wp_element_["useEffect"])(function () {
|
||
if (isTypingWithinBlock || isSelected) {
|
||
hideHoverEffects();
|
||
}
|
||
}); // Handling the dragging state
|
||
|
||
var _useState5 = Object(external_this_wp_element_["useState"])(false),
|
||
_useState6 = Object(slicedToArray["a" /* default */])(_useState5, 2),
|
||
isDragging = _useState6[0],
|
||
setBlockDraggingState = _useState6[1];
|
||
|
||
var onDragStart = function onDragStart() {
|
||
setBlockDraggingState(true);
|
||
};
|
||
|
||
var onDragEnd = function onDragEnd() {
|
||
setBlockDraggingState(false);
|
||
}; // Handling the error state
|
||
|
||
|
||
var _useState7 = Object(external_this_wp_element_["useState"])(false),
|
||
_useState8 = Object(slicedToArray["a" /* default */])(_useState7, 2),
|
||
hasError = _useState8[0],
|
||
setErrorState = _useState8[1];
|
||
|
||
var onBlockError = function onBlockError() {
|
||
return setErrorState(true);
|
||
}; // Handling of forceContextualToolbarFocus
|
||
|
||
|
||
var isForcingContextualToolbar = Object(external_this_wp_element_["useRef"])(false);
|
||
Object(external_this_wp_element_["useEffect"])(function () {
|
||
if (isForcingContextualToolbar.current) {
|
||
// The forcing of contextual toolbar should only be true during one update,
|
||
// after the first update normal conditions should apply.
|
||
isForcingContextualToolbar.current = false;
|
||
}
|
||
});
|
||
|
||
var forceFocusedContextualToolbar = function forceFocusedContextualToolbar() {
|
||
isForcingContextualToolbar.current = true; // trigger a re-render
|
||
|
||
rerender();
|
||
}; // Handing the focus of the block on creation and update
|
||
|
||
/**
|
||
* When a block becomes selected, transition focus to an inner tabbable.
|
||
*
|
||
* @param {boolean} ignoreInnerBlocks Should not focus inner blocks.
|
||
*/
|
||
|
||
|
||
var focusTabbable = function focusTabbable(ignoreInnerBlocks) {
|
||
// Focus is captured by the wrapper node, so while focus transition
|
||
// should only consider tabbables within editable display, since it
|
||
// may be the wrapper itself or a side control which triggered the
|
||
// focus event, don't unnecessary transition to an inner tabbable.
|
||
if (wrapper.current.contains(document.activeElement)) {
|
||
return;
|
||
}
|
||
|
||
if (isNavigationMode) {
|
||
breadcrumb.current.focus();
|
||
return;
|
||
} // Find all tabbables within node.
|
||
|
||
|
||
var textInputs = external_this_wp_dom_["focus"].tabbable.find(blockNodeRef.current).filter(external_this_wp_dom_["isTextField"]) // Exclude inner blocks
|
||
.filter(function (node) {
|
||
return !ignoreInnerBlocks || isInsideRootBlock(blockNodeRef.current, node);
|
||
}); // If reversed (e.g. merge via backspace), use the last in the set of
|
||
// tabbables.
|
||
|
||
var isReverse = -1 === initialPosition;
|
||
var target = (isReverse ? external_lodash_["last"] : external_lodash_["first"])(textInputs);
|
||
|
||
if (!target) {
|
||
wrapper.current.focus();
|
||
return;
|
||
}
|
||
|
||
Object(external_this_wp_dom_["placeCaretAtHorizontalEdge"])(target, isReverse);
|
||
}; // Focus the selected block's wrapper or inner input on mount and update
|
||
|
||
|
||
var isMounting = Object(external_this_wp_element_["useRef"])(true);
|
||
Object(external_this_wp_element_["useEffect"])(function () {
|
||
if (isSelected) {
|
||
focusTabbable(!isMounting.current);
|
||
}
|
||
|
||
isMounting.current = false;
|
||
}, [isSelected]); // Focus the first multi selected block
|
||
|
||
Object(external_this_wp_element_["useEffect"])(function () {
|
||
if (isFirstMultiSelected) {
|
||
wrapper.current.focus();
|
||
}
|
||
}, [isFirstMultiSelected]); // Block Reordering animation
|
||
|
||
var animationStyle = moving_animation(wrapper, isSelected || isPartOfMultiSelection, isSelected || isFirstMultiSelected, enableAnimation, animateOnChange); // Focus the breadcrumb if the wrapper is focused on navigation mode.
|
||
// Focus the first editable or the wrapper if edit mode.
|
||
|
||
Object(external_this_wp_element_["useLayoutEffect"])(function () {
|
||
if (isSelected) {
|
||
if (isNavigationMode) {
|
||
breadcrumb.current.focus();
|
||
} else {
|
||
focusTabbable(true);
|
||
}
|
||
}
|
||
}, [isSelected, isNavigationMode]); // Other event handlers
|
||
|
||
/**
|
||
* Marks the block as selected when focused and not already selected. This
|
||
* specifically handles the case where block does not set focus on its own
|
||
* (via `setFocus`), typically if there is no focusable input in the block.
|
||
*/
|
||
|
||
var onFocus = function onFocus() {
|
||
if (!isSelected && !isPartOfMultiSelection) {
|
||
onSelect();
|
||
}
|
||
};
|
||
/**
|
||
* Interprets keydown event intent to remove or insert after block if key
|
||
* event occurs on wrapper node. This can occur when the block has no text
|
||
* fields of its own, particularly after initial insertion, to allow for
|
||
* easy deletion and continuous writing flow to add additional content.
|
||
*
|
||
* @param {KeyboardEvent} event Keydown event.
|
||
*/
|
||
|
||
|
||
var onKeyDown = function onKeyDown(event) {
|
||
var keyCode = event.keyCode,
|
||
target = event.target; // ENTER/BACKSPACE Shortcuts are only available if the wrapper is focused
|
||
// and the block is not locked.
|
||
|
||
var canUseShortcuts = isSelected && !isLocked && (target === wrapper.current || target === breadcrumb.current);
|
||
var isEditMode = !isNavigationMode;
|
||
|
||
switch (keyCode) {
|
||
case external_this_wp_keycodes_["ENTER"]:
|
||
if (canUseShortcuts && isEditMode) {
|
||
// Insert default block after current block if enter and event
|
||
// not already handled by descendant.
|
||
onInsertDefaultBlockAfter();
|
||
event.preventDefault();
|
||
}
|
||
|
||
break;
|
||
|
||
case external_this_wp_keycodes_["BACKSPACE"]:
|
||
case external_this_wp_keycodes_["DELETE"]:
|
||
if (canUseShortcuts) {
|
||
// Remove block on backspace.
|
||
onRemove(clientId);
|
||
event.preventDefault();
|
||
}
|
||
|
||
break;
|
||
|
||
case external_this_wp_keycodes_["ESCAPE"]:
|
||
if (isSelected && isEditMode) {
|
||
enableNavigationMode();
|
||
wrapper.current.focus();
|
||
}
|
||
|
||
break;
|
||
}
|
||
};
|
||
/**
|
||
* Begins tracking cursor multi-selection when clicking down within block.
|
||
*
|
||
* @param {MouseEvent} event A mousedown event.
|
||
*/
|
||
|
||
|
||
var onPointerDown = function onPointerDown(event) {
|
||
// Not the main button.
|
||
// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button
|
||
if (event.button !== 0) {
|
||
return;
|
||
}
|
||
|
||
if (event.shiftKey) {
|
||
if (!isSelected) {
|
||
onShiftSelection();
|
||
event.preventDefault();
|
||
} // Avoid triggering multi-selection if we click toolbars/inspectors
|
||
// and all elements that are outside the Block Edit DOM tree.
|
||
|
||
} else if (blockNodeRef.current.contains(event.target)) {
|
||
onSelectionStart(clientId); // Allow user to escape out of a multi-selection to a singular
|
||
// selection of a block via click. This is handled here since
|
||
// onFocus excludes blocks involved in a multiselection, as
|
||
// focus can be incurred by starting a multiselection (focus
|
||
// moved to first block's multi-controls).
|
||
|
||
if (isPartOfMultiSelection) {
|
||
onSelect();
|
||
}
|
||
}
|
||
};
|
||
|
||
var selectOnOpen = function selectOnOpen(open) {
|
||
if (open && !isSelected) {
|
||
onSelect();
|
||
}
|
||
}; // Rendering the output
|
||
|
||
|
||
var isHovered = isBlockHovered && !isPartOfMultiSelection;
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(name); // translators: %s: Type of block (i.e. Text, Image etc)
|
||
|
||
var blockLabel = Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["__"])('Block: %s'), blockType.title); // The block as rendered in the editor is composed of general block UI
|
||
// (mover, toolbar, wrapper) and the display of the block content.
|
||
|
||
var isUnregisteredBlock = name === Object(external_this_wp_blocks_["getUnregisteredTypeHandlerName"])(); // If the block is selected and we're typing the block should not appear.
|
||
// Empty paragraph blocks should always show up as unselected.
|
||
|
||
var showInserterShortcuts = !isNavigationMode && (isSelected || isHovered) && isEmptyDefaultBlock && isValid;
|
||
var showEmptyBlockSideInserter = !isNavigationMode && (isSelected || isHovered || isLast) && isEmptyDefaultBlock && isValid;
|
||
var shouldAppearSelected = !isFocusMode && !showEmptyBlockSideInserter && isSelected && !isTypingWithinBlock;
|
||
var shouldAppearHovered = !isFocusMode && !hasFixedToolbar && isHovered && !isEmptyDefaultBlock; // We render block movers and block settings to keep them tabbale even if hidden
|
||
|
||
var shouldRenderMovers = !isNavigationMode && isSelected && !showEmptyBlockSideInserter && !isPartOfMultiSelection && !isTypingWithinBlock;
|
||
var shouldShowBreadcrumb = isSelected && isNavigationMode || !isNavigationMode && !isFocusMode && isHovered && !isEmptyDefaultBlock;
|
||
var shouldShowContextualToolbar = !isNavigationMode && !hasFixedToolbar && !showEmptyBlockSideInserter && (isSelected && (!isTypingWithinBlock || isCaretWithinFormattedText) || isFirstMultiSelected);
|
||
var shouldShowMobileToolbar = !isNavigationMode && shouldAppearSelected; // Insertion point can only be made visible if the block is at the
|
||
// the extent of a multi-selection, or not in a multi-selection.
|
||
|
||
var shouldShowInsertionPoint = isPartOfMultiSelection && isFirstMultiSelected || !isPartOfMultiSelection; // The wp-block className is important for editor styles.
|
||
// Generate the wrapper class names handling the different states of the block.
|
||
|
||
var wrapperClassName = classnames_default()('wp-block editor-block-list__block block-editor-block-list__block', {
|
||
'has-warning': !isValid || !!hasError || isUnregisteredBlock,
|
||
'is-selected': shouldAppearSelected,
|
||
'is-navigate-mode': isNavigationMode,
|
||
'is-multi-selected': isPartOfMultiSelection,
|
||
'is-hovered': shouldAppearHovered,
|
||
'is-reusable': Object(external_this_wp_blocks_["isReusableBlock"])(blockType),
|
||
'is-dragging': isDragging,
|
||
'is-typing': isTypingWithinBlock,
|
||
'is-focused': isFocusMode && (isSelected || isParentOfSelectedBlock),
|
||
'is-focus-mode': isFocusMode,
|
||
'has-child-selected': isParentOfSelectedBlock
|
||
}, className); // Determine whether the block has props to apply to the wrapper.
|
||
|
||
if (blockType.getEditWrapperProps) {
|
||
wrapperProps = Object(objectSpread["a" /* default */])({}, wrapperProps, blockType.getEditWrapperProps(attributes));
|
||
}
|
||
|
||
var blockElementId = "block-".concat(clientId); // We wrap the BlockEdit component in a div that hides it when editing in
|
||
// HTML mode. This allows us to render all of the ancillary pieces
|
||
// (InspectorControls, etc.) which are inside `BlockEdit` but not
|
||
// `BlockHTML`, even in HTML mode.
|
||
|
||
var blockEdit = Object(external_this_wp_element_["createElement"])(block_edit, {
|
||
name: name,
|
||
isSelected: isSelected,
|
||
attributes: attributes,
|
||
setAttributes: setAttributes,
|
||
insertBlocksAfter: isLocked ? undefined : onInsertBlocksAfter,
|
||
onReplace: isLocked ? undefined : onReplace,
|
||
mergeBlocks: isLocked ? undefined : onMerge,
|
||
clientId: clientId,
|
||
isSelectionEnabled: isSelectionEnabled,
|
||
toggleSelection: toggleSelection
|
||
});
|
||
|
||
if (mode !== 'visual') {
|
||
blockEdit = Object(external_this_wp_element_["createElement"])("div", {
|
||
style: {
|
||
display: 'none'
|
||
}
|
||
}, blockEdit);
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(ignore_nested_events, Object(esm_extends["a" /* default */])({
|
||
id: blockElementId,
|
||
ref: wrapper,
|
||
onMouseOver: maybeHover,
|
||
onMouseOverHandled: hideHoverEffects,
|
||
onMouseLeave: hideHoverEffects,
|
||
className: wrapperClassName,
|
||
"data-type": name,
|
||
onTouchStart: onTouchStart,
|
||
onFocus: onFocus,
|
||
onClick: onTouchStop,
|
||
onKeyDown: onKeyDown,
|
||
tabIndex: "0",
|
||
"aria-label": blockLabel,
|
||
childHandledEvents: ['onDragStart', 'onMouseDown'],
|
||
tagName: web_cjs["animated"].div
|
||
}, wrapperProps, {
|
||
style: wrapperProps && wrapperProps.style ? Object(objectSpread["a" /* default */])({}, wrapperProps.style, animationStyle) : animationStyle
|
||
}), shouldShowInsertionPoint && Object(external_this_wp_element_["createElement"])(insertion_point, {
|
||
clientId: clientId,
|
||
rootClientId: rootClientId
|
||
}), Object(external_this_wp_element_["createElement"])(block_drop_zone, {
|
||
clientId: clientId,
|
||
rootClientId: rootClientId
|
||
}), isFirstMultiSelected && Object(external_this_wp_element_["createElement"])(multi_controls, {
|
||
rootClientId: rootClientId
|
||
}), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-list__block-edit block-editor-block-list__block-edit"
|
||
}, shouldRenderMovers && Object(external_this_wp_element_["createElement"])(block_mover, {
|
||
clientIds: clientId,
|
||
blockElementId: blockElementId,
|
||
isHidden: !isSelected,
|
||
isDraggable: isDraggable !== false && !isPartOfMultiSelection && isMovable,
|
||
onDragStart: onDragStart,
|
||
onDragEnd: onDragEnd
|
||
}), shouldShowBreadcrumb && Object(external_this_wp_element_["createElement"])(block_list_breadcrumb, {
|
||
clientId: clientId,
|
||
ref: breadcrumb
|
||
}), (shouldShowContextualToolbar || isForcingContextualToolbar.current) && Object(external_this_wp_element_["createElement"])(block_contextual_toolbar // If the toolbar is being shown because of being forced
|
||
// it should focus the toolbar right after the mount.
|
||
, {
|
||
focusOnMount: isForcingContextualToolbar.current
|
||
}), !isNavigationMode && !shouldShowContextualToolbar && isSelected && !hasFixedToolbar && !isEmptyDefaultBlock && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["KeyboardShortcuts"], {
|
||
bindGlobal: true,
|
||
eventName: "keydown",
|
||
shortcuts: {
|
||
'alt+f10': forceFocusedContextualToolbar
|
||
}
|
||
}), Object(external_this_wp_element_["createElement"])(ignore_nested_events, {
|
||
ref: blockNodeRef,
|
||
onDragStart: preventDrag,
|
||
onMouseDown: onPointerDown,
|
||
"data-block": clientId
|
||
}, Object(external_this_wp_element_["createElement"])(block_crash_boundary, {
|
||
onError: onBlockError
|
||
}, isValid && blockEdit, isValid && mode === 'html' && Object(external_this_wp_element_["createElement"])(block_html, {
|
||
clientId: clientId
|
||
}), !isValid && [Object(external_this_wp_element_["createElement"])(block_invalid_warning, {
|
||
key: "invalid-warning",
|
||
clientId: clientId
|
||
}), Object(external_this_wp_element_["createElement"])("div", {
|
||
key: "invalid-preview"
|
||
}, Object(external_this_wp_blocks_["getSaveElement"])(blockType, attributes))]), !!hasError && Object(external_this_wp_element_["createElement"])(block_crash_warning, null), shouldShowMobileToolbar && Object(external_this_wp_element_["createElement"])(block_mobile_toolbar, {
|
||
clientId: clientId
|
||
}))), showInserterShortcuts && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-list__side-inserter block-editor-block-list__side-inserter"
|
||
}, Object(external_this_wp_element_["createElement"])(inserter_with_shortcuts, {
|
||
clientId: clientId,
|
||
rootClientId: rootClientId,
|
||
onToggle: selectOnOpen
|
||
})), showEmptyBlockSideInserter && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-list__empty-block-inserter block-editor-block-list__empty-block-inserter"
|
||
}, Object(external_this_wp_element_["createElement"])(inserter, {
|
||
position: "top right",
|
||
onToggle: selectOnOpen,
|
||
rootClientId: rootClientId,
|
||
clientId: clientId
|
||
})));
|
||
}
|
||
|
||
var applyWithSelect = Object(external_this_wp_data_["withSelect"])(function (select, _ref2) {
|
||
var clientId = _ref2.clientId,
|
||
rootClientId = _ref2.rootClientId,
|
||
isLargeViewport = _ref2.isLargeViewport;
|
||
|
||
var _select = select('core/block-editor'),
|
||
isBlockSelected = _select.isBlockSelected,
|
||
isAncestorMultiSelected = _select.isAncestorMultiSelected,
|
||
isBlockMultiSelected = _select.isBlockMultiSelected,
|
||
isFirstMultiSelectedBlock = _select.isFirstMultiSelectedBlock,
|
||
isTyping = _select.isTyping,
|
||
isCaretWithinFormattedText = _select.isCaretWithinFormattedText,
|
||
getBlockMode = _select.getBlockMode,
|
||
isSelectionEnabled = _select.isSelectionEnabled,
|
||
getSelectedBlocksInitialCaretPosition = _select.getSelectedBlocksInitialCaretPosition,
|
||
getSettings = _select.getSettings,
|
||
hasSelectedInnerBlock = _select.hasSelectedInnerBlock,
|
||
getTemplateLock = _select.getTemplateLock,
|
||
getBlockIndex = _select.getBlockIndex,
|
||
getBlockOrder = _select.getBlockOrder,
|
||
__unstableGetBlockWithoutInnerBlocks = _select.__unstableGetBlockWithoutInnerBlocks,
|
||
isNavigationMode = _select.isNavigationMode;
|
||
|
||
var block = __unstableGetBlockWithoutInnerBlocks(clientId);
|
||
|
||
var isSelected = isBlockSelected(clientId);
|
||
|
||
var _getSettings = getSettings(),
|
||
hasFixedToolbar = _getSettings.hasFixedToolbar,
|
||
focusMode = _getSettings.focusMode,
|
||
isRTL = _getSettings.isRTL;
|
||
|
||
var templateLock = getTemplateLock(rootClientId);
|
||
var isParentOfSelectedBlock = hasSelectedInnerBlock(clientId, true);
|
||
var index = getBlockIndex(clientId, rootClientId);
|
||
var blockOrder = getBlockOrder(rootClientId); // The fallback to `{}` is a temporary fix.
|
||
// This function should never be called when a block is not present in the state.
|
||
// It happens now because the order in withSelect rendering is not correct.
|
||
|
||
var _ref3 = block || {},
|
||
name = _ref3.name,
|
||
attributes = _ref3.attributes,
|
||
isValid = _ref3.isValid;
|
||
|
||
return {
|
||
isPartOfMultiSelection: isBlockMultiSelected(clientId) || isAncestorMultiSelected(clientId),
|
||
isFirstMultiSelected: isFirstMultiSelectedBlock(clientId),
|
||
// We only care about this prop when the block is selected
|
||
// Thus to avoid unnecessary rerenders we avoid updating the prop if the block is not selected.
|
||
isTypingWithinBlock: (isSelected || isParentOfSelectedBlock) && isTyping(),
|
||
isCaretWithinFormattedText: isCaretWithinFormattedText(),
|
||
mode: getBlockMode(clientId),
|
||
isSelectionEnabled: isSelectionEnabled(),
|
||
initialPosition: isSelected ? getSelectedBlocksInitialCaretPosition() : null,
|
||
isEmptyDefaultBlock: name && Object(external_this_wp_blocks_["isUnmodifiedDefaultBlock"])({
|
||
name: name,
|
||
attributes: attributes
|
||
}),
|
||
isMovable: 'all' !== templateLock,
|
||
isLocked: !!templateLock,
|
||
isFocusMode: focusMode && isLargeViewport,
|
||
hasFixedToolbar: hasFixedToolbar && isLargeViewport,
|
||
isLast: index === blockOrder.length - 1,
|
||
isNavigationMode: isNavigationMode(),
|
||
isRTL: isRTL,
|
||
// Users of the editor.BlockListBlock filter used to be able to access the block prop
|
||
// Ideally these blocks would rely on the clientId prop only.
|
||
// This is kept for backward compatibility reasons.
|
||
block: block,
|
||
name: name,
|
||
attributes: attributes,
|
||
isValid: isValid,
|
||
isSelected: isSelected,
|
||
isParentOfSelectedBlock: isParentOfSelectedBlock
|
||
};
|
||
});
|
||
var applyWithDispatch = Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps, _ref4) {
|
||
var select = _ref4.select;
|
||
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
updateBlockAttributes = _dispatch.updateBlockAttributes,
|
||
selectBlock = _dispatch.selectBlock,
|
||
multiSelect = _dispatch.multiSelect,
|
||
insertBlocks = _dispatch.insertBlocks,
|
||
insertDefaultBlock = _dispatch.insertDefaultBlock,
|
||
removeBlock = _dispatch.removeBlock,
|
||
mergeBlocks = _dispatch.mergeBlocks,
|
||
replaceBlocks = _dispatch.replaceBlocks,
|
||
_toggleSelection = _dispatch.toggleSelection,
|
||
setNavigationMode = _dispatch.setNavigationMode,
|
||
__unstableMarkLastChangeAsPersistent = _dispatch.__unstableMarkLastChangeAsPersistent;
|
||
|
||
return {
|
||
setAttributes: function setAttributes(newAttributes) {
|
||
var clientId = ownProps.clientId;
|
||
updateBlockAttributes(clientId, newAttributes);
|
||
},
|
||
onSelect: function onSelect() {
|
||
var clientId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ownProps.clientId;
|
||
var initialPosition = arguments.length > 1 ? arguments[1] : undefined;
|
||
selectBlock(clientId, initialPosition);
|
||
},
|
||
onInsertBlocks: function onInsertBlocks(blocks, index) {
|
||
var rootClientId = ownProps.rootClientId;
|
||
insertBlocks(blocks, index, rootClientId);
|
||
},
|
||
onInsertDefaultBlockAfter: function onInsertDefaultBlockAfter() {
|
||
var clientId = ownProps.clientId,
|
||
rootClientId = ownProps.rootClientId;
|
||
|
||
var _select2 = select('core/block-editor'),
|
||
getBlockIndex = _select2.getBlockIndex;
|
||
|
||
var index = getBlockIndex(clientId, rootClientId);
|
||
insertDefaultBlock({}, rootClientId, index + 1);
|
||
},
|
||
onInsertBlocksAfter: function onInsertBlocksAfter(blocks) {
|
||
var clientId = ownProps.clientId,
|
||
rootClientId = ownProps.rootClientId;
|
||
|
||
var _select3 = select('core/block-editor'),
|
||
getBlockIndex = _select3.getBlockIndex;
|
||
|
||
var index = getBlockIndex(clientId, rootClientId);
|
||
insertBlocks(blocks, index + 1, rootClientId);
|
||
},
|
||
onRemove: function onRemove(clientId) {
|
||
removeBlock(clientId);
|
||
},
|
||
onMerge: function onMerge(forward) {
|
||
var clientId = ownProps.clientId;
|
||
|
||
var _select4 = select('core/block-editor'),
|
||
getPreviousBlockClientId = _select4.getPreviousBlockClientId,
|
||
getNextBlockClientId = _select4.getNextBlockClientId;
|
||
|
||
if (forward) {
|
||
var nextBlockClientId = getNextBlockClientId(clientId);
|
||
|
||
if (nextBlockClientId) {
|
||
mergeBlocks(clientId, nextBlockClientId);
|
||
}
|
||
} else {
|
||
var previousBlockClientId = getPreviousBlockClientId(clientId);
|
||
|
||
if (previousBlockClientId) {
|
||
mergeBlocks(previousBlockClientId, clientId);
|
||
}
|
||
}
|
||
},
|
||
onReplace: function onReplace(blocks, indexToSelect) {
|
||
if (blocks.length && !Object(external_this_wp_blocks_["isUnmodifiedDefaultBlock"])(blocks[blocks.length - 1])) {
|
||
__unstableMarkLastChangeAsPersistent();
|
||
}
|
||
|
||
replaceBlocks([ownProps.clientId], blocks, indexToSelect);
|
||
},
|
||
onShiftSelection: function onShiftSelection() {
|
||
if (!ownProps.isSelectionEnabled) {
|
||
return;
|
||
}
|
||
|
||
var _select5 = select('core/block-editor'),
|
||
getBlockSelectionStart = _select5.getBlockSelectionStart;
|
||
|
||
if (getBlockSelectionStart()) {
|
||
multiSelect(getBlockSelectionStart(), ownProps.clientId);
|
||
} else {
|
||
selectBlock(ownProps.clientId);
|
||
}
|
||
},
|
||
toggleSelection: function toggleSelection(selectionEnabled) {
|
||
_toggleSelection(selectionEnabled);
|
||
},
|
||
enableNavigationMode: function enableNavigationMode() {
|
||
setNavigationMode(true);
|
||
}
|
||
};
|
||
});
|
||
/* harmony default export */ var block_list_block = (Object(external_this_wp_compose_["compose"])(external_this_wp_compose_["pure"], Object(external_this_wp_viewport_["withViewportMatch"])({
|
||
isLargeViewport: 'medium'
|
||
}), applyWithSelect, applyWithDispatch, // block is sometimes not mounted at the right time, causing it be undefined
|
||
// see issue for more info https://github.com/WordPress/gutenberg/issues/17013
|
||
Object(external_this_wp_compose_["ifCondition"])(function (_ref5) {
|
||
var block = _ref5.block;
|
||
return !!block;
|
||
}), Object(external_this_wp_components_["withFilters"])('editor.BlockListBlock'))(block_BlockListBlock));
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","htmlEntities"]}
|
||
var external_this_wp_htmlEntities_ = __webpack_require__(54);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/default-block-appender/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
function default_block_appender_DefaultBlockAppender(_ref) {
|
||
var isLocked = _ref.isLocked,
|
||
isVisible = _ref.isVisible,
|
||
onAppend = _ref.onAppend,
|
||
showPrompt = _ref.showPrompt,
|
||
placeholder = _ref.placeholder,
|
||
rootClientId = _ref.rootClientId,
|
||
hovered = _ref.hovered,
|
||
setState = _ref.setState;
|
||
|
||
if (isLocked || !isVisible) {
|
||
return null;
|
||
}
|
||
|
||
var value = Object(external_this_wp_htmlEntities_["decodeEntities"])(placeholder) || Object(external_this_wp_i18n_["__"])('Start writing or type / to choose a block'); // The appender "button" is in-fact a text field so as to support
|
||
// transitions by WritingFlow occurring by arrow key press. WritingFlow
|
||
// only supports tab transitions into text fields and to the block focus
|
||
// boundary.
|
||
//
|
||
// See: https://github.com/WordPress/gutenberg/issues/4829#issuecomment-374213658
|
||
//
|
||
// If it were ever to be made to be a proper `button` element, it is
|
||
// important to note that `onFocus` alone would not be sufficient to
|
||
// capture click events, notably in Firefox.
|
||
//
|
||
// See: https://gist.github.com/cvrebert/68659d0333a578d75372
|
||
// The wp-block className is important for editor styles.
|
||
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
"data-root-client-id": rootClientId || '',
|
||
className: "wp-block editor-default-block-appender block-editor-default-block-appender",
|
||
onMouseEnter: function onMouseEnter() {
|
||
return setState({
|
||
hovered: true
|
||
});
|
||
},
|
||
onMouseLeave: function onMouseLeave() {
|
||
return setState({
|
||
hovered: false
|
||
});
|
||
}
|
||
}, Object(external_this_wp_element_["createElement"])(block_drop_zone, {
|
||
rootClientId: rootClientId
|
||
}), Object(external_this_wp_element_["createElement"])(react_autosize_textarea_lib_default.a, {
|
||
role: "button",
|
||
"aria-label": Object(external_this_wp_i18n_["__"])('Add block'),
|
||
className: "editor-default-block-appender__content block-editor-default-block-appender__content",
|
||
readOnly: true,
|
||
onFocus: onAppend,
|
||
value: showPrompt ? value : ''
|
||
}), hovered && Object(external_this_wp_element_["createElement"])(inserter_with_shortcuts, {
|
||
rootClientId: rootClientId
|
||
}), Object(external_this_wp_element_["createElement"])(inserter, {
|
||
rootClientId: rootClientId,
|
||
position: "top right",
|
||
isAppender: true
|
||
}));
|
||
}
|
||
/* harmony default export */ var default_block_appender = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_compose_["withState"])({
|
||
hovered: false
|
||
}), Object(external_this_wp_data_["withSelect"])(function (select, ownProps) {
|
||
var _select = select('core/block-editor'),
|
||
getBlockCount = _select.getBlockCount,
|
||
getBlockName = _select.getBlockName,
|
||
isBlockValid = _select.isBlockValid,
|
||
getSettings = _select.getSettings,
|
||
getTemplateLock = _select.getTemplateLock;
|
||
|
||
var isEmpty = !getBlockCount(ownProps.rootClientId);
|
||
var isLastBlockDefault = getBlockName(ownProps.lastBlockClientId) === Object(external_this_wp_blocks_["getDefaultBlockName"])();
|
||
var isLastBlockValid = isBlockValid(ownProps.lastBlockClientId);
|
||
|
||
var _getSettings = getSettings(),
|
||
bodyPlaceholder = _getSettings.bodyPlaceholder;
|
||
|
||
return {
|
||
isVisible: isEmpty || !isLastBlockDefault || !isLastBlockValid,
|
||
showPrompt: isEmpty,
|
||
isLocked: !!getTemplateLock(ownProps.rootClientId),
|
||
placeholder: bodyPlaceholder
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
insertDefaultBlock = _dispatch.insertDefaultBlock,
|
||
startTyping = _dispatch.startTyping;
|
||
|
||
return {
|
||
onAppend: function onAppend() {
|
||
var rootClientId = ownProps.rootClientId;
|
||
insertDefaultBlock(undefined, rootClientId);
|
||
startTyping();
|
||
}
|
||
};
|
||
}))(default_block_appender_DefaultBlockAppender));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list-appender/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
function BlockListAppender(_ref) {
|
||
var blockClientIds = _ref.blockClientIds,
|
||
rootClientId = _ref.rootClientId,
|
||
canInsertDefaultBlock = _ref.canInsertDefaultBlock,
|
||
isLocked = _ref.isLocked,
|
||
CustomAppender = _ref.renderAppender;
|
||
|
||
if (isLocked) {
|
||
return null;
|
||
} // If a render prop has been provided
|
||
// use it to render the appender.
|
||
|
||
|
||
if (CustomAppender) {
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-list-appender"
|
||
}, Object(external_this_wp_element_["createElement"])(CustomAppender, null));
|
||
} // a false value means, don't render any appender.
|
||
|
||
|
||
if (CustomAppender === false) {
|
||
return null;
|
||
} // Render the default block appender when renderAppender has not been
|
||
// provided and the context supports use of the default appender.
|
||
|
||
|
||
if (canInsertDefaultBlock) {
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-list-appender"
|
||
}, Object(external_this_wp_element_["createElement"])(ignore_nested_events, {
|
||
childHandledEvents: ['onFocus', 'onClick', 'onKeyDown']
|
||
}, Object(external_this_wp_element_["createElement"])(default_block_appender, {
|
||
rootClientId: rootClientId,
|
||
lastBlockClientId: Object(external_lodash_["last"])(blockClientIds)
|
||
})));
|
||
} // Fallback in the case no renderAppender has been provided and the
|
||
// default block can't be inserted.
|
||
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-list-appender"
|
||
}, Object(external_this_wp_element_["createElement"])(button_block_appender, {
|
||
rootClientId: rootClientId,
|
||
className: "block-list-appender__toggle"
|
||
}));
|
||
}
|
||
|
||
/* harmony default export */ var block_list_appender = (Object(external_this_wp_data_["withSelect"])(function (select, _ref2) {
|
||
var rootClientId = _ref2.rootClientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlockOrder = _select.getBlockOrder,
|
||
canInsertBlockType = _select.canInsertBlockType,
|
||
getTemplateLock = _select.getTemplateLock;
|
||
|
||
return {
|
||
isLocked: !!getTemplateLock(rootClientId),
|
||
blockClientIds: getBlockOrder(rootClientId),
|
||
canInsertDefaultBlock: canInsertBlockType(Object(external_this_wp_blocks_["getDefaultBlockName"])(), rootClientId)
|
||
};
|
||
})(BlockListAppender));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* If the block count exceeds the threshold, we disable the reordering animation
|
||
* to avoid laginess.
|
||
*/
|
||
|
||
var BLOCK_ANIMATION_THRESHOLD = 200;
|
||
|
||
var block_list_forceSyncUpdates = function forceSyncUpdates(WrappedComponent) {
|
||
return function (props) {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_data_["__experimentalAsyncModeProvider"], {
|
||
value: false
|
||
}, Object(external_this_wp_element_["createElement"])(WrappedComponent, props));
|
||
};
|
||
};
|
||
|
||
var block_list_BlockList =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockList, _Component);
|
||
|
||
function BlockList(props) {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockList);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockList).call(this, props));
|
||
_this.onSelectionStart = _this.onSelectionStart.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onSelectionEnd = _this.onSelectionEnd.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.setBlockRef = _this.setBlockRef.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.setLastClientY = _this.setLastClientY.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onPointerMove = Object(external_lodash_["throttle"])(_this.onPointerMove.bind(Object(assertThisInitialized["a" /* default */])(_this)), 100); // Browser does not fire `*move` event when the pointer position changes
|
||
// relative to the document, so fire it with the last known position.
|
||
|
||
_this.onScroll = function () {
|
||
return _this.onPointerMove({
|
||
clientY: _this.lastClientY
|
||
});
|
||
};
|
||
|
||
_this.lastClientY = 0;
|
||
_this.nodes = {};
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockList, [{
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
window.addEventListener('mousemove', this.setLastClientY);
|
||
}
|
||
}, {
|
||
key: "componentWillUnmount",
|
||
value: function componentWillUnmount() {
|
||
window.removeEventListener('mousemove', this.setLastClientY);
|
||
}
|
||
}, {
|
||
key: "setLastClientY",
|
||
value: function setLastClientY(_ref) {
|
||
var clientY = _ref.clientY;
|
||
this.lastClientY = clientY;
|
||
}
|
||
}, {
|
||
key: "setBlockRef",
|
||
value: function setBlockRef(node, clientId) {
|
||
if (node === null) {
|
||
delete this.nodes[clientId];
|
||
} else {
|
||
this.nodes = Object(objectSpread["a" /* default */])({}, this.nodes, Object(defineProperty["a" /* default */])({}, clientId, node));
|
||
}
|
||
}
|
||
/**
|
||
* Handles a pointer move event to update the extent of the current cursor
|
||
* multi-selection.
|
||
*
|
||
* @param {MouseEvent} event A mousemove event object.
|
||
*/
|
||
|
||
}, {
|
||
key: "onPointerMove",
|
||
value: function onPointerMove(_ref2) {
|
||
var clientY = _ref2.clientY;
|
||
|
||
// We don't start multi-selection until the mouse starts moving, so as
|
||
// to avoid dispatching multi-selection actions on an in-place click.
|
||
if (!this.props.isMultiSelecting) {
|
||
this.props.onStartMultiSelect();
|
||
}
|
||
|
||
var blockContentBoundaries = getBlockDOMNode(this.selectionAtStart).getBoundingClientRect(); // prevent multi-selection from triggering when the selected block is a float
|
||
// and the cursor is still between the top and the bottom of the block.
|
||
|
||
if (clientY >= blockContentBoundaries.top && clientY <= blockContentBoundaries.bottom) {
|
||
return;
|
||
}
|
||
|
||
var y = clientY - blockContentBoundaries.top;
|
||
var key = Object(external_lodash_["findLast"])(this.coordMapKeys, function (coordY) {
|
||
return coordY < y;
|
||
});
|
||
this.onSelectionChange(this.coordMap[key]);
|
||
}
|
||
/**
|
||
* Binds event handlers to the document for tracking a pending multi-select
|
||
* in response to a mousedown event occurring in a rendered block.
|
||
*
|
||
* @param {string} clientId Client ID of block where mousedown occurred.
|
||
*/
|
||
|
||
}, {
|
||
key: "onSelectionStart",
|
||
value: function onSelectionStart(clientId) {
|
||
if (!this.props.isSelectionEnabled) {
|
||
return;
|
||
}
|
||
|
||
var boundaries = this.nodes[clientId].getBoundingClientRect(); // Create a clientId to Y coördinate map.
|
||
|
||
var clientIdToCoordMap = Object(external_lodash_["mapValues"])(this.nodes, function (node) {
|
||
return node.getBoundingClientRect().top - boundaries.top;
|
||
}); // Cache a Y coördinate to clientId map for use in `onPointerMove`.
|
||
|
||
this.coordMap = Object(external_lodash_["invert"])(clientIdToCoordMap); // Cache an array of the Y coördinates for use in `onPointerMove`.
|
||
// Sort the coördinates, as `this.nodes` will not necessarily reflect
|
||
// the current block sequence.
|
||
|
||
this.coordMapKeys = Object(external_lodash_["sortBy"])(Object.values(clientIdToCoordMap));
|
||
this.selectionAtStart = clientId;
|
||
window.addEventListener('mousemove', this.onPointerMove); // Capture scroll on all elements.
|
||
|
||
window.addEventListener('scroll', this.onScroll, true);
|
||
window.addEventListener('mouseup', this.onSelectionEnd);
|
||
}
|
||
/**
|
||
* Handles multi-selection changes in response to pointer move.
|
||
*
|
||
* @param {string} clientId Client ID of block under cursor in multi-select
|
||
* drag.
|
||
*/
|
||
|
||
}, {
|
||
key: "onSelectionChange",
|
||
value: function onSelectionChange(clientId) {
|
||
var _this$props = this.props,
|
||
onMultiSelect = _this$props.onMultiSelect,
|
||
selectionStart = _this$props.selectionStart,
|
||
selectionEnd = _this$props.selectionEnd;
|
||
var selectionAtStart = this.selectionAtStart;
|
||
var isAtStart = selectionAtStart === clientId;
|
||
|
||
if (!selectionAtStart || !this.props.isSelectionEnabled) {
|
||
return;
|
||
} // If multi-selecting and cursor extent returns to the start of
|
||
// selection, cancel multi-select.
|
||
|
||
|
||
if (isAtStart && selectionStart) {
|
||
onMultiSelect(null, null);
|
||
} // Expand multi-selection to block under cursor.
|
||
|
||
|
||
if (!isAtStart && selectionEnd !== clientId) {
|
||
onMultiSelect(selectionAtStart, clientId);
|
||
}
|
||
}
|
||
/**
|
||
* Handles a mouseup event to end the current cursor multi-selection.
|
||
*/
|
||
|
||
}, {
|
||
key: "onSelectionEnd",
|
||
value: function onSelectionEnd() {
|
||
// Cancel throttled calls.
|
||
this.onPointerMove.cancel();
|
||
delete this.coordMap;
|
||
delete this.coordMapKeys;
|
||
delete this.selectionAtStart;
|
||
window.removeEventListener('mousemove', this.onPointerMove);
|
||
window.removeEventListener('scroll', this.onScroll, true);
|
||
window.removeEventListener('mouseup', this.onSelectionEnd); // We may or may not be in a multi-selection when mouseup occurs (e.g.
|
||
// an in-place mouse click), so only trigger stop if multi-selecting.
|
||
|
||
if (this.props.isMultiSelecting) {
|
||
this.props.onStopMultiSelect();
|
||
}
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this2 = this;
|
||
|
||
var _this$props2 = this.props,
|
||
className = _this$props2.className,
|
||
blockClientIds = _this$props2.blockClientIds,
|
||
rootClientId = _this$props2.rootClientId,
|
||
isDraggable = _this$props2.isDraggable,
|
||
selectedBlockClientId = _this$props2.selectedBlockClientId,
|
||
multiSelectedBlockClientIds = _this$props2.multiSelectedBlockClientIds,
|
||
hasMultiSelection = _this$props2.hasMultiSelection,
|
||
renderAppender = _this$props2.renderAppender,
|
||
enableAnimation = _this$props2.enableAnimation;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: classnames_default()('editor-block-list__layout block-editor-block-list__layout', className)
|
||
}, blockClientIds.map(function (clientId, index) {
|
||
var isBlockInSelection = hasMultiSelection ? multiSelectedBlockClientIds.includes(clientId) : selectedBlockClientId === clientId;
|
||
return Object(external_this_wp_element_["createElement"])(block_async_mode_provider, {
|
||
key: 'block-' + clientId,
|
||
clientId: clientId,
|
||
isBlockInSelection: isBlockInSelection
|
||
}, Object(external_this_wp_element_["createElement"])(block_list_block, {
|
||
rootClientId: rootClientId,
|
||
clientId: clientId,
|
||
blockRef: _this2.setBlockRef,
|
||
onSelectionStart: _this2.onSelectionStart,
|
||
isDraggable: isDraggable // This prop is explicitely computed and passed down
|
||
// to avoid being impacted by the async mode
|
||
// otherwise there might be a small delay to trigger the animation.
|
||
,
|
||
animateOnChange: index,
|
||
enableAnimation: enableAnimation
|
||
}));
|
||
}), Object(external_this_wp_element_["createElement"])(block_list_appender, {
|
||
rootClientId: rootClientId,
|
||
renderAppender: renderAppender
|
||
}));
|
||
}
|
||
}]);
|
||
|
||
return BlockList;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var block_list = (Object(external_this_wp_compose_["compose"])([// This component needs to always be synchronous
|
||
// as it's the one changing the async mode
|
||
// depending on the block selection.
|
||
block_list_forceSyncUpdates, Object(external_this_wp_data_["withSelect"])(function (select, ownProps) {
|
||
var _select = select('core/block-editor'),
|
||
getBlockOrder = _select.getBlockOrder,
|
||
isSelectionEnabled = _select.isSelectionEnabled,
|
||
isMultiSelecting = _select.isMultiSelecting,
|
||
getMultiSelectedBlocksStartClientId = _select.getMultiSelectedBlocksStartClientId,
|
||
getMultiSelectedBlocksEndClientId = _select.getMultiSelectedBlocksEndClientId,
|
||
getSelectedBlockClientId = _select.getSelectedBlockClientId,
|
||
getMultiSelectedBlockClientIds = _select.getMultiSelectedBlockClientIds,
|
||
hasMultiSelection = _select.hasMultiSelection,
|
||
getGlobalBlockCount = _select.getGlobalBlockCount,
|
||
isTyping = _select.isTyping;
|
||
|
||
var rootClientId = ownProps.rootClientId;
|
||
return {
|
||
blockClientIds: getBlockOrder(rootClientId),
|
||
selectionStart: getMultiSelectedBlocksStartClientId(),
|
||
selectionEnd: getMultiSelectedBlocksEndClientId(),
|
||
isSelectionEnabled: isSelectionEnabled(),
|
||
isMultiSelecting: isMultiSelecting(),
|
||
selectedBlockClientId: getSelectedBlockClientId(),
|
||
multiSelectedBlockClientIds: getMultiSelectedBlockClientIds(),
|
||
hasMultiSelection: hasMultiSelection(),
|
||
enableAnimation: !isTyping() && getGlobalBlockCount() <= BLOCK_ANIMATION_THRESHOLD
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
startMultiSelect = _dispatch.startMultiSelect,
|
||
stopMultiSelect = _dispatch.stopMultiSelect,
|
||
multiSelect = _dispatch.multiSelect;
|
||
|
||
return {
|
||
onStartMultiSelect: startMultiSelect,
|
||
onStopMultiSelect: stopMultiSelect,
|
||
onMultiSelect: multiSelect
|
||
};
|
||
})])(block_list_BlockList));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-preview/index.js
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
function ScaledBlockPreview(_ref) {
|
||
var blocks = _ref.blocks,
|
||
viewportWidth = _ref.viewportWidth;
|
||
var previewRef = Object(external_this_wp_element_["useRef"])(null);
|
||
|
||
var _useState = Object(external_this_wp_element_["useState"])(false),
|
||
_useState2 = Object(slicedToArray["a" /* default */])(_useState, 2),
|
||
isReady = _useState2[0],
|
||
setIsReady = _useState2[1];
|
||
|
||
var _useState3 = Object(external_this_wp_element_["useState"])(1),
|
||
_useState4 = Object(slicedToArray["a" /* default */])(_useState3, 2),
|
||
previewScale = _useState4[0],
|
||
setPreviewScale = _useState4[1];
|
||
|
||
var _useState5 = Object(external_this_wp_element_["useState"])({
|
||
x: 0,
|
||
y: 0
|
||
}),
|
||
_useState6 = Object(slicedToArray["a" /* default */])(_useState5, 2),
|
||
_useState6$ = _useState6[0],
|
||
x = _useState6$.x,
|
||
y = _useState6$.y,
|
||
setPosition = _useState6[1]; // Dynamically calculate the scale factor
|
||
|
||
|
||
Object(external_this_wp_element_["useLayoutEffect"])(function () {
|
||
// Timer - required to account for async render of `BlockEditorProvider`
|
||
var timerId = setTimeout(function () {
|
||
var containerElement = previewRef.current;
|
||
|
||
if (!containerElement) {
|
||
return;
|
||
} // If we're previewing a single block, scale the preview to fit it.
|
||
|
||
|
||
if (blocks.length === 1) {
|
||
var block = blocks[0];
|
||
var previewElement = getBlockPreviewContainerDOMNode(block.clientId, containerElement);
|
||
|
||
if (!previewElement) {
|
||
return;
|
||
}
|
||
|
||
var containerElementRect = containerElement.getBoundingClientRect();
|
||
var scaledElementRect = previewElement.getBoundingClientRect();
|
||
var scale = containerElementRect.width / scaledElementRect.width || 1;
|
||
var offsetX = scaledElementRect.left - containerElementRect.left;
|
||
var offsetY = containerElementRect.height > scaledElementRect.height * scale ? (containerElementRect.height - scaledElementRect.height * scale) / 2 : 0;
|
||
setPreviewScale(scale);
|
||
setPosition({
|
||
x: offsetX * scale,
|
||
y: offsetY
|
||
}); // Hack: we need to reset the scaled elements margins
|
||
|
||
previewElement.style.marginTop = '0';
|
||
} else {
|
||
var _containerElementRect = containerElement.getBoundingClientRect();
|
||
|
||
setPreviewScale(_containerElementRect.width / viewportWidth);
|
||
}
|
||
|
||
setIsReady(true);
|
||
}, 100); // Cleanup
|
||
|
||
return function () {
|
||
if (timerId) {
|
||
window.clearTimeout(timerId);
|
||
}
|
||
};
|
||
}, []);
|
||
|
||
if (!blocks || blocks.length === 0) {
|
||
return null;
|
||
}
|
||
|
||
var previewStyles = {
|
||
transform: "scale(".concat(previewScale, ")"),
|
||
visibility: isReady ? 'visible' : 'hidden',
|
||
left: -x,
|
||
top: y,
|
||
width: viewportWidth
|
||
};
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
ref: previewRef,
|
||
className: classnames_default()('block-editor-block-preview__container editor-styles-wrapper', {
|
||
'is-ready': isReady
|
||
}),
|
||
"aria-hidden": true
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Disabled"], {
|
||
style: previewStyles,
|
||
className: "block-editor-block-preview__content"
|
||
}, Object(external_this_wp_element_["createElement"])(block_list, null)));
|
||
}
|
||
|
||
function BlockPreview(_ref2) {
|
||
var blocks = _ref2.blocks,
|
||
_ref2$viewportWidth = _ref2.viewportWidth,
|
||
viewportWidth = _ref2$viewportWidth === void 0 ? 700 : _ref2$viewportWidth,
|
||
settings = _ref2.settings;
|
||
var renderedBlocks = Object(external_this_wp_element_["useMemo"])(function () {
|
||
return Object(external_lodash_["castArray"])(blocks);
|
||
}, [blocks]);
|
||
|
||
var _useReducer = Object(external_this_wp_element_["useReducer"])(function (state) {
|
||
return state + 1;
|
||
}, 0),
|
||
_useReducer2 = Object(slicedToArray["a" /* default */])(_useReducer, 2),
|
||
recompute = _useReducer2[0],
|
||
triggerRecompute = _useReducer2[1];
|
||
|
||
Object(external_this_wp_element_["useLayoutEffect"])(triggerRecompute, [blocks]);
|
||
return Object(external_this_wp_element_["createElement"])(provider, {
|
||
value: renderedBlocks,
|
||
settings: settings
|
||
}, Object(external_this_wp_element_["createElement"])(ScaledBlockPreview, {
|
||
key: recompute,
|
||
blocks: renderedBlocks,
|
||
viewportWidth: viewportWidth
|
||
}));
|
||
}
|
||
/**
|
||
* BlockPreview renders a preview of a block or array of blocks.
|
||
*
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/block-preview/README.md
|
||
*
|
||
* @param {Array|Object} blocks A block instance (object) or an array of blocks to be previewed.
|
||
* @param {number} viewportWidth Width of the preview container in pixels. Controls at what size the blocks will be rendered inside the preview. Default: 700.
|
||
* @return {WPElement} Rendered element.
|
||
*/
|
||
|
||
/* harmony default export */ var block_preview = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
return {
|
||
settings: select('core/block-editor').getSettings()
|
||
};
|
||
})(BlockPreview));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-list-item/index.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
function InserterListItem(_ref) {
|
||
var icon = _ref.icon,
|
||
_onClick = _ref.onClick,
|
||
isDisabled = _ref.isDisabled,
|
||
title = _ref.title,
|
||
className = _ref.className,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref, ["icon", "onClick", "isDisabled", "title", "className"]);
|
||
|
||
var itemIconStyle = icon ? {
|
||
backgroundColor: icon.background,
|
||
color: icon.foreground
|
||
} : {};
|
||
return Object(external_this_wp_element_["createElement"])("li", {
|
||
className: "editor-block-types-list__list-item block-editor-block-types-list__list-item"
|
||
}, Object(external_this_wp_element_["createElement"])("button", Object(esm_extends["a" /* default */])({
|
||
className: classnames_default()('editor-block-types-list__item block-editor-block-types-list__item', className),
|
||
onClick: function onClick(event) {
|
||
event.preventDefault();
|
||
|
||
_onClick();
|
||
},
|
||
disabled: isDisabled
|
||
}, props), Object(external_this_wp_element_["createElement"])("span", {
|
||
className: "editor-block-types-list__item-icon block-editor-block-types-list__item-icon",
|
||
style: itemIconStyle
|
||
}, Object(external_this_wp_element_["createElement"])(BlockIcon, {
|
||
icon: icon,
|
||
showColors: true
|
||
})), Object(external_this_wp_element_["createElement"])("span", {
|
||
className: "editor-block-types-list__item-title block-editor-block-types-list__item-title"
|
||
}, title)));
|
||
}
|
||
|
||
/* harmony default export */ var inserter_list_item = (InserterListItem);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-types-list/index.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
function BlockTypesList(_ref) {
|
||
var items = _ref.items,
|
||
onSelect = _ref.onSelect,
|
||
_ref$onHover = _ref.onHover,
|
||
onHover = _ref$onHover === void 0 ? function () {} : _ref$onHover,
|
||
children = _ref.children;
|
||
return (
|
||
/*
|
||
* Disable reason: The `list` ARIA role is redundant but
|
||
* Safari+VoiceOver won't announce the list otherwise.
|
||
*/
|
||
|
||
/* eslint-disable jsx-a11y/no-redundant-roles */
|
||
Object(external_this_wp_element_["createElement"])("ul", {
|
||
role: "list",
|
||
className: "editor-block-types-list block-editor-block-types-list"
|
||
}, items && items.map(function (item) {
|
||
return Object(external_this_wp_element_["createElement"])(inserter_list_item, {
|
||
key: item.id,
|
||
className: Object(external_this_wp_blocks_["getBlockMenuDefaultClassName"])(item.id),
|
||
icon: item.icon,
|
||
onClick: function onClick() {
|
||
onSelect(item);
|
||
onHover(null);
|
||
},
|
||
onFocus: function onFocus() {
|
||
return onHover(item);
|
||
},
|
||
onMouseEnter: function onMouseEnter() {
|
||
return onHover(item);
|
||
},
|
||
onMouseLeave: function onMouseLeave() {
|
||
return onHover(null);
|
||
},
|
||
onBlur: function onBlur() {
|
||
return onHover(null);
|
||
},
|
||
isDisabled: item.isDisabled,
|
||
title: item.title
|
||
});
|
||
}), children)
|
||
/* eslint-enable jsx-a11y/no-redundant-roles */
|
||
|
||
);
|
||
}
|
||
|
||
/* harmony default export */ var block_types_list = (BlockTypesList);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-card/index.js
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
function BlockCard(_ref) {
|
||
var blockType = _ref.blockType;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-block-card"
|
||
}, Object(external_this_wp_element_["createElement"])(BlockIcon, {
|
||
icon: blockType.icon,
|
||
showColors: true
|
||
}), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-block-card__content"
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-block-card__title"
|
||
}, blockType.title), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-block-card__description"
|
||
}, blockType.description)));
|
||
}
|
||
|
||
/* harmony default export */ var block_card = (BlockCard);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/child-blocks.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
function ChildBlocks(_ref) {
|
||
var rootBlockIcon = _ref.rootBlockIcon,
|
||
rootBlockTitle = _ref.rootBlockTitle,
|
||
items = _ref.items,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref, ["rootBlockIcon", "rootBlockTitle", "items"]);
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-inserter__child-blocks block-editor-inserter__child-blocks"
|
||
}, (rootBlockIcon || rootBlockTitle) && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-inserter__parent-block-header block-editor-inserter__parent-block-header"
|
||
}, Object(external_this_wp_element_["createElement"])(BlockIcon, {
|
||
icon: rootBlockIcon,
|
||
showColors: true
|
||
}), rootBlockTitle && Object(external_this_wp_element_["createElement"])("h2", null, rootBlockTitle)), Object(external_this_wp_element_["createElement"])(block_types_list, Object(esm_extends["a" /* default */])({
|
||
items: items
|
||
}, props)));
|
||
}
|
||
|
||
/* harmony default export */ var child_blocks = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_compose_["ifCondition"])(function (_ref2) {
|
||
var items = _ref2.items;
|
||
return items && items.length > 0;
|
||
}), Object(external_this_wp_data_["withSelect"])(function (select, _ref3) {
|
||
var rootClientId = _ref3.rootClientId;
|
||
|
||
var _select = select('core/blocks'),
|
||
getBlockType = _select.getBlockType;
|
||
|
||
var _select2 = select('core/block-editor'),
|
||
getBlockName = _select2.getBlockName;
|
||
|
||
var rootBlockName = getBlockName(rootClientId);
|
||
var rootBlockType = getBlockType(rootBlockName);
|
||
return {
|
||
rootBlockTitle: rootBlockType && rootBlockType.title,
|
||
rootBlockIcon: rootBlockType && rootBlockType.icon
|
||
};
|
||
}))(ChildBlocks));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-menu-extension/index.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
var inserter_menu_extension_createSlotFill = Object(external_this_wp_components_["createSlotFill"])('__experimentalInserterMenuExtension'),
|
||
__experimentalInserterMenuExtension = inserter_menu_extension_createSlotFill.Fill,
|
||
inserter_menu_extension_Slot = inserter_menu_extension_createSlotFill.Slot;
|
||
|
||
__experimentalInserterMenuExtension.Slot = inserter_menu_extension_Slot;
|
||
/* harmony default export */ var inserter_menu_extension = (__experimentalInserterMenuExtension);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/menu.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
var MAX_SUGGESTED_ITEMS = 9;
|
||
|
||
var stopKeyPropagation = function stopKeyPropagation(event) {
|
||
return event.stopPropagation();
|
||
};
|
||
/**
|
||
* Filters an item list given a search term.
|
||
*
|
||
* @param {Array} items Item list
|
||
* @param {string} searchTerm Search term.
|
||
*
|
||
* @return {Array} Filtered item list.
|
||
*/
|
||
|
||
|
||
var menu_searchItems = function searchItems(items, searchTerm) {
|
||
var normalizedSearchTerm = menu_normalizeTerm(searchTerm);
|
||
|
||
var matchSearch = function matchSearch(string) {
|
||
return menu_normalizeTerm(string).indexOf(normalizedSearchTerm) !== -1;
|
||
};
|
||
|
||
var categories = Object(external_this_wp_blocks_["getCategories"])();
|
||
return items.filter(function (item) {
|
||
var itemCategory = Object(external_lodash_["find"])(categories, {
|
||
slug: item.category
|
||
});
|
||
return matchSearch(item.title) || Object(external_lodash_["some"])(item.keywords, matchSearch) || itemCategory && matchSearch(itemCategory.title);
|
||
});
|
||
};
|
||
/**
|
||
* Converts the search term into a normalized term.
|
||
*
|
||
* @param {string} term The search term to normalize.
|
||
*
|
||
* @return {string} The normalized search term.
|
||
*/
|
||
|
||
var menu_normalizeTerm = function normalizeTerm(term) {
|
||
// Disregard diacritics.
|
||
// Input: "média"
|
||
term = Object(external_lodash_["deburr"])(term); // Accommodate leading slash, matching autocomplete expectations.
|
||
// Input: "/media"
|
||
|
||
term = term.replace(/^\//, ''); // Lowercase.
|
||
// Input: "MEDIA"
|
||
|
||
term = term.toLowerCase(); // Strip leading and trailing whitespace.
|
||
// Input: " media "
|
||
|
||
term = term.trim();
|
||
return term;
|
||
};
|
||
var menu_InserterMenu =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(InserterMenu, _Component);
|
||
|
||
function InserterMenu() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, InserterMenu);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(InserterMenu).apply(this, arguments));
|
||
_this.state = {
|
||
childItems: [],
|
||
filterValue: '',
|
||
hoveredItem: null,
|
||
suggestedItems: [],
|
||
reusableItems: [],
|
||
itemsPerCategory: {},
|
||
openPanels: ['suggested']
|
||
};
|
||
_this.onChangeSearchInput = _this.onChangeSearchInput.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onHover = _this.onHover.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.panels = {};
|
||
_this.inserterResults = Object(external_this_wp_element_["createRef"])();
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(InserterMenu, [{
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
// This could be replaced by a resolver.
|
||
this.props.fetchReusableBlocks();
|
||
this.filter();
|
||
}
|
||
}, {
|
||
key: "componentDidUpdate",
|
||
value: function componentDidUpdate(prevProps) {
|
||
if (prevProps.items !== this.props.items) {
|
||
this.filter(this.state.filterValue);
|
||
}
|
||
}
|
||
}, {
|
||
key: "onChangeSearchInput",
|
||
value: function onChangeSearchInput(event) {
|
||
this.filter(event.target.value);
|
||
}
|
||
}, {
|
||
key: "onHover",
|
||
value: function onHover(item) {
|
||
this.setState({
|
||
hoveredItem: item
|
||
});
|
||
var _this$props = this.props,
|
||
showInsertionPoint = _this$props.showInsertionPoint,
|
||
hideInsertionPoint = _this$props.hideInsertionPoint;
|
||
|
||
if (item) {
|
||
showInsertionPoint();
|
||
} else {
|
||
hideInsertionPoint();
|
||
}
|
||
}
|
||
}, {
|
||
key: "bindPanel",
|
||
value: function bindPanel(name) {
|
||
var _this2 = this;
|
||
|
||
return function (ref) {
|
||
_this2.panels[name] = ref;
|
||
};
|
||
}
|
||
}, {
|
||
key: "onTogglePanel",
|
||
value: function onTogglePanel(panel) {
|
||
var _this3 = this;
|
||
|
||
return function () {
|
||
var isOpened = _this3.state.openPanels.indexOf(panel) !== -1;
|
||
|
||
if (isOpened) {
|
||
_this3.setState({
|
||
openPanels: Object(external_lodash_["without"])(_this3.state.openPanels, panel)
|
||
});
|
||
} else {
|
||
_this3.setState({
|
||
openPanels: [].concat(Object(toConsumableArray["a" /* default */])(_this3.state.openPanels), [panel])
|
||
});
|
||
|
||
_this3.props.setTimeout(function () {
|
||
// We need a generic way to access the panel's container
|
||
lib_default()(_this3.panels[panel], _this3.inserterResults.current, {
|
||
alignWithTop: true
|
||
});
|
||
});
|
||
}
|
||
};
|
||
}
|
||
}, {
|
||
key: "filterOpenPanels",
|
||
value: function filterOpenPanels(filterValue, itemsPerCategory, filteredItems, reusableItems) {
|
||
if (filterValue === this.state.filterValue) {
|
||
return this.state.openPanels;
|
||
}
|
||
|
||
if (!filterValue) {
|
||
return ['suggested'];
|
||
}
|
||
|
||
var openPanels = [];
|
||
|
||
if (reusableItems.length > 0) {
|
||
openPanels.push('reusable');
|
||
}
|
||
|
||
if (filteredItems.length > 0) {
|
||
openPanels = openPanels.concat(Object.keys(itemsPerCategory));
|
||
}
|
||
|
||
return openPanels;
|
||
}
|
||
}, {
|
||
key: "filter",
|
||
value: function filter() {
|
||
var filterValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
||
var _this$props2 = this.props,
|
||
debouncedSpeak = _this$props2.debouncedSpeak,
|
||
items = _this$props2.items,
|
||
rootChildBlocks = _this$props2.rootChildBlocks;
|
||
var filteredItems = menu_searchItems(items, filterValue);
|
||
|
||
var childItems = Object(external_lodash_["filter"])(filteredItems, function (_ref) {
|
||
var name = _ref.name;
|
||
return Object(external_lodash_["includes"])(rootChildBlocks, name);
|
||
});
|
||
|
||
var suggestedItems = [];
|
||
|
||
if (!filterValue) {
|
||
var maxSuggestedItems = this.props.maxSuggestedItems || MAX_SUGGESTED_ITEMS;
|
||
suggestedItems = Object(external_lodash_["filter"])(items, function (item) {
|
||
return item.utility > 0;
|
||
}).slice(0, maxSuggestedItems);
|
||
}
|
||
|
||
var reusableItems = Object(external_lodash_["filter"])(filteredItems, {
|
||
category: 'reusable'
|
||
});
|
||
|
||
var getCategoryIndex = function getCategoryIndex(item) {
|
||
return Object(external_lodash_["findIndex"])(Object(external_this_wp_blocks_["getCategories"])(), function (category) {
|
||
return category.slug === item.category;
|
||
});
|
||
};
|
||
|
||
var itemsPerCategory = Object(external_lodash_["flow"])(function (itemList) {
|
||
return Object(external_lodash_["filter"])(itemList, function (item) {
|
||
return item.category !== 'reusable';
|
||
});
|
||
}, function (itemList) {
|
||
return Object(external_lodash_["sortBy"])(itemList, getCategoryIndex);
|
||
}, function (itemList) {
|
||
return Object(external_lodash_["groupBy"])(itemList, 'category');
|
||
})(filteredItems);
|
||
this.setState({
|
||
hoveredItem: null,
|
||
childItems: childItems,
|
||
filterValue: filterValue,
|
||
suggestedItems: suggestedItems,
|
||
reusableItems: reusableItems,
|
||
itemsPerCategory: itemsPerCategory,
|
||
openPanels: this.filterOpenPanels(filterValue, itemsPerCategory, filteredItems, reusableItems)
|
||
});
|
||
var resultCount = Object.keys(itemsPerCategory).reduce(function (accumulator, currentCategorySlug) {
|
||
return accumulator + itemsPerCategory[currentCategorySlug].length;
|
||
}, 0);
|
||
var resultsFoundMessage = Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["_n"])('%d result found.', '%d results found.', resultCount), resultCount);
|
||
debouncedSpeak(resultsFoundMessage);
|
||
}
|
||
}, {
|
||
key: "onKeyDown",
|
||
value: function onKeyDown(event) {
|
||
if (Object(external_lodash_["includes"])([external_this_wp_keycodes_["LEFT"], external_this_wp_keycodes_["DOWN"], external_this_wp_keycodes_["RIGHT"], external_this_wp_keycodes_["UP"], external_this_wp_keycodes_["BACKSPACE"], external_this_wp_keycodes_["ENTER"]], event.keyCode)) {
|
||
// Stop the key event from propagating up to ObserveTyping.startTypingInTextField.
|
||
event.stopPropagation();
|
||
}
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this4 = this;
|
||
|
||
var _this$props3 = this.props,
|
||
instanceId = _this$props3.instanceId,
|
||
onSelect = _this$props3.onSelect,
|
||
rootClientId = _this$props3.rootClientId,
|
||
showInserterHelpPanel = _this$props3.showInserterHelpPanel;
|
||
var _this$state = this.state,
|
||
childItems = _this$state.childItems,
|
||
hoveredItem = _this$state.hoveredItem,
|
||
itemsPerCategory = _this$state.itemsPerCategory,
|
||
openPanels = _this$state.openPanels,
|
||
reusableItems = _this$state.reusableItems,
|
||
suggestedItems = _this$state.suggestedItems,
|
||
filterValue = _this$state.filterValue;
|
||
|
||
var isPanelOpen = function isPanelOpen(panel) {
|
||
return openPanels.indexOf(panel) !== -1;
|
||
};
|
||
|
||
var hasItems = !Object(external_lodash_["isEmpty"])(suggestedItems) || !Object(external_lodash_["isEmpty"])(reusableItems) || !Object(external_lodash_["isEmpty"])(itemsPerCategory);
|
||
var hoveredItemBlockType = hoveredItem ? Object(external_this_wp_blocks_["getBlockType"])(hoveredItem.name) : null;
|
||
var hasHelpPanel = hasItems && showInserterHelpPanel; // Disable reason (no-autofocus): The inserter menu is a modal display, not one which
|
||
// is always visible, and one which already incurs this behavior of autoFocus via
|
||
// Popover's focusOnMount.
|
||
// Disable reason (no-static-element-interactions): Navigational key-presses within
|
||
// the menu are prevented from triggering WritingFlow and ObserveTyping interactions.
|
||
|
||
/* eslint-disable jsx-a11y/no-autofocus, jsx-a11y/no-static-element-interactions */
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: classnames_default()('editor-inserter__menu block-editor-inserter__menu', {
|
||
'has-help-panel': hasHelpPanel
|
||
}),
|
||
onKeyPress: stopKeyPropagation,
|
||
onKeyDown: this.onKeyDown
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-inserter__main-area"
|
||
}, Object(external_this_wp_element_["createElement"])("label", {
|
||
htmlFor: "block-editor-inserter__search-".concat(instanceId),
|
||
className: "screen-reader-text"
|
||
}, Object(external_this_wp_i18n_["__"])('Search for a block')), Object(external_this_wp_element_["createElement"])("input", {
|
||
id: "block-editor-inserter__search-".concat(instanceId),
|
||
type: "search",
|
||
placeholder: Object(external_this_wp_i18n_["__"])('Search for a block'),
|
||
className: "editor-inserter__search block-editor-inserter__search",
|
||
autoFocus: true,
|
||
onChange: this.onChangeSearchInput
|
||
}), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-inserter__results block-editor-inserter__results",
|
||
ref: this.inserterResults,
|
||
tabIndex: "0",
|
||
role: "region",
|
||
"aria-label": Object(external_this_wp_i18n_["__"])('Available block types')
|
||
}, Object(external_this_wp_element_["createElement"])(child_blocks, {
|
||
rootClientId: rootClientId,
|
||
items: childItems,
|
||
onSelect: onSelect,
|
||
onHover: this.onHover
|
||
}), !!suggestedItems.length && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["PanelBody"], {
|
||
title: Object(external_this_wp_i18n_["_x"])('Most Used', 'blocks'),
|
||
opened: isPanelOpen('suggested'),
|
||
onToggle: this.onTogglePanel('suggested'),
|
||
ref: this.bindPanel('suggested')
|
||
}, Object(external_this_wp_element_["createElement"])(block_types_list, {
|
||
items: suggestedItems,
|
||
onSelect: onSelect,
|
||
onHover: this.onHover
|
||
})), Object(external_lodash_["map"])(Object(external_this_wp_blocks_["getCategories"])(), function (category) {
|
||
var categoryItems = itemsPerCategory[category.slug];
|
||
|
||
if (!categoryItems || !categoryItems.length) {
|
||
return null;
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["PanelBody"], {
|
||
key: category.slug,
|
||
title: category.title,
|
||
icon: category.icon,
|
||
opened: isPanelOpen(category.slug),
|
||
onToggle: _this4.onTogglePanel(category.slug),
|
||
ref: _this4.bindPanel(category.slug)
|
||
}, Object(external_this_wp_element_["createElement"])(block_types_list, {
|
||
items: categoryItems,
|
||
onSelect: onSelect,
|
||
onHover: _this4.onHover
|
||
}));
|
||
}), !!reusableItems.length && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["PanelBody"], {
|
||
className: "editor-inserter__reusable-blocks-panel block-editor-inserter__reusable-blocks-panel",
|
||
title: Object(external_this_wp_i18n_["__"])('Reusable'),
|
||
opened: isPanelOpen('reusable'),
|
||
onToggle: this.onTogglePanel('reusable'),
|
||
icon: "controls-repeat",
|
||
ref: this.bindPanel('reusable')
|
||
}, Object(external_this_wp_element_["createElement"])(block_types_list, {
|
||
items: reusableItems,
|
||
onSelect: onSelect,
|
||
onHover: this.onHover
|
||
}), Object(external_this_wp_element_["createElement"])("a", {
|
||
className: "editor-inserter__manage-reusable-blocks block-editor-inserter__manage-reusable-blocks",
|
||
href: Object(external_this_wp_url_["addQueryArgs"])('edit.php', {
|
||
post_type: 'wp_block'
|
||
})
|
||
}, Object(external_this_wp_i18n_["__"])('Manage All Reusable Blocks'))), Object(external_this_wp_element_["createElement"])(inserter_menu_extension.Slot, {
|
||
fillProps: {
|
||
onSelect: onSelect,
|
||
onHover: this.onHover,
|
||
filterValue: filterValue,
|
||
hasItems: hasItems
|
||
}
|
||
}, function (fills) {
|
||
if (fills.length) {
|
||
return fills;
|
||
}
|
||
|
||
if (!hasItems) {
|
||
return Object(external_this_wp_element_["createElement"])("p", {
|
||
className: "editor-inserter__no-results block-editor-inserter__no-results"
|
||
}, Object(external_this_wp_i18n_["__"])('No blocks found.'));
|
||
}
|
||
|
||
return null;
|
||
}))), hasHelpPanel && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-inserter__menu-help-panel"
|
||
}, hoveredItem && Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, !Object(external_this_wp_blocks_["isReusableBlock"])(hoveredItem) && Object(external_this_wp_element_["createElement"])(block_card, {
|
||
blockType: hoveredItemBlockType
|
||
}), (Object(external_this_wp_blocks_["isReusableBlock"])(hoveredItem) || hoveredItemBlockType.example) && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-inserter__preview"
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-inserter__preview-content"
|
||
}, Object(external_this_wp_element_["createElement"])(block_preview, {
|
||
viewportWidth: 500,
|
||
blocks: hoveredItemBlockType.example ? Object(external_this_wp_blocks_["getBlockFromExample"])(hoveredItem.name, hoveredItemBlockType.example) : Object(external_this_wp_blocks_["createBlock"])(hoveredItem.name, hoveredItem.initialAttributes)
|
||
})))), !hoveredItem && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-inserter__menu-help-panel-no-block"
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-inserter__menu-help-panel-no-block-text"
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-inserter__menu-help-panel-title"
|
||
}, Object(external_this_wp_i18n_["__"])('Content Blocks')), Object(external_this_wp_element_["createElement"])("p", null, Object(external_this_wp_i18n_["__"])('Welcome to the wonderful world of blocks! Blocks are the basis of all content within the editor.')), Object(external_this_wp_element_["createElement"])("p", null, Object(external_this_wp_i18n_["__"])('There are blocks available for all kinds of content: insert text, headings, images, lists, videos, tables, and lots more.')), Object(external_this_wp_element_["createElement"])("p", null, Object(external_this_wp_i18n_["__"])('Browse through the library to learn more about what each block does.'))), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Tip"], null, Object(external_this_wp_i18n_["__"])('While writing, you can press "/" to quickly insert new blocks.')))));
|
||
/* eslint-enable jsx-a11y/no-autofocus, jsx-a11y/no-static-element-interactions */
|
||
}
|
||
}]);
|
||
|
||
return InserterMenu;
|
||
}(external_this_wp_element_["Component"]);
|
||
/* harmony default export */ var menu = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withSelect"])(function (select, _ref2) {
|
||
var clientId = _ref2.clientId,
|
||
isAppender = _ref2.isAppender,
|
||
rootClientId = _ref2.rootClientId,
|
||
showInserterHelpPanel = _ref2.showInserterHelpPanel;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getInserterItems = _select.getInserterItems,
|
||
getBlockName = _select.getBlockName,
|
||
getBlockRootClientId = _select.getBlockRootClientId,
|
||
getBlockSelectionEnd = _select.getBlockSelectionEnd,
|
||
getSettings = _select.getSettings;
|
||
|
||
var _select2 = select('core/blocks'),
|
||
getChildBlockNames = _select2.getChildBlockNames;
|
||
|
||
var destinationRootClientId = rootClientId;
|
||
|
||
if (!destinationRootClientId && !clientId && !isAppender) {
|
||
var end = getBlockSelectionEnd();
|
||
|
||
if (end) {
|
||
destinationRootClientId = getBlockRootClientId(end) || undefined;
|
||
}
|
||
}
|
||
|
||
var destinationRootBlockName = getBlockName(destinationRootClientId);
|
||
return {
|
||
rootChildBlocks: getChildBlockNames(destinationRootBlockName),
|
||
items: getInserterItems(destinationRootClientId),
|
||
showInserterHelpPanel: showInserterHelpPanel && getSettings().showInserterHelpPanel,
|
||
destinationRootClientId: destinationRootClientId
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps, _ref3) {
|
||
var select = _ref3.select;
|
||
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
_showInsertionPoint = _dispatch.showInsertionPoint,
|
||
hideInsertionPoint = _dispatch.hideInsertionPoint; // This should be an external action provided in the editor settings.
|
||
|
||
|
||
var _dispatch2 = dispatch('core/editor'),
|
||
fetchReusableBlocks = _dispatch2.__experimentalFetchReusableBlocks; // To avoid duplication, getInsertionIndex is extracted and used in two event handlers
|
||
// This breaks the withDispatch not containing any logic rule.
|
||
// Since it's a function only called when the event handlers are called,
|
||
// it's fine to extract it.
|
||
// eslint-disable-next-line no-restricted-syntax
|
||
|
||
|
||
function getInsertionIndex() {
|
||
var _select3 = select('core/block-editor'),
|
||
getBlockIndex = _select3.getBlockIndex,
|
||
getBlockSelectionEnd = _select3.getBlockSelectionEnd,
|
||
getBlockOrder = _select3.getBlockOrder;
|
||
|
||
var clientId = ownProps.clientId,
|
||
destinationRootClientId = ownProps.destinationRootClientId,
|
||
isAppender = ownProps.isAppender; // If the clientId is defined, we insert at the position of the block.
|
||
|
||
if (clientId) {
|
||
return getBlockIndex(clientId, destinationRootClientId);
|
||
} // If there a selected block, we insert after the selected block.
|
||
|
||
|
||
var end = getBlockSelectionEnd();
|
||
|
||
if (!isAppender && end) {
|
||
return getBlockIndex(end, destinationRootClientId) + 1;
|
||
} // Otherwise, we insert at the end of the current rootClientId
|
||
|
||
|
||
return getBlockOrder(destinationRootClientId).length;
|
||
}
|
||
|
||
return {
|
||
fetchReusableBlocks: fetchReusableBlocks,
|
||
showInsertionPoint: function showInsertionPoint() {
|
||
var index = getInsertionIndex();
|
||
|
||
_showInsertionPoint(ownProps.destinationRootClientId, index);
|
||
},
|
||
hideInsertionPoint: hideInsertionPoint,
|
||
onSelect: function onSelect(item) {
|
||
var _dispatch3 = dispatch('core/block-editor'),
|
||
replaceBlocks = _dispatch3.replaceBlocks,
|
||
insertBlock = _dispatch3.insertBlock;
|
||
|
||
var _select4 = select('core/block-editor'),
|
||
getSelectedBlock = _select4.getSelectedBlock;
|
||
|
||
var isAppender = ownProps.isAppender;
|
||
var name = item.name,
|
||
initialAttributes = item.initialAttributes;
|
||
var selectedBlock = getSelectedBlock();
|
||
var insertedBlock = Object(external_this_wp_blocks_["createBlock"])(name, initialAttributes);
|
||
|
||
if (!isAppender && selectedBlock && Object(external_this_wp_blocks_["isUnmodifiedDefaultBlock"])(selectedBlock)) {
|
||
replaceBlocks(selectedBlock.clientId, insertedBlock);
|
||
} else {
|
||
insertBlock(insertedBlock, getInsertionIndex(), ownProps.destinationRootClientId);
|
||
}
|
||
|
||
ownProps.onSelect();
|
||
return insertedBlock;
|
||
}
|
||
};
|
||
}), external_this_wp_components_["withSpokenMessages"], external_this_wp_compose_["withInstanceId"], external_this_wp_compose_["withSafeTimeout"])(menu_InserterMenu));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var inserter_defaultRenderToggle = function defaultRenderToggle(_ref) {
|
||
var onToggle = _ref.onToggle,
|
||
disabled = _ref.disabled,
|
||
isOpen = _ref.isOpen;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
icon: "insert",
|
||
label: Object(external_this_wp_i18n_["__"])('Add block'),
|
||
labelPosition: "bottom",
|
||
onClick: onToggle,
|
||
className: "editor-inserter__toggle block-editor-inserter__toggle",
|
||
"aria-haspopup": "true",
|
||
"aria-expanded": isOpen,
|
||
disabled: disabled
|
||
});
|
||
};
|
||
|
||
var inserter_Inserter =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(Inserter, _Component);
|
||
|
||
function Inserter() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, Inserter);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(Inserter).apply(this, arguments));
|
||
_this.onToggle = _this.onToggle.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.renderToggle = _this.renderToggle.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.renderContent = _this.renderContent.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(Inserter, [{
|
||
key: "onToggle",
|
||
value: function onToggle(isOpen) {
|
||
var onToggle = this.props.onToggle; // Surface toggle callback to parent component
|
||
|
||
if (onToggle) {
|
||
onToggle(isOpen);
|
||
}
|
||
}
|
||
/**
|
||
* Render callback to display Dropdown toggle element.
|
||
*
|
||
* @param {Object} options
|
||
* @param {Function} options.onToggle Callback to invoke when toggle is
|
||
* pressed.
|
||
* @param {boolean} options.isOpen Whether dropdown is currently open.
|
||
*
|
||
* @return {WPElement} Dropdown toggle element.
|
||
*/
|
||
|
||
}, {
|
||
key: "renderToggle",
|
||
value: function renderToggle(_ref2) {
|
||
var onToggle = _ref2.onToggle,
|
||
isOpen = _ref2.isOpen;
|
||
var _this$props = this.props,
|
||
disabled = _this$props.disabled,
|
||
_this$props$renderTog = _this$props.renderToggle,
|
||
renderToggle = _this$props$renderTog === void 0 ? inserter_defaultRenderToggle : _this$props$renderTog;
|
||
return renderToggle({
|
||
onToggle: onToggle,
|
||
isOpen: isOpen,
|
||
disabled: disabled
|
||
});
|
||
}
|
||
/**
|
||
* Render callback to display Dropdown content element.
|
||
*
|
||
* @param {Object} options
|
||
* @param {Function} options.onClose Callback to invoke when dropdown is
|
||
* closed.
|
||
*
|
||
* @return {WPElement} Dropdown content element.
|
||
*/
|
||
|
||
}, {
|
||
key: "renderContent",
|
||
value: function renderContent(_ref3) {
|
||
var onClose = _ref3.onClose;
|
||
var _this$props2 = this.props,
|
||
rootClientId = _this$props2.rootClientId,
|
||
clientId = _this$props2.clientId,
|
||
isAppender = _this$props2.isAppender,
|
||
showInserterHelpPanel = _this$props2.showInserterHelpPanel;
|
||
return Object(external_this_wp_element_["createElement"])(menu, {
|
||
onSelect: onClose,
|
||
rootClientId: rootClientId,
|
||
clientId: clientId,
|
||
isAppender: isAppender,
|
||
showInserterHelpPanel: showInserterHelpPanel
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var position = this.props.position;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Dropdown"], {
|
||
className: "editor-inserter block-editor-inserter",
|
||
contentClassName: "editor-inserter__popover block-editor-inserter__popover",
|
||
position: position,
|
||
onToggle: this.onToggle,
|
||
expandOnMobile: true,
|
||
headerTitle: Object(external_this_wp_i18n_["__"])('Add a block'),
|
||
renderToggle: this.renderToggle,
|
||
renderContent: this.renderContent
|
||
});
|
||
}
|
||
}]);
|
||
|
||
return Inserter;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var inserter = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select, _ref4) {
|
||
var rootClientId = _ref4.rootClientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
hasInserterItems = _select.hasInserterItems;
|
||
|
||
return {
|
||
hasItems: hasInserterItems(rootClientId)
|
||
};
|
||
}), Object(external_this_wp_compose_["ifCondition"])(function (_ref5) {
|
||
var hasItems = _ref5.hasItems;
|
||
return hasItems;
|
||
})])(inserter_Inserter));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/button-block-appender/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
function button_block_appender_ButtonBlockAppender(_ref) {
|
||
var rootClientId = _ref.rootClientId,
|
||
className = _ref.className;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(block_drop_zone, {
|
||
rootClientId: rootClientId
|
||
}), Object(external_this_wp_element_["createElement"])(inserter, {
|
||
rootClientId: rootClientId,
|
||
renderToggle: function renderToggle(_ref2) {
|
||
var onToggle = _ref2.onToggle,
|
||
disabled = _ref2.disabled,
|
||
isOpen = _ref2.isOpen;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
className: classnames_default()(className, 'block-editor-button-block-appender'),
|
||
onClick: onToggle,
|
||
"aria-expanded": isOpen,
|
||
disabled: disabled
|
||
}, Object(external_this_wp_element_["createElement"])("span", {
|
||
className: "screen-reader-text"
|
||
}, Object(external_this_wp_i18n_["__"])('Add Block')), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Icon"], {
|
||
icon: "insert"
|
||
}));
|
||
},
|
||
isAppender: true
|
||
}));
|
||
}
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/button-block-appender/README.md
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var button_block_appender = (button_block_appender_ButtonBlockAppender);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/color-palette/with-color-context.js
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/* harmony default export */ var with_color_context = (Object(external_this_wp_compose_["createHigherOrderComponent"])(Object(external_this_wp_data_["withSelect"])(function (select, ownProps) {
|
||
var settings = select('core/block-editor').getSettings();
|
||
var colors = ownProps.colors === undefined ? settings.colors : ownProps.colors;
|
||
var disableCustomColors = ownProps.disableCustomColors === undefined ? settings.disableCustomColors : ownProps.disableCustomColors;
|
||
return {
|
||
colors: colors,
|
||
disableCustomColors: disableCustomColors,
|
||
hasColorsToChoose: !Object(external_lodash_["isEmpty"])(colors) || !disableCustomColors
|
||
};
|
||
}), 'withColorContext'));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/color-palette/index.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var color_palette = (with_color_context(external_this_wp_components_["ColorPalette"]));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/contrast-checker/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
function ContrastCheckerMessage(_ref) {
|
||
var tinyBackgroundColor = _ref.tinyBackgroundColor,
|
||
tinyTextColor = _ref.tinyTextColor,
|
||
backgroundColor = _ref.backgroundColor,
|
||
textColor = _ref.textColor;
|
||
var msg = tinyBackgroundColor.getBrightness() < tinyTextColor.getBrightness() ? Object(external_this_wp_i18n_["__"])('This color combination may be hard for people to read. Try using a darker background color and/or a brighter text color.') : Object(external_this_wp_i18n_["__"])('This color combination may be hard for people to read. Try using a brighter background color and/or a darker text color.');
|
||
Object(external_this_wp_element_["useEffect"])(function () {
|
||
Object(external_this_wp_a11y_["speak"])(Object(external_this_wp_i18n_["__"])('This color combination may be hard for people to read.'));
|
||
}, [backgroundColor, textColor]);
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-contrast-checker block-editor-contrast-checker"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Notice"], {
|
||
status: "warning",
|
||
isDismissible: false
|
||
}, msg));
|
||
}
|
||
|
||
function ContrastChecker(_ref2) {
|
||
var backgroundColor = _ref2.backgroundColor,
|
||
fallbackBackgroundColor = _ref2.fallbackBackgroundColor,
|
||
fallbackTextColor = _ref2.fallbackTextColor,
|
||
fontSize = _ref2.fontSize,
|
||
isLargeText = _ref2.isLargeText,
|
||
textColor = _ref2.textColor;
|
||
|
||
if (!(backgroundColor || fallbackBackgroundColor) || !(textColor || fallbackTextColor)) {
|
||
return null;
|
||
}
|
||
|
||
var tinyBackgroundColor = tinycolor_default()(backgroundColor || fallbackBackgroundColor);
|
||
var tinyTextColor = tinycolor_default()(textColor || fallbackTextColor);
|
||
var hasTransparency = tinyBackgroundColor.getAlpha() !== 1 || tinyTextColor.getAlpha() !== 1;
|
||
|
||
if (hasTransparency || tinycolor_default.a.isReadable(tinyBackgroundColor, tinyTextColor, {
|
||
level: 'AA',
|
||
size: isLargeText || isLargeText !== false && fontSize >= 24 ? 'large' : 'small'
|
||
})) {
|
||
return null;
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(ContrastCheckerMessage, {
|
||
backgroundColor: backgroundColor,
|
||
textColor: textColor,
|
||
tinyBackgroundColor: tinyBackgroundColor,
|
||
tinyTextColor: tinyTextColor
|
||
});
|
||
}
|
||
|
||
/* harmony default export */ var contrast_checker = (ContrastChecker);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","isShallowEqual"]}
|
||
var external_this_wp_isShallowEqual_ = __webpack_require__(41);
|
||
var external_this_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_this_wp_isShallowEqual_);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/with-client-id.js
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
var withClientId = Object(external_this_wp_compose_["createHigherOrderComponent"])(function (WrappedComponent) {
|
||
return context_withBlockEditContext(function (context) {
|
||
return Object(external_lodash_["pick"])(context, ['clientId']);
|
||
})(WrappedComponent);
|
||
}, 'withClientId');
|
||
/* harmony default export */ var with_client_id = (withClientId);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/button-block-appender.js
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
var inner_blocks_button_block_appender_ButtonBlockAppender = function ButtonBlockAppender(_ref) {
|
||
var clientId = _ref.clientId;
|
||
return Object(external_this_wp_element_["createElement"])(button_block_appender, {
|
||
rootClientId: clientId
|
||
});
|
||
};
|
||
/* harmony default export */ var inner_blocks_button_block_appender = (with_client_id(inner_blocks_button_block_appender_ButtonBlockAppender));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/default-block-appender.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
var inner_blocks_default_block_appender_DefaultBlockAppender = function DefaultBlockAppender(_ref) {
|
||
var clientId = _ref.clientId,
|
||
lastBlockClientId = _ref.lastBlockClientId;
|
||
return Object(external_this_wp_element_["createElement"])(ignore_nested_events, {
|
||
childHandledEvents: ['onFocus', 'onClick', 'onKeyDown']
|
||
}, Object(external_this_wp_element_["createElement"])(default_block_appender, {
|
||
rootClientId: clientId,
|
||
lastBlockClientId: lastBlockClientId
|
||
}));
|
||
};
|
||
/* harmony default export */ var inner_blocks_default_block_appender = (Object(external_this_wp_compose_["compose"])([with_client_id, Object(external_this_wp_data_["withSelect"])(function (select, _ref2) {
|
||
var clientId = _ref2.clientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlockOrder = _select.getBlockOrder;
|
||
|
||
var blockClientIds = getBlockOrder(clientId);
|
||
return {
|
||
lastBlockClientId: Object(external_lodash_["last"])(blockClientIds)
|
||
};
|
||
})])(inner_blocks_default_block_appender_DefaultBlockAppender));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/template-picker.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
function InnerBlocksTemplatePicker(_ref) {
|
||
var options = _ref.options,
|
||
onSelect = _ref.onSelect,
|
||
allowSkip = _ref.allowSkip;
|
||
var classes = classnames_default()('block-editor-inner-blocks__template-picker', {
|
||
'has-many-options': options.length > 4
|
||
});
|
||
var instructions = allowSkip ? Object(external_this_wp_i18n_["__"])('Select a layout to start with, or make one yourself.') : Object(external_this_wp_i18n_["__"])('Select a layout to start with.');
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Placeholder"], {
|
||
icon: "layout",
|
||
label: Object(external_this_wp_i18n_["__"])('Choose Layout'),
|
||
instructions: instructions,
|
||
className: classes
|
||
}, Object(external_this_wp_element_["createElement"])("ul", {
|
||
className: "block-editor-inner-blocks__template-picker-options",
|
||
role: "list"
|
||
}, options.map(function (templateOption, index) {
|
||
return Object(external_this_wp_element_["createElement"])("li", {
|
||
key: index
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
isLarge: true,
|
||
icon: templateOption.icon,
|
||
onClick: function onClick() {
|
||
return onSelect(templateOption.template);
|
||
},
|
||
className: "block-editor-inner-blocks__template-picker-option",
|
||
label: templateOption.title
|
||
}));
|
||
})), allowSkip && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-inner-blocks__template-picker-skip"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
isLink: true,
|
||
onClick: function onClick() {
|
||
return onSelect(undefined);
|
||
}
|
||
}, Object(external_this_wp_i18n_["__"])('Skip'))));
|
||
}
|
||
|
||
/* harmony default export */ var template_picker = (InnerBlocksTemplatePicker);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
// Temporary click-through disable on desktop.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
var inner_blocks_InnerBlocks =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(InnerBlocks, _Component);
|
||
|
||
function InnerBlocks() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, InnerBlocks);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(InnerBlocks).apply(this, arguments));
|
||
_this.state = {
|
||
templateInProcess: !!_this.props.template
|
||
};
|
||
|
||
_this.updateNestedSettings();
|
||
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(InnerBlocks, [{
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
var _this$props = this.props,
|
||
templateLock = _this$props.templateLock,
|
||
block = _this$props.block;
|
||
var innerBlocks = block.innerBlocks; // Only synchronize innerBlocks with template if innerBlocks are empty or a locking all exists directly on the block.
|
||
|
||
if (innerBlocks.length === 0 || templateLock === 'all') {
|
||
this.synchronizeBlocksWithTemplate();
|
||
}
|
||
|
||
if (this.state.templateInProcess) {
|
||
this.setState({
|
||
templateInProcess: false
|
||
});
|
||
}
|
||
}
|
||
}, {
|
||
key: "componentDidUpdate",
|
||
value: function componentDidUpdate(prevProps) {
|
||
var _this$props2 = this.props,
|
||
template = _this$props2.template,
|
||
block = _this$props2.block,
|
||
templateLock = _this$props2.templateLock;
|
||
var innerBlocks = block.innerBlocks;
|
||
this.updateNestedSettings(); // Only synchronize innerBlocks with template if innerBlocks are empty or a locking all exists directly on the block.
|
||
|
||
if (innerBlocks.length === 0 || templateLock === 'all') {
|
||
var hasTemplateChanged = !Object(external_lodash_["isEqual"])(template, prevProps.template);
|
||
|
||
if (hasTemplateChanged) {
|
||
this.synchronizeBlocksWithTemplate();
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Called on mount or when a mismatch exists between the templates and
|
||
* inner blocks, synchronizes inner blocks with the template, replacing
|
||
* current blocks.
|
||
*/
|
||
|
||
}, {
|
||
key: "synchronizeBlocksWithTemplate",
|
||
value: function synchronizeBlocksWithTemplate() {
|
||
var _this$props3 = this.props,
|
||
template = _this$props3.template,
|
||
block = _this$props3.block,
|
||
replaceInnerBlocks = _this$props3.replaceInnerBlocks;
|
||
var innerBlocks = block.innerBlocks; // Synchronize with templates. If the next set differs, replace.
|
||
|
||
var nextBlocks = Object(external_this_wp_blocks_["synchronizeBlocksWithTemplate"])(innerBlocks, template);
|
||
|
||
if (!Object(external_lodash_["isEqual"])(nextBlocks, innerBlocks)) {
|
||
replaceInnerBlocks(nextBlocks);
|
||
}
|
||
}
|
||
}, {
|
||
key: "updateNestedSettings",
|
||
value: function updateNestedSettings() {
|
||
var _this$props4 = this.props,
|
||
blockListSettings = _this$props4.blockListSettings,
|
||
allowedBlocks = _this$props4.allowedBlocks,
|
||
updateNestedSettings = _this$props4.updateNestedSettings,
|
||
templateLock = _this$props4.templateLock,
|
||
parentLock = _this$props4.parentLock;
|
||
var newSettings = {
|
||
allowedBlocks: allowedBlocks,
|
||
templateLock: templateLock === undefined ? parentLock : templateLock
|
||
};
|
||
|
||
if (!external_this_wp_isShallowEqual_default()(blockListSettings, newSettings)) {
|
||
updateNestedSettings(newSettings);
|
||
}
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props5 = this.props,
|
||
isSmallScreen = _this$props5.isSmallScreen,
|
||
clientId = _this$props5.clientId,
|
||
hasOverlay = _this$props5.hasOverlay,
|
||
renderAppender = _this$props5.renderAppender,
|
||
template = _this$props5.template,
|
||
templateOptions = _this$props5.__experimentalTemplateOptions,
|
||
onSelectTemplateOption = _this$props5.__experimentalOnSelectTemplateOption,
|
||
allowTemplateOptionSkip = _this$props5.__experimentalAllowTemplateOptionSkip;
|
||
var templateInProcess = this.state.templateInProcess;
|
||
var isPlaceholder = template === null && !!templateOptions;
|
||
var classes = classnames_default()('editor-inner-blocks block-editor-inner-blocks', {
|
||
'has-overlay': isSmallScreen && hasOverlay && !isPlaceholder // Temporary click-through disable on desktop.
|
||
|
||
});
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: classes
|
||
}, !templateInProcess && (isPlaceholder ? Object(external_this_wp_element_["createElement"])(template_picker, {
|
||
options: templateOptions,
|
||
onSelect: onSelectTemplateOption,
|
||
allowSkip: allowTemplateOptionSkip
|
||
}) : Object(external_this_wp_element_["createElement"])(block_list, {
|
||
rootClientId: clientId,
|
||
renderAppender: renderAppender
|
||
})));
|
||
}
|
||
}]);
|
||
|
||
return InnerBlocks;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
inner_blocks_InnerBlocks = Object(external_this_wp_compose_["compose"])([Object(external_this_wp_viewport_["withViewportMatch"])({
|
||
isSmallScreen: '< medium'
|
||
}), // Temporary click-through disable on desktop.
|
||
context_withBlockEditContext(function (context) {
|
||
return Object(external_lodash_["pick"])(context, ['clientId']);
|
||
}), Object(external_this_wp_data_["withSelect"])(function (select, ownProps) {
|
||
var _select = select('core/block-editor'),
|
||
isBlockSelected = _select.isBlockSelected,
|
||
hasSelectedInnerBlock = _select.hasSelectedInnerBlock,
|
||
getBlock = _select.getBlock,
|
||
getBlockListSettings = _select.getBlockListSettings,
|
||
getBlockRootClientId = _select.getBlockRootClientId,
|
||
getTemplateLock = _select.getTemplateLock;
|
||
|
||
var clientId = ownProps.clientId;
|
||
var block = getBlock(clientId);
|
||
var rootClientId = getBlockRootClientId(clientId);
|
||
return {
|
||
block: block,
|
||
blockListSettings: getBlockListSettings(clientId),
|
||
hasOverlay: block.name !== 'core/template' && !isBlockSelected(clientId) && !hasSelectedInnerBlock(clientId, true),
|
||
parentLock: getTemplateLock(rootClientId)
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
_replaceInnerBlocks = _dispatch.replaceInnerBlocks,
|
||
updateBlockListSettings = _dispatch.updateBlockListSettings;
|
||
|
||
var block = ownProps.block,
|
||
clientId = ownProps.clientId,
|
||
_ownProps$templateIns = ownProps.templateInsertUpdatesSelection,
|
||
templateInsertUpdatesSelection = _ownProps$templateIns === void 0 ? true : _ownProps$templateIns;
|
||
return {
|
||
replaceInnerBlocks: function replaceInnerBlocks(blocks) {
|
||
_replaceInnerBlocks(clientId, blocks, block.innerBlocks.length === 0 && templateInsertUpdatesSelection);
|
||
},
|
||
updateNestedSettings: function updateNestedSettings(settings) {
|
||
dispatch(updateBlockListSettings(clientId, settings));
|
||
}
|
||
};
|
||
})])(inner_blocks_InnerBlocks); // Expose default appender placeholders as components.
|
||
|
||
inner_blocks_InnerBlocks.DefaultBlockAppender = inner_blocks_default_block_appender;
|
||
inner_blocks_InnerBlocks.ButtonBlockAppender = inner_blocks_button_block_appender;
|
||
inner_blocks_InnerBlocks.Content = Object(external_this_wp_blocks_["withBlockContentContext"])(function (_ref) {
|
||
var BlockContent = _ref.BlockContent;
|
||
return Object(external_this_wp_element_["createElement"])(BlockContent, null);
|
||
});
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/inner-blocks/README.md
|
||
*/
|
||
|
||
/* harmony default export */ var inner_blocks = (inner_blocks_InnerBlocks);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-advanced-controls/index.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var inspector_advanced_controls_createSlotFill = Object(external_this_wp_components_["createSlotFill"])('InspectorAdvancedControls'),
|
||
inspector_advanced_controls_Fill = inspector_advanced_controls_createSlotFill.Fill,
|
||
inspector_advanced_controls_Slot = inspector_advanced_controls_createSlotFill.Slot;
|
||
|
||
var InspectorAdvancedControls = ifBlockEditSelected(inspector_advanced_controls_Fill);
|
||
InspectorAdvancedControls.Slot = inspector_advanced_controls_Slot;
|
||
/* harmony default export */ var inspector_advanced_controls = (InspectorAdvancedControls);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/index.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var inspector_controls_createSlotFill = Object(external_this_wp_components_["createSlotFill"])('InspectorControls'),
|
||
inspector_controls_Fill = inspector_controls_createSlotFill.Fill,
|
||
inspector_controls_Slot = inspector_controls_createSlotFill.Slot;
|
||
|
||
var InspectorControls = ifBlockEditSelected(inspector_controls_Fill);
|
||
InspectorControls.Slot = inspector_controls_Slot;
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/inspector-controls/README.md
|
||
*/
|
||
|
||
/* harmony default export */ var inspector_controls = (InspectorControls);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/media-upload/index.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* This is a placeholder for the media upload component necessary to make it possible to provide
|
||
* an integration with the core blocks that handle media files. By default it renders nothing but
|
||
* it provides a way to have it overridden with the `editor.MediaUpload` filter.
|
||
*
|
||
* @return {WPElement} Media upload element.
|
||
*/
|
||
|
||
var MediaUpload = function MediaUpload() {
|
||
return null;
|
||
};
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/media-upload/README.md
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var media_upload = (Object(external_this_wp_components_["withFilters"])('editor.MediaUpload')(MediaUpload));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-popover/link-viewer.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
function LinkViewerUrl(_ref) {
|
||
var url = _ref.url,
|
||
urlLabel = _ref.urlLabel,
|
||
className = _ref.className;
|
||
var linkClassName = classnames_default()(className, 'block-editor-url-popover__link-viewer-url');
|
||
|
||
if (!url) {
|
||
return Object(external_this_wp_element_["createElement"])("span", {
|
||
className: linkClassName
|
||
});
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["ExternalLink"], {
|
||
className: linkClassName,
|
||
href: url
|
||
}, urlLabel || Object(external_this_wp_url_["filterURLForDisplay"])(Object(external_this_wp_url_["safeDecodeURI"])(url)));
|
||
}
|
||
|
||
function LinkViewer(_ref2) {
|
||
var className = _ref2.className,
|
||
linkClassName = _ref2.linkClassName,
|
||
onEditLinkClick = _ref2.onEditLinkClick,
|
||
url = _ref2.url,
|
||
urlLabel = _ref2.urlLabel,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref2, ["className", "linkClassName", "onEditLinkClick", "url", "urlLabel"]);
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", Object(esm_extends["a" /* default */])({
|
||
className: classnames_default()('block-editor-url-popover__link-viewer', className)
|
||
}, props), Object(external_this_wp_element_["createElement"])(LinkViewerUrl, {
|
||
url: url,
|
||
urlLabel: urlLabel,
|
||
className: linkClassName
|
||
}), onEditLinkClick && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
icon: "edit",
|
||
label: Object(external_this_wp_i18n_["__"])('Edit'),
|
||
onClick: onEditLinkClick
|
||
}));
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-input/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// Since URLInput is rendered in the context of other inputs, but should be
|
||
// considered a separate modal node, prevent keyboard events from propagating
|
||
// as being considered from the input.
|
||
|
||
var stopEventPropagation = function stopEventPropagation(event) {
|
||
return event.stopPropagation();
|
||
};
|
||
|
||
var url_input_URLInput =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(URLInput, _Component);
|
||
|
||
function URLInput(_ref) {
|
||
var _this;
|
||
|
||
var autocompleteRef = _ref.autocompleteRef;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, URLInput);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(URLInput).apply(this, arguments));
|
||
_this.onChange = _this.onChange.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onKeyDown = _this.onKeyDown.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.autocompleteRef = autocompleteRef || Object(external_this_wp_element_["createRef"])();
|
||
_this.inputRef = Object(external_this_wp_element_["createRef"])();
|
||
_this.updateSuggestions = Object(external_lodash_["throttle"])(_this.updateSuggestions.bind(Object(assertThisInitialized["a" /* default */])(_this)), 200);
|
||
_this.suggestionNodes = [];
|
||
_this.state = {
|
||
suggestions: [],
|
||
showSuggestions: false,
|
||
selectedSuggestion: null
|
||
};
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(URLInput, [{
|
||
key: "componentDidUpdate",
|
||
value: function componentDidUpdate() {
|
||
var _this2 = this;
|
||
|
||
var _this$state = this.state,
|
||
showSuggestions = _this$state.showSuggestions,
|
||
selectedSuggestion = _this$state.selectedSuggestion; // only have to worry about scrolling selected suggestion into view
|
||
// when already expanded
|
||
|
||
if (showSuggestions && selectedSuggestion !== null && !this.scrollingIntoView) {
|
||
this.scrollingIntoView = true;
|
||
lib_default()(this.suggestionNodes[selectedSuggestion], this.autocompleteRef.current, {
|
||
onlyScrollIfNeeded: true
|
||
});
|
||
this.props.setTimeout(function () {
|
||
_this2.scrollingIntoView = false;
|
||
}, 100);
|
||
}
|
||
}
|
||
}, {
|
||
key: "componentWillUnmount",
|
||
value: function componentWillUnmount() {
|
||
delete this.suggestionsRequest;
|
||
}
|
||
}, {
|
||
key: "bindSuggestionNode",
|
||
value: function bindSuggestionNode(index) {
|
||
var _this3 = this;
|
||
|
||
return function (ref) {
|
||
_this3.suggestionNodes[index] = ref;
|
||
};
|
||
}
|
||
}, {
|
||
key: "updateSuggestions",
|
||
value: function updateSuggestions(value) {
|
||
var _this4 = this;
|
||
|
||
var fetchLinkSuggestions = this.props.fetchLinkSuggestions;
|
||
|
||
if (!fetchLinkSuggestions) {
|
||
return;
|
||
} // Show the suggestions after typing at least 2 characters
|
||
// and also for URLs
|
||
|
||
|
||
if (value.length < 2 || /^https?:/.test(value)) {
|
||
this.setState({
|
||
showSuggestions: false,
|
||
selectedSuggestion: null,
|
||
loading: false
|
||
});
|
||
return;
|
||
}
|
||
|
||
this.setState({
|
||
showSuggestions: true,
|
||
selectedSuggestion: null,
|
||
loading: true
|
||
});
|
||
var request = fetchLinkSuggestions(value);
|
||
request.then(function (suggestions) {
|
||
// A fetch Promise doesn't have an abort option. It's mimicked by
|
||
// comparing the request reference in on the instance, which is
|
||
// reset or deleted on subsequent requests or unmounting.
|
||
if (_this4.suggestionsRequest !== request) {
|
||
return;
|
||
}
|
||
|
||
_this4.setState({
|
||
suggestions: suggestions,
|
||
loading: false
|
||
});
|
||
|
||
if (!!suggestions.length) {
|
||
_this4.props.debouncedSpeak(Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["_n"])('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', suggestions.length), suggestions.length), 'assertive');
|
||
} else {
|
||
_this4.props.debouncedSpeak(Object(external_this_wp_i18n_["__"])('No results.'), 'assertive');
|
||
}
|
||
}).catch(function () {
|
||
if (_this4.suggestionsRequest === request) {
|
||
_this4.setState({
|
||
loading: false
|
||
});
|
||
}
|
||
});
|
||
this.suggestionsRequest = request;
|
||
}
|
||
}, {
|
||
key: "onChange",
|
||
value: function onChange(event) {
|
||
var inputValue = event.target.value;
|
||
this.props.onChange(inputValue);
|
||
this.updateSuggestions(inputValue);
|
||
}
|
||
}, {
|
||
key: "onKeyDown",
|
||
value: function onKeyDown(event) {
|
||
var _this$state2 = this.state,
|
||
showSuggestions = _this$state2.showSuggestions,
|
||
selectedSuggestion = _this$state2.selectedSuggestion,
|
||
suggestions = _this$state2.suggestions,
|
||
loading = _this$state2.loading; // If the suggestions are not shown or loading, we shouldn't handle the arrow keys
|
||
// We shouldn't preventDefault to allow block arrow keys navigation
|
||
|
||
if (!showSuggestions || !suggestions.length || loading) {
|
||
// In the Windows version of Firefox the up and down arrows don't move the caret
|
||
// within an input field like they do for Mac Firefox/Chrome/Safari. This causes
|
||
// a form of focus trapping that is disruptive to the user experience. This disruption
|
||
// only happens if the caret is not in the first or last position in the text input.
|
||
// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747
|
||
switch (event.keyCode) {
|
||
// When UP is pressed, if the caret is at the start of the text, move it to the 0
|
||
// position.
|
||
case external_this_wp_keycodes_["UP"]:
|
||
{
|
||
if (0 !== event.target.selectionStart) {
|
||
event.stopPropagation();
|
||
event.preventDefault(); // Set the input caret to position 0
|
||
|
||
event.target.setSelectionRange(0, 0);
|
||
}
|
||
|
||
break;
|
||
}
|
||
// When DOWN is pressed, if the caret is not at the end of the text, move it to the
|
||
// last position.
|
||
|
||
case external_this_wp_keycodes_["DOWN"]:
|
||
{
|
||
if (this.props.value.length !== event.target.selectionStart) {
|
||
event.stopPropagation();
|
||
event.preventDefault(); // Set the input caret to the last position
|
||
|
||
event.target.setSelectionRange(this.props.value.length, this.props.value.length);
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
var suggestion = this.state.suggestions[this.state.selectedSuggestion];
|
||
|
||
switch (event.keyCode) {
|
||
case external_this_wp_keycodes_["UP"]:
|
||
{
|
||
event.stopPropagation();
|
||
event.preventDefault();
|
||
var previousIndex = !selectedSuggestion ? suggestions.length - 1 : selectedSuggestion - 1;
|
||
this.setState({
|
||
selectedSuggestion: previousIndex
|
||
});
|
||
break;
|
||
}
|
||
|
||
case external_this_wp_keycodes_["DOWN"]:
|
||
{
|
||
event.stopPropagation();
|
||
event.preventDefault();
|
||
var nextIndex = selectedSuggestion === null || selectedSuggestion === suggestions.length - 1 ? 0 : selectedSuggestion + 1;
|
||
this.setState({
|
||
selectedSuggestion: nextIndex
|
||
});
|
||
break;
|
||
}
|
||
|
||
case external_this_wp_keycodes_["TAB"]:
|
||
{
|
||
if (this.state.selectedSuggestion !== null) {
|
||
this.selectLink(suggestion); // Announce a link has been selected when tabbing away from the input field.
|
||
|
||
this.props.speak(Object(external_this_wp_i18n_["__"])('Link selected.'));
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
case external_this_wp_keycodes_["ENTER"]:
|
||
{
|
||
if (this.state.selectedSuggestion !== null) {
|
||
event.stopPropagation();
|
||
this.selectLink(suggestion);
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}, {
|
||
key: "selectLink",
|
||
value: function selectLink(suggestion) {
|
||
this.props.onChange(suggestion.url, suggestion);
|
||
this.setState({
|
||
selectedSuggestion: null,
|
||
showSuggestions: false
|
||
});
|
||
}
|
||
}, {
|
||
key: "handleOnClick",
|
||
value: function handleOnClick(suggestion) {
|
||
this.selectLink(suggestion); // Move focus to the input field when a link suggestion is clicked.
|
||
|
||
this.inputRef.current.focus();
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this5 = this;
|
||
|
||
var _this$props = this.props,
|
||
_this$props$value = _this$props.value,
|
||
value = _this$props$value === void 0 ? '' : _this$props$value,
|
||
_this$props$autoFocus = _this$props.autoFocus,
|
||
autoFocus = _this$props$autoFocus === void 0 ? true : _this$props$autoFocus,
|
||
instanceId = _this$props.instanceId,
|
||
className = _this$props.className,
|
||
id = _this$props.id,
|
||
isFullWidth = _this$props.isFullWidth,
|
||
hasBorder = _this$props.hasBorder;
|
||
var _this$state3 = this.state,
|
||
showSuggestions = _this$state3.showSuggestions,
|
||
suggestions = _this$state3.suggestions,
|
||
selectedSuggestion = _this$state3.selectedSuggestion,
|
||
loading = _this$state3.loading;
|
||
var suggestionsListboxId = "block-editor-url-input-suggestions-".concat(instanceId);
|
||
var suggestionOptionIdPrefix = "block-editor-url-input-suggestion-".concat(instanceId);
|
||
/* eslint-disable jsx-a11y/no-autofocus */
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: classnames_default()('editor-url-input block-editor-url-input', className, {
|
||
'is-full-width': isFullWidth,
|
||
'has-border': hasBorder
|
||
})
|
||
}, Object(external_this_wp_element_["createElement"])("input", {
|
||
id: id,
|
||
autoFocus: autoFocus,
|
||
type: "text",
|
||
"aria-label": Object(external_this_wp_i18n_["__"])('URL'),
|
||
required: true,
|
||
value: value,
|
||
onChange: this.onChange,
|
||
onInput: stopEventPropagation,
|
||
placeholder: Object(external_this_wp_i18n_["__"])('Paste URL or type to search'),
|
||
onKeyDown: this.onKeyDown,
|
||
role: "combobox",
|
||
"aria-expanded": showSuggestions,
|
||
"aria-autocomplete": "list",
|
||
"aria-owns": suggestionsListboxId,
|
||
"aria-activedescendant": selectedSuggestion !== null ? "".concat(suggestionOptionIdPrefix, "-").concat(selectedSuggestion) : undefined,
|
||
ref: this.inputRef
|
||
}), loading && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Spinner"], null), showSuggestions && !!suggestions.length && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Popover"], {
|
||
position: "bottom",
|
||
noArrow: true,
|
||
focusOnMount: false
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: classnames_default()('editor-url-input__suggestions', 'block-editor-url-input__suggestions', "".concat(className, "__suggestions")),
|
||
id: suggestionsListboxId,
|
||
ref: this.autocompleteRef,
|
||
role: "listbox"
|
||
}, suggestions.map(function (suggestion, index) {
|
||
return Object(external_this_wp_element_["createElement"])("button", {
|
||
key: suggestion.id,
|
||
role: "option",
|
||
tabIndex: "-1",
|
||
id: "".concat(suggestionOptionIdPrefix, "-").concat(index),
|
||
ref: _this5.bindSuggestionNode(index),
|
||
className: classnames_default()('editor-url-input__suggestion block-editor-url-input__suggestion', {
|
||
'is-selected': index === selectedSuggestion
|
||
}),
|
||
onClick: function onClick() {
|
||
return _this5.handleOnClick(suggestion);
|
||
},
|
||
"aria-selected": index === selectedSuggestion
|
||
}, suggestion.title);
|
||
}))));
|
||
/* eslint-enable jsx-a11y/no-autofocus */
|
||
}
|
||
}], [{
|
||
key: "getDerivedStateFromProps",
|
||
value: function getDerivedStateFromProps(_ref2, _ref3) {
|
||
var disableSuggestions = _ref2.disableSuggestions;
|
||
var showSuggestions = _ref3.showSuggestions;
|
||
return {
|
||
showSuggestions: disableSuggestions === true ? false : showSuggestions
|
||
};
|
||
}
|
||
}]);
|
||
|
||
return URLInput;
|
||
}(external_this_wp_element_["Component"]);
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/url-input/README.md
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var url_input = (Object(external_this_wp_compose_["compose"])(external_this_wp_compose_["withSafeTimeout"], external_this_wp_components_["withSpokenMessages"], external_this_wp_compose_["withInstanceId"], Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSettings = _select.getSettings;
|
||
|
||
return {
|
||
fetchLinkSuggestions: getSettings().__experimentalFetchLinkSuggestions
|
||
};
|
||
}))(url_input_URLInput));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-popover/link-editor.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
function LinkEditor(_ref) {
|
||
var autocompleteRef = _ref.autocompleteRef,
|
||
className = _ref.className,
|
||
onChangeInputValue = _ref.onChangeInputValue,
|
||
value = _ref.value,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref, ["autocompleteRef", "className", "onChangeInputValue", "value"]);
|
||
|
||
return Object(external_this_wp_element_["createElement"])("form", Object(esm_extends["a" /* default */])({
|
||
className: classnames_default()('block-editor-url-popover__link-editor', className)
|
||
}, props), Object(external_this_wp_element_["createElement"])(url_input, {
|
||
value: value,
|
||
onChange: onChangeInputValue,
|
||
autocompleteRef: autocompleteRef
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
icon: "editor-break",
|
||
label: Object(external_this_wp_i18n_["__"])('Apply'),
|
||
type: "submit"
|
||
}));
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-popover/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
var url_popover_URLPopover =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(URLPopover, _Component);
|
||
|
||
function URLPopover() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, URLPopover);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(URLPopover).apply(this, arguments));
|
||
_this.toggleSettingsVisibility = _this.toggleSettingsVisibility.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.state = {
|
||
isSettingsExpanded: false
|
||
};
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(URLPopover, [{
|
||
key: "toggleSettingsVisibility",
|
||
value: function toggleSettingsVisibility() {
|
||
this.setState({
|
||
isSettingsExpanded: !this.state.isSettingsExpanded
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props = this.props,
|
||
additionalControls = _this$props.additionalControls,
|
||
children = _this$props.children,
|
||
renderSettings = _this$props.renderSettings,
|
||
_this$props$position = _this$props.position,
|
||
position = _this$props$position === void 0 ? 'bottom center' : _this$props$position,
|
||
_this$props$focusOnMo = _this$props.focusOnMount,
|
||
focusOnMount = _this$props$focusOnMo === void 0 ? 'firstElement' : _this$props$focusOnMo,
|
||
popoverProps = Object(objectWithoutProperties["a" /* default */])(_this$props, ["additionalControls", "children", "renderSettings", "position", "focusOnMount"]);
|
||
|
||
var isSettingsExpanded = this.state.isSettingsExpanded;
|
||
var showSettings = !!renderSettings && isSettingsExpanded;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Popover"], Object(esm_extends["a" /* default */])({
|
||
className: "editor-url-popover block-editor-url-popover",
|
||
focusOnMount: focusOnMount,
|
||
position: position
|
||
}, popoverProps), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-url-popover__input-container"
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-url-popover__row block-editor-url-popover__row"
|
||
}, children, !!renderSettings && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
className: "editor-url-popover__settings-toggle block-editor-url-popover__settings-toggle",
|
||
icon: "arrow-down-alt2",
|
||
label: Object(external_this_wp_i18n_["__"])('Link settings'),
|
||
onClick: this.toggleSettingsVisibility,
|
||
"aria-expanded": isSettingsExpanded
|
||
})), showSettings && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-url-popover__row block-editor-url-popover__row editor-url-popover__settings block-editor-url-popover__settings"
|
||
}, renderSettings())), additionalControls && !showSettings && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-url-popover__additional-controls"
|
||
}, additionalControls));
|
||
}
|
||
}]);
|
||
|
||
return URLPopover;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
url_popover_URLPopover.LinkEditor = LinkEditor;
|
||
url_popover_URLPopover.LinkViewer = LinkViewer;
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/url-popover/README.md
|
||
*/
|
||
|
||
/* harmony default export */ var url_popover = (url_popover_URLPopover);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/media-placeholder/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
var media_placeholder_InsertFromURLPopover = function InsertFromURLPopover(_ref) {
|
||
var src = _ref.src,
|
||
onChange = _ref.onChange,
|
||
onSubmit = _ref.onSubmit,
|
||
onClose = _ref.onClose;
|
||
return Object(external_this_wp_element_["createElement"])(url_popover, {
|
||
onClose: onClose
|
||
}, Object(external_this_wp_element_["createElement"])("form", {
|
||
className: "editor-media-placeholder__url-input-form block-editor-media-placeholder__url-input-form",
|
||
onSubmit: onSubmit
|
||
}, Object(external_this_wp_element_["createElement"])("input", {
|
||
className: "editor-media-placeholder__url-input-field block-editor-media-placeholder__url-input-field",
|
||
type: "url",
|
||
"aria-label": Object(external_this_wp_i18n_["__"])('URL'),
|
||
placeholder: Object(external_this_wp_i18n_["__"])('Paste or type URL'),
|
||
onChange: onChange,
|
||
value: src
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
className: "editor-media-placeholder__url-input-submit-button block-editor-media-placeholder__url-input-submit-button",
|
||
icon: "editor-break",
|
||
label: Object(external_this_wp_i18n_["__"])('Apply'),
|
||
type: "submit"
|
||
})));
|
||
};
|
||
|
||
var media_placeholder_MediaPlaceholder =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(MediaPlaceholder, _Component);
|
||
|
||
function MediaPlaceholder() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, MediaPlaceholder);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(MediaPlaceholder).apply(this, arguments));
|
||
_this.state = {
|
||
src: '',
|
||
isURLInputVisible: false
|
||
};
|
||
_this.onChangeSrc = _this.onChangeSrc.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onSubmitSrc = _this.onSubmitSrc.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onUpload = _this.onUpload.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onFilesUpload = _this.onFilesUpload.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.openURLInput = _this.openURLInput.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.closeURLInput = _this.closeURLInput.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(MediaPlaceholder, [{
|
||
key: "onlyAllowsImages",
|
||
value: function onlyAllowsImages() {
|
||
var allowedTypes = this.props.allowedTypes;
|
||
|
||
if (!allowedTypes) {
|
||
return false;
|
||
}
|
||
|
||
return Object(external_lodash_["every"])(allowedTypes, function (allowedType) {
|
||
return allowedType === 'image' || Object(external_lodash_["startsWith"])(allowedType, 'image/');
|
||
});
|
||
}
|
||
}, {
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
this.setState({
|
||
src: Object(external_lodash_["get"])(this.props.value, ['src'], '')
|
||
});
|
||
}
|
||
}, {
|
||
key: "componentDidUpdate",
|
||
value: function componentDidUpdate(prevProps) {
|
||
if (Object(external_lodash_["get"])(prevProps.value, ['src'], '') !== Object(external_lodash_["get"])(this.props.value, ['src'], '')) {
|
||
this.setState({
|
||
src: Object(external_lodash_["get"])(this.props.value, ['src'], '')
|
||
});
|
||
}
|
||
}
|
||
}, {
|
||
key: "onChangeSrc",
|
||
value: function onChangeSrc(event) {
|
||
this.setState({
|
||
src: event.target.value
|
||
});
|
||
}
|
||
}, {
|
||
key: "onSubmitSrc",
|
||
value: function onSubmitSrc(event) {
|
||
event.preventDefault();
|
||
|
||
if (this.state.src && this.props.onSelectURL) {
|
||
this.props.onSelectURL(this.state.src);
|
||
this.closeURLInput();
|
||
}
|
||
}
|
||
}, {
|
||
key: "onUpload",
|
||
value: function onUpload(event) {
|
||
this.onFilesUpload(event.target.files);
|
||
}
|
||
}, {
|
||
key: "onFilesUpload",
|
||
value: function onFilesUpload(files) {
|
||
var _this$props = this.props,
|
||
addToGallery = _this$props.addToGallery,
|
||
allowedTypes = _this$props.allowedTypes,
|
||
mediaUpload = _this$props.mediaUpload,
|
||
multiple = _this$props.multiple,
|
||
onError = _this$props.onError,
|
||
onSelect = _this$props.onSelect,
|
||
_this$props$value = _this$props.value,
|
||
value = _this$props$value === void 0 ? [] : _this$props$value;
|
||
var setMedia;
|
||
|
||
if (multiple) {
|
||
if (addToGallery) {
|
||
var currentValue = value;
|
||
|
||
setMedia = function setMedia(newMedia) {
|
||
onSelect(currentValue.concat(newMedia));
|
||
};
|
||
} else {
|
||
setMedia = onSelect;
|
||
}
|
||
} else {
|
||
setMedia = function setMedia(_ref2) {
|
||
var _ref3 = Object(slicedToArray["a" /* default */])(_ref2, 1),
|
||
media = _ref3[0];
|
||
|
||
return onSelect(media);
|
||
};
|
||
}
|
||
|
||
mediaUpload({
|
||
allowedTypes: allowedTypes,
|
||
filesList: files,
|
||
onFileChange: setMedia,
|
||
onError: onError
|
||
});
|
||
}
|
||
}, {
|
||
key: "openURLInput",
|
||
value: function openURLInput() {
|
||
this.setState({
|
||
isURLInputVisible: true
|
||
});
|
||
}
|
||
}, {
|
||
key: "closeURLInput",
|
||
value: function closeURLInput() {
|
||
this.setState({
|
||
isURLInputVisible: false
|
||
});
|
||
}
|
||
}, {
|
||
key: "renderPlaceholder",
|
||
value: function renderPlaceholder(content, onClick) {
|
||
var _this$props2 = this.props,
|
||
_this$props2$allowedT = _this$props2.allowedTypes,
|
||
allowedTypes = _this$props2$allowedT === void 0 ? [] : _this$props2$allowedT,
|
||
className = _this$props2.className,
|
||
icon = _this$props2.icon,
|
||
isAppender = _this$props2.isAppender,
|
||
_this$props2$labels = _this$props2.labels,
|
||
labels = _this$props2$labels === void 0 ? {} : _this$props2$labels,
|
||
onDoubleClick = _this$props2.onDoubleClick,
|
||
mediaPreview = _this$props2.mediaPreview,
|
||
notices = _this$props2.notices,
|
||
onSelectURL = _this$props2.onSelectURL,
|
||
mediaUpload = _this$props2.mediaUpload,
|
||
children = _this$props2.children;
|
||
var instructions = labels.instructions;
|
||
var title = labels.title;
|
||
|
||
if (!mediaUpload && !onSelectURL) {
|
||
instructions = Object(external_this_wp_i18n_["__"])('To edit this block, you need permission to upload media.');
|
||
}
|
||
|
||
if (instructions === undefined || title === undefined) {
|
||
var isOneType = 1 === allowedTypes.length;
|
||
var isAudio = isOneType && 'audio' === allowedTypes[0];
|
||
var isImage = isOneType && 'image' === allowedTypes[0];
|
||
var isVideo = isOneType && 'video' === allowedTypes[0];
|
||
|
||
if (instructions === undefined && mediaUpload) {
|
||
instructions = Object(external_this_wp_i18n_["__"])('Upload a media file or pick one from your media library.');
|
||
|
||
if (isAudio) {
|
||
instructions = Object(external_this_wp_i18n_["__"])('Upload an audio file, pick one from your media library, or add one with a URL.');
|
||
} else if (isImage) {
|
||
instructions = Object(external_this_wp_i18n_["__"])('Upload an image file, pick one from your media library, or add one with a URL.');
|
||
} else if (isVideo) {
|
||
instructions = Object(external_this_wp_i18n_["__"])('Upload a video file, pick one from your media library, or add one with a URL.');
|
||
}
|
||
}
|
||
|
||
if (title === undefined) {
|
||
title = Object(external_this_wp_i18n_["__"])('Media');
|
||
|
||
if (isAudio) {
|
||
title = Object(external_this_wp_i18n_["__"])('Audio');
|
||
} else if (isImage) {
|
||
title = Object(external_this_wp_i18n_["__"])('Image');
|
||
} else if (isVideo) {
|
||
title = Object(external_this_wp_i18n_["__"])('Video');
|
||
}
|
||
}
|
||
}
|
||
|
||
var placeholderClassName = classnames_default()('block-editor-media-placeholder', 'editor-media-placeholder', className, {
|
||
'is-appender': isAppender
|
||
});
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Placeholder"], {
|
||
icon: icon,
|
||
label: title,
|
||
instructions: instructions,
|
||
className: placeholderClassName,
|
||
notices: notices,
|
||
onClick: onClick,
|
||
onDoubleClick: onDoubleClick,
|
||
preview: mediaPreview
|
||
}, content, children);
|
||
}
|
||
}, {
|
||
key: "renderDropZone",
|
||
value: function renderDropZone() {
|
||
var _this$props3 = this.props,
|
||
disableDropZone = _this$props3.disableDropZone,
|
||
_this$props3$onHTMLDr = _this$props3.onHTMLDrop,
|
||
onHTMLDrop = _this$props3$onHTMLDr === void 0 ? external_lodash_["noop"] : _this$props3$onHTMLDr;
|
||
|
||
if (disableDropZone) {
|
||
return null;
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["DropZone"], {
|
||
onFilesDrop: this.onFilesUpload,
|
||
onHTMLDrop: onHTMLDrop
|
||
});
|
||
}
|
||
}, {
|
||
key: "renderCancelLink",
|
||
value: function renderCancelLink() {
|
||
var onCancel = this.props.onCancel;
|
||
return onCancel && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
className: "block-editor-media-placeholder__cancel-button",
|
||
title: Object(external_this_wp_i18n_["__"])('Cancel'),
|
||
isLink: true,
|
||
onClick: onCancel
|
||
}, Object(external_this_wp_i18n_["__"])('Cancel'));
|
||
}
|
||
}, {
|
||
key: "renderUrlSelectionUI",
|
||
value: function renderUrlSelectionUI() {
|
||
var onSelectURL = this.props.onSelectURL;
|
||
|
||
if (!onSelectURL) {
|
||
return null;
|
||
}
|
||
|
||
var _this$state = this.state,
|
||
isURLInputVisible = _this$state.isURLInputVisible,
|
||
src = _this$state.src;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-media-placeholder__url-input-container block-editor-media-placeholder__url-input-container"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
className: "editor-media-placeholder__button block-editor-media-placeholder__button",
|
||
onClick: this.openURLInput,
|
||
isToggled: isURLInputVisible,
|
||
isLarge: true
|
||
}, Object(external_this_wp_i18n_["__"])('Insert from URL')), isURLInputVisible && Object(external_this_wp_element_["createElement"])(media_placeholder_InsertFromURLPopover, {
|
||
src: src,
|
||
onChange: this.onChangeSrc,
|
||
onSubmit: this.onSubmitSrc,
|
||
onClose: this.closeURLInput
|
||
}));
|
||
}
|
||
}, {
|
||
key: "renderMediaUploadChecked",
|
||
value: function renderMediaUploadChecked() {
|
||
var _this2 = this;
|
||
|
||
var _this$props4 = this.props,
|
||
accept = _this$props4.accept,
|
||
addToGallery = _this$props4.addToGallery,
|
||
_this$props4$allowedT = _this$props4.allowedTypes,
|
||
allowedTypes = _this$props4$allowedT === void 0 ? [] : _this$props4$allowedT,
|
||
isAppender = _this$props4.isAppender,
|
||
mediaUpload = _this$props4.mediaUpload,
|
||
_this$props4$multiple = _this$props4.multiple,
|
||
multiple = _this$props4$multiple === void 0 ? false : _this$props4$multiple,
|
||
onSelect = _this$props4.onSelect,
|
||
_this$props4$value = _this$props4.value,
|
||
value = _this$props4$value === void 0 ? {} : _this$props4$value;
|
||
var mediaLibraryButton = Object(external_this_wp_element_["createElement"])(media_upload, {
|
||
addToGallery: addToGallery,
|
||
gallery: multiple && this.onlyAllowsImages(),
|
||
multiple: multiple,
|
||
onSelect: onSelect,
|
||
allowedTypes: allowedTypes,
|
||
value: Object(external_lodash_["isArray"])(value) ? value.map(function (_ref4) {
|
||
var id = _ref4.id;
|
||
return id;
|
||
}) : value.id,
|
||
render: function render(_ref5) {
|
||
var open = _ref5.open;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
isLarge: true,
|
||
className: classnames_default()('editor-media-placeholder__button', 'editor-media-placeholder__media-library-button'),
|
||
onClick: function onClick(event) {
|
||
event.stopPropagation();
|
||
open();
|
||
}
|
||
}, Object(external_this_wp_i18n_["__"])('Media Library'));
|
||
}
|
||
});
|
||
|
||
if (mediaUpload && isAppender) {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, this.renderDropZone(), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["FormFileUpload"], {
|
||
onChange: this.onUpload,
|
||
accept: accept,
|
||
multiple: multiple,
|
||
render: function render(_ref6) {
|
||
var openFileDialog = _ref6.openFileDialog;
|
||
var content = Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
isLarge: true,
|
||
className: classnames_default()('block-editor-media-placeholder__button', 'editor-media-placeholder__button', 'block-editor-media-placeholder__upload-button'),
|
||
icon: "upload"
|
||
}, Object(external_this_wp_i18n_["__"])('Upload')), mediaLibraryButton, _this2.renderUrlSelectionUI(), _this2.renderCancelLink());
|
||
return _this2.renderPlaceholder(content, openFileDialog);
|
||
}
|
||
}));
|
||
}
|
||
|
||
if (mediaUpload) {
|
||
var content = Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, this.renderDropZone(), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["FormFileUpload"], {
|
||
isLarge: true,
|
||
className: classnames_default()('block-editor-media-placeholder__button', 'editor-media-placeholder__button', 'block-editor-media-placeholder__upload-button'),
|
||
onChange: this.onUpload,
|
||
accept: accept,
|
||
multiple: multiple
|
||
}, Object(external_this_wp_i18n_["__"])('Upload')), mediaLibraryButton, this.renderUrlSelectionUI(), this.renderCancelLink());
|
||
return this.renderPlaceholder(content);
|
||
}
|
||
|
||
return this.renderPlaceholder(mediaLibraryButton);
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var dropZoneUIOnly = this.props.dropZoneUIOnly;
|
||
|
||
if (dropZoneUIOnly) {
|
||
return Object(external_this_wp_element_["createElement"])(check, null, this.renderDropZone());
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(check, {
|
||
fallback: this.renderPlaceholder(this.renderUrlSelectionUI())
|
||
}, this.renderMediaUploadChecked());
|
||
}
|
||
}]);
|
||
|
||
return MediaPlaceholder;
|
||
}(external_this_wp_element_["Component"]);
|
||
var media_placeholder_applyWithSelect = Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSettings = _select.getSettings;
|
||
|
||
return {
|
||
mediaUpload: getSettings().__experimentalMediaUpload
|
||
};
|
||
});
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/media-placeholder/README.md
|
||
*/
|
||
|
||
/* harmony default export */ var media_placeholder = (Object(external_this_wp_compose_["compose"])(media_placeholder_applyWithSelect, Object(external_this_wp_components_["withFilters"])('editor.MediaPlaceholder'))(media_placeholder_MediaPlaceholder));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/color-palette/control.js
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
// translators: first %s: The type of color (e.g. background color), second %s: the color name or value (e.g. red or #ff0000)
|
||
|
||
var colorIndicatorAriaLabel = Object(external_this_wp_i18n_["__"])('(current %s: %s)');
|
||
|
||
function ColorPaletteControl(_ref) {
|
||
var colors = _ref.colors,
|
||
disableCustomColors = _ref.disableCustomColors,
|
||
label = _ref.label,
|
||
onChange = _ref.onChange,
|
||
value = _ref.value;
|
||
var colorObject = utils_getColorObjectByColorValue(colors, value);
|
||
var colorName = colorObject && colorObject.name;
|
||
var ariaLabel = Object(external_this_wp_i18n_["sprintf"])(colorIndicatorAriaLabel, label.toLowerCase(), colorName || value);
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["BaseControl"], {
|
||
className: "editor-color-palette-control block-editor-color-palette-control"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["BaseControl"].VisualLabel, null, label, value && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["ColorIndicator"], {
|
||
colorValue: value,
|
||
"aria-label": ariaLabel
|
||
})), Object(external_this_wp_element_["createElement"])(color_palette, Object(esm_extends["a" /* default */])({
|
||
className: "editor-color-palette-control__color-palette block-editor-color-palette-control__color-palette",
|
||
value: value,
|
||
onChange: onChange
|
||
}, {
|
||
colors: colors,
|
||
disableCustomColors: disableCustomColors
|
||
})));
|
||
}
|
||
/* harmony default export */ var color_palette_control = (Object(external_this_wp_compose_["compose"])([with_color_context, Object(external_this_wp_compose_["ifCondition"])(function (_ref2) {
|
||
var hasColorsToChoose = _ref2.hasColorsToChoose;
|
||
return hasColorsToChoose;
|
||
})])(ColorPaletteControl));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/panel-color-settings/index.js
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
var hasCustomColorsDisabledForSetting = function hasCustomColorsDisabledForSetting(disableCustomColors, colorSetting) {
|
||
if (colorSetting.disableCustomColors !== undefined) {
|
||
return colorSetting.disableCustomColors;
|
||
}
|
||
|
||
return disableCustomColors;
|
||
};
|
||
|
||
var hasColorsToChooseInSetting = function hasColorsToChooseInSetting() {
|
||
var colors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
||
var disableCustomColors = arguments.length > 1 ? arguments[1] : undefined;
|
||
var colorSetting = arguments.length > 2 ? arguments[2] : undefined;
|
||
|
||
if (!hasCustomColorsDisabledForSetting(disableCustomColors, colorSetting)) {
|
||
return true;
|
||
}
|
||
|
||
return (colorSetting.colors || colors).length > 0;
|
||
};
|
||
|
||
var panel_color_settings_hasColorsToChoose = function hasColorsToChoose(_ref) {
|
||
var colors = _ref.colors,
|
||
disableCustomColors = _ref.disableCustomColors,
|
||
colorSettings = _ref.colorSettings;
|
||
return Object(external_lodash_["some"])(colorSettings, function (colorSetting) {
|
||
return hasColorsToChooseInSetting(colors, disableCustomColors, colorSetting);
|
||
});
|
||
}; // translators: first %s: The type of color (e.g. background color), second %s: the color name or value (e.g. red or #ff0000)
|
||
|
||
|
||
var panel_color_settings_colorIndicatorAriaLabel = Object(external_this_wp_i18n_["__"])('(%s: %s)');
|
||
|
||
var panel_color_settings_renderColorIndicators = function renderColorIndicators(colorSettings, colors) {
|
||
return colorSettings.map(function (_ref2, index) {
|
||
var value = _ref2.value,
|
||
label = _ref2.label,
|
||
availableColors = _ref2.colors;
|
||
|
||
if (!value) {
|
||
return null;
|
||
}
|
||
|
||
var colorObject = utils_getColorObjectByColorValue(availableColors || colors, value);
|
||
var colorName = colorObject && colorObject.name;
|
||
var ariaLabel = Object(external_this_wp_i18n_["sprintf"])(panel_color_settings_colorIndicatorAriaLabel, label.toLowerCase(), colorName || value);
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["ColorIndicator"], {
|
||
key: index,
|
||
colorValue: value,
|
||
"aria-label": ariaLabel
|
||
});
|
||
});
|
||
}; // colorSettings is passed as an array of props so that it can be used for
|
||
// mapping both ColorIndicator and ColorPaletteControl components. Passing
|
||
// an array of components/nodes here wouldn't be feasible.
|
||
|
||
|
||
var PanelColorSettings = Object(external_this_wp_compose_["ifCondition"])(panel_color_settings_hasColorsToChoose)(function (_ref3) {
|
||
var children = _ref3.children,
|
||
colors = _ref3.colors,
|
||
colorSettings = _ref3.colorSettings,
|
||
disableCustomColors = _ref3.disableCustomColors,
|
||
title = _ref3.title,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref3, ["children", "colors", "colorSettings", "disableCustomColors", "title"]);
|
||
|
||
var titleElement = Object(external_this_wp_element_["createElement"])("span", {
|
||
className: "editor-panel-color-settings__panel-title block-editor-panel-color-settings__panel-title"
|
||
}, title, panel_color_settings_renderColorIndicators(colorSettings, colors));
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["PanelBody"], Object(esm_extends["a" /* default */])({
|
||
className: "editor-panel-color-settings block-editor-panel-color-settings",
|
||
title: titleElement
|
||
}, props), colorSettings.map(function (settings, index) {
|
||
return Object(external_this_wp_element_["createElement"])(color_palette_control, Object(esm_extends["a" /* default */])({
|
||
key: index
|
||
}, Object(objectSpread["a" /* default */])({
|
||
colors: colors,
|
||
disableCustomColors: disableCustomColors
|
||
}, settings)));
|
||
}), children);
|
||
});
|
||
/* harmony default export */ var panel_color_settings = (with_color_context(PanelColorSettings));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/plain-text/index.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/plain-text/README.md
|
||
*/
|
||
|
||
var PlainText = Object(external_this_wp_element_["forwardRef"])(function (_ref, ref) {
|
||
var _onChange = _ref.onChange,
|
||
className = _ref.className,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref, ["onChange", "className"]);
|
||
|
||
return Object(external_this_wp_element_["createElement"])(react_autosize_textarea_lib_default.a, Object(esm_extends["a" /* default */])({
|
||
ref: ref,
|
||
className: classnames_default()('editor-plain-text block-editor-plain-text', className),
|
||
onChange: function onChange(event) {
|
||
return _onChange(event.target.value);
|
||
}
|
||
}, props));
|
||
});
|
||
/* harmony default export */ var plain_text = (PlainText);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","blob"]}
|
||
var external_this_wp_blob_ = __webpack_require__(35);
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","deprecated"]}
|
||
var external_this_wp_deprecated_ = __webpack_require__(37);
|
||
var external_this_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_this_wp_deprecated_);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/format-toolbar/index.js
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
var POPOVER_PROPS = {
|
||
position: 'bottom left'
|
||
};
|
||
|
||
var format_toolbar_FormatToolbar = function FormatToolbar() {
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-format-toolbar block-editor-format-toolbar"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], null, ['bold', 'italic', 'link'].map(function (format) {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Slot"], {
|
||
name: "RichText.ToolbarControls.".concat(format),
|
||
key: format
|
||
});
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Slot"], {
|
||
name: "RichText.ToolbarControls"
|
||
}, function (fills) {
|
||
return fills.length !== 0 && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["DropdownMenu"], {
|
||
icon: false,
|
||
label: Object(external_this_wp_i18n_["__"])('More rich text controls'),
|
||
controls: Object(external_lodash_["orderBy"])(fills.map(function (_ref) {
|
||
var _ref2 = Object(slicedToArray["a" /* default */])(_ref, 1),
|
||
props = _ref2[0].props;
|
||
|
||
return props;
|
||
}), 'title'),
|
||
popoverProps: POPOVER_PROPS
|
||
});
|
||
})));
|
||
};
|
||
|
||
/* harmony default export */ var format_toolbar = (format_toolbar_FormatToolbar);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/remove-browser-shortcuts.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Set of keyboard shortcuts handled internally by RichText.
|
||
*
|
||
* @type {Array}
|
||
*/
|
||
|
||
var HANDLED_SHORTCUTS = [external_this_wp_keycodes_["rawShortcut"].primary('z'), external_this_wp_keycodes_["rawShortcut"].primaryShift('z'), external_this_wp_keycodes_["rawShortcut"].primary('y')];
|
||
/**
|
||
* An instance of a KeyboardShortcuts element pre-bound for the handled
|
||
* shortcuts. Since shortcuts never change, the element can be considered
|
||
* static, and can be skipped in reconciliation.
|
||
*
|
||
* @type {WPElement}
|
||
*/
|
||
|
||
var SHORTCUTS_ELEMENT = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["KeyboardShortcuts"], {
|
||
bindGlobal: true,
|
||
shortcuts: Object(external_lodash_["fromPairs"])(HANDLED_SHORTCUTS.map(function (shortcut) {
|
||
return [shortcut, function (event) {
|
||
return event.preventDefault();
|
||
}];
|
||
}))
|
||
});
|
||
/**
|
||
* Component which registered keyboard event handlers to prevent default
|
||
* behaviors for key combinations otherwise handled internally by RichText.
|
||
*
|
||
* @return {WPElement} WordPress element.
|
||
*/
|
||
|
||
var RemoveBrowserShortcuts = function RemoveBrowserShortcuts() {
|
||
return SHORTCUTS_ELEMENT;
|
||
};
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/shortcut.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
var shortcut_RichTextShortcut =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(RichTextShortcut, _Component);
|
||
|
||
function RichTextShortcut() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, RichTextShortcut);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(RichTextShortcut).apply(this, arguments));
|
||
_this.onUse = _this.onUse.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(RichTextShortcut, [{
|
||
key: "onUse",
|
||
value: function onUse() {
|
||
this.props.onUse();
|
||
return false;
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props = this.props,
|
||
character = _this$props.character,
|
||
type = _this$props.type;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["KeyboardShortcuts"], {
|
||
bindGlobal: true,
|
||
shortcuts: Object(defineProperty["a" /* default */])({}, external_this_wp_keycodes_["rawShortcut"][type](character), this.onUse)
|
||
});
|
||
}
|
||
}]);
|
||
|
||
return RichTextShortcut;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/toolbar-button.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
function RichTextToolbarButton(_ref) {
|
||
var name = _ref.name,
|
||
shortcutType = _ref.shortcutType,
|
||
shortcutCharacter = _ref.shortcutCharacter,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref, ["name", "shortcutType", "shortcutCharacter"]);
|
||
|
||
var shortcut;
|
||
var fillName = 'RichText.ToolbarControls';
|
||
|
||
if (name) {
|
||
fillName += ".".concat(name);
|
||
}
|
||
|
||
if (shortcutType && shortcutCharacter) {
|
||
shortcut = external_this_wp_keycodes_["displayShortcut"][shortcutType](shortcutCharacter);
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Fill"], {
|
||
name: fillName
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["ToolbarButton"], Object(esm_extends["a" /* default */])({}, props, {
|
||
shortcut: shortcut
|
||
})));
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/input-event.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
var input_event_unstableRichTextInputEvent =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(__unstableRichTextInputEvent, _Component);
|
||
|
||
function __unstableRichTextInputEvent() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, __unstableRichTextInputEvent);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(__unstableRichTextInputEvent).apply(this, arguments));
|
||
_this.onInput = _this.onInput.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(__unstableRichTextInputEvent, [{
|
||
key: "onInput",
|
||
value: function onInput(event) {
|
||
if (event.inputType === this.props.inputType) {
|
||
this.props.onInput();
|
||
}
|
||
}
|
||
}, {
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
document.addEventListener('input', this.onInput, true);
|
||
}
|
||
}, {
|
||
key: "componentWillUnmount",
|
||
value: function componentWillUnmount() {
|
||
document.removeEventListener('input', this.onInput, true);
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
return null;
|
||
}
|
||
}]);
|
||
|
||
return __unstableRichTextInputEvent;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
var requestIdleCallback = window.requestIdleCallback || function fallbackRequestIdleCallback(fn) {
|
||
window.setTimeout(fn, 100);
|
||
};
|
||
|
||
var wrapperClasses = 'editor-rich-text block-editor-rich-text';
|
||
var rich_text_classes = 'editor-rich-text__editable block-editor-rich-text__editable';
|
||
/**
|
||
* Get the multiline tag based on the multiline prop.
|
||
*
|
||
* @param {?(string|boolean)} multiline The multiline prop.
|
||
*
|
||
* @return {?string} The multiline tag.
|
||
*/
|
||
|
||
function getMultilineTag(multiline) {
|
||
if (multiline !== true && multiline !== 'p' && multiline !== 'li') {
|
||
return;
|
||
}
|
||
|
||
return multiline === true ? 'p' : multiline;
|
||
}
|
||
|
||
var rich_text_RichTextWrapper =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(RichTextWrapper, _Component);
|
||
|
||
function RichTextWrapper() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, RichTextWrapper);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(RichTextWrapper).apply(this, arguments));
|
||
_this.onEnter = _this.onEnter.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onSplit = _this.onSplit.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onPaste = _this.onPaste.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onDelete = _this.onDelete.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.inputRule = _this.inputRule.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.markAutomaticChange = _this.markAutomaticChange.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(RichTextWrapper, [{
|
||
key: "onEnter",
|
||
value: function onEnter(_ref) {
|
||
var value = _ref.value,
|
||
onChange = _ref.onChange,
|
||
shiftKey = _ref.shiftKey;
|
||
var _this$props = this.props,
|
||
onReplace = _this$props.onReplace,
|
||
onSplit = _this$props.onSplit,
|
||
multiline = _this$props.multiline;
|
||
var canSplit = onReplace && onSplit;
|
||
|
||
if (onReplace) {
|
||
var transforms = Object(external_this_wp_blocks_["getBlockTransforms"])('from').filter(function (_ref2) {
|
||
var type = _ref2.type;
|
||
return type === 'enter';
|
||
});
|
||
var transformation = Object(external_this_wp_blocks_["findTransform"])(transforms, function (item) {
|
||
return item.regExp.test(value.text);
|
||
});
|
||
|
||
if (transformation) {
|
||
onReplace([transformation.transform({
|
||
content: value.text
|
||
})]);
|
||
this.markAutomaticChange();
|
||
}
|
||
}
|
||
|
||
if (multiline) {
|
||
if (shiftKey) {
|
||
onChange(Object(external_this_wp_richText_["insert"])(value, '\n'));
|
||
} else if (canSplit && Object(external_this_wp_richText_["__unstableIsEmptyLine"])(value)) {
|
||
this.onSplit(value);
|
||
} else {
|
||
onChange(Object(external_this_wp_richText_["__unstableInsertLineSeparator"])(value));
|
||
}
|
||
} else if (shiftKey || !canSplit) {
|
||
onChange(Object(external_this_wp_richText_["insert"])(value, '\n'));
|
||
} else {
|
||
this.onSplit(value);
|
||
}
|
||
}
|
||
}, {
|
||
key: "onDelete",
|
||
value: function onDelete(_ref3) {
|
||
var value = _ref3.value,
|
||
isReverse = _ref3.isReverse;
|
||
var _this$props2 = this.props,
|
||
onMerge = _this$props2.onMerge,
|
||
onRemove = _this$props2.onRemove;
|
||
|
||
if (onMerge) {
|
||
onMerge(!isReverse);
|
||
} // Only handle remove on Backspace. This serves dual-purpose of being
|
||
// an intentional user interaction distinguishing between Backspace and
|
||
// Delete to remove the empty field, but also to avoid merge & remove
|
||
// causing destruction of two fields (merge, then removed merged).
|
||
|
||
|
||
if (onRemove && Object(external_this_wp_richText_["isEmpty"])(value) && isReverse) {
|
||
onRemove(!isReverse);
|
||
}
|
||
}
|
||
}, {
|
||
key: "onPaste",
|
||
value: function onPaste(_ref4) {
|
||
var value = _ref4.value,
|
||
onChange = _ref4.onChange,
|
||
html = _ref4.html,
|
||
plainText = _ref4.plainText,
|
||
image = _ref4.image;
|
||
var _this$props3 = this.props,
|
||
onReplace = _this$props3.onReplace,
|
||
onSplit = _this$props3.onSplit,
|
||
tagName = _this$props3.tagName,
|
||
canUserUseUnfilteredHTML = _this$props3.canUserUseUnfilteredHTML,
|
||
multiline = _this$props3.multiline,
|
||
__unstableEmbedURLOnPaste = _this$props3.__unstableEmbedURLOnPaste;
|
||
|
||
if (image && !html) {
|
||
var file = image.getAsFile ? image.getAsFile() : image;
|
||
|
||
var _content = Object(external_this_wp_blocks_["pasteHandler"])({
|
||
HTML: "<img src=\"".concat(Object(external_this_wp_blob_["createBlobURL"])(file), "\">"),
|
||
mode: 'BLOCKS',
|
||
tagName: tagName
|
||
}); // Allows us to ask for this information when we get a report.
|
||
|
||
|
||
window.console.log('Received item:\n\n', file);
|
||
|
||
if (onReplace && Object(external_this_wp_richText_["isEmpty"])(value)) {
|
||
onReplace(_content);
|
||
} else {
|
||
this.onSplit(value, _content);
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
var mode = onReplace && onSplit ? 'AUTO' : 'INLINE';
|
||
|
||
if (__unstableEmbedURLOnPaste && Object(external_this_wp_richText_["isEmpty"])(value) && Object(external_this_wp_url_["isURL"])(plainText.trim())) {
|
||
mode = 'BLOCKS';
|
||
}
|
||
|
||
var content = Object(external_this_wp_blocks_["pasteHandler"])({
|
||
HTML: html,
|
||
plainText: plainText,
|
||
mode: mode,
|
||
tagName: tagName,
|
||
canUserUseUnfilteredHTML: canUserUseUnfilteredHTML
|
||
});
|
||
|
||
if (typeof content === 'string') {
|
||
var valueToInsert = Object(external_this_wp_richText_["create"])({
|
||
html: content
|
||
}); // If the content should be multiline, we should process text
|
||
// separated by a line break as separate lines.
|
||
|
||
if (multiline) {
|
||
valueToInsert = Object(external_this_wp_richText_["replace"])(valueToInsert, /\n+/g, external_this_wp_richText_["__UNSTABLE_LINE_SEPARATOR"]);
|
||
}
|
||
|
||
onChange(Object(external_this_wp_richText_["insert"])(value, valueToInsert));
|
||
} else if (content.length > 0) {
|
||
if (onReplace && Object(external_this_wp_richText_["isEmpty"])(value)) {
|
||
onReplace(content);
|
||
} else {
|
||
this.onSplit(value, content);
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Signals to the RichText owner that the block can be replaced with two
|
||
* blocks as a result of splitting the block by pressing enter, or with
|
||
* blocks as a result of splitting the block by pasting block content in the
|
||
* instance.
|
||
*
|
||
* @param {Object} record The rich text value to split.
|
||
* @param {Array} pastedBlocks The pasted blocks to insert, if any.
|
||
*/
|
||
|
||
}, {
|
||
key: "onSplit",
|
||
value: function onSplit(record) {
|
||
var pastedBlocks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
||
var _this$props4 = this.props,
|
||
onReplace = _this$props4.onReplace,
|
||
onSplit = _this$props4.onSplit,
|
||
onSplitMiddle = _this$props4.__unstableOnSplitMiddle,
|
||
multiline = _this$props4.multiline;
|
||
|
||
if (!onReplace || !onSplit) {
|
||
return;
|
||
}
|
||
|
||
var blocks = [];
|
||
|
||
var _split = Object(external_this_wp_richText_["split"])(record),
|
||
_split2 = Object(slicedToArray["a" /* default */])(_split, 2),
|
||
before = _split2[0],
|
||
after = _split2[1];
|
||
|
||
var hasPastedBlocks = pastedBlocks.length > 0;
|
||
var multilineTag = getMultilineTag(multiline); // Create a block with the content before the caret if there's no pasted
|
||
// blocks, or if there are pasted blocks and the value is not empty.
|
||
// We do not want a leading empty block on paste, but we do if split
|
||
// with e.g. the enter key.
|
||
|
||
if (!hasPastedBlocks || !Object(external_this_wp_richText_["isEmpty"])(before)) {
|
||
blocks.push(onSplit(Object(external_this_wp_richText_["toHTMLString"])({
|
||
value: before,
|
||
multilineTag: multilineTag
|
||
})));
|
||
}
|
||
|
||
if (hasPastedBlocks) {
|
||
blocks.push.apply(blocks, Object(toConsumableArray["a" /* default */])(pastedBlocks));
|
||
} else if (onSplitMiddle) {
|
||
blocks.push(onSplitMiddle());
|
||
} // If there's pasted blocks, append a block with the content after the
|
||
// caret. Otherwise, do append and empty block if there is no
|
||
// `onSplitMiddle` prop, but if there is and the content is empty, the
|
||
// middle block is enough to set focus in.
|
||
|
||
|
||
if (hasPastedBlocks || !onSplitMiddle || !Object(external_this_wp_richText_["isEmpty"])(after)) {
|
||
blocks.push(onSplit(Object(external_this_wp_richText_["toHTMLString"])({
|
||
value: after,
|
||
multilineTag: multilineTag
|
||
})));
|
||
} // If there are pasted blocks, set the selection to the last one.
|
||
// Otherwise, set the selection to the second block.
|
||
|
||
|
||
var indexToSelect = hasPastedBlocks ? blocks.length - 1 : 1;
|
||
onReplace(blocks, indexToSelect);
|
||
}
|
||
}, {
|
||
key: "inputRule",
|
||
value: function inputRule(value, valueToFormat) {
|
||
var onReplace = this.props.onReplace;
|
||
|
||
if (!onReplace) {
|
||
return;
|
||
}
|
||
|
||
var start = value.start,
|
||
text = value.text;
|
||
var characterBefore = text.slice(start - 1, start); // The character right before the caret must be a plain space.
|
||
|
||
if (characterBefore !== ' ') {
|
||
return;
|
||
}
|
||
|
||
var trimmedTextBefore = text.slice(0, start).trim();
|
||
var prefixTransforms = Object(external_this_wp_blocks_["getBlockTransforms"])('from').filter(function (_ref5) {
|
||
var type = _ref5.type;
|
||
return type === 'prefix';
|
||
});
|
||
var transformation = Object(external_this_wp_blocks_["findTransform"])(prefixTransforms, function (_ref6) {
|
||
var prefix = _ref6.prefix;
|
||
return trimmedTextBefore === prefix;
|
||
});
|
||
|
||
if (!transformation) {
|
||
return;
|
||
}
|
||
|
||
var content = valueToFormat(Object(external_this_wp_richText_["slice"])(value, start, text.length));
|
||
var block = transformation.transform(content);
|
||
onReplace([block]);
|
||
this.markAutomaticChange();
|
||
}
|
||
}, {
|
||
key: "getAllowedFormats",
|
||
value: function getAllowedFormats() {
|
||
var _this$props5 = this.props,
|
||
allowedFormats = _this$props5.allowedFormats,
|
||
formattingControls = _this$props5.formattingControls;
|
||
|
||
if (!allowedFormats && !formattingControls) {
|
||
return;
|
||
}
|
||
|
||
if (allowedFormats) {
|
||
return allowedFormats;
|
||
}
|
||
|
||
external_this_wp_deprecated_default()('wp.blockEditor.RichText formattingControls prop', {
|
||
alternative: 'allowedFormats'
|
||
});
|
||
return formattingControls.map(function (name) {
|
||
return "core/".concat(name);
|
||
});
|
||
}
|
||
/**
|
||
* Marks the last change as an automatic change at the next idle period to
|
||
* ensure all selection changes have been recorded.
|
||
*/
|
||
|
||
}, {
|
||
key: "markAutomaticChange",
|
||
value: function markAutomaticChange() {
|
||
var _this2 = this;
|
||
|
||
requestIdleCallback(function () {
|
||
_this2.props.markAutomaticChange();
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props6 = this.props,
|
||
children = _this$props6.children,
|
||
tagName = _this$props6.tagName,
|
||
originalValue = _this$props6.value,
|
||
originalOnChange = _this$props6.onChange,
|
||
selectionStart = _this$props6.selectionStart,
|
||
selectionEnd = _this$props6.selectionEnd,
|
||
onSelectionChange = _this$props6.onSelectionChange,
|
||
multiline = _this$props6.multiline,
|
||
inlineToolbar = _this$props6.inlineToolbar,
|
||
wrapperClassName = _this$props6.wrapperClassName,
|
||
className = _this$props6.className,
|
||
autocompleters = _this$props6.autocompleters,
|
||
onReplace = _this$props6.onReplace,
|
||
isCaretWithinFormattedText = _this$props6.isCaretWithinFormattedText,
|
||
onEnterFormattedText = _this$props6.onEnterFormattedText,
|
||
onExitFormattedText = _this$props6.onExitFormattedText,
|
||
originalIsSelected = _this$props6.isSelected,
|
||
onCreateUndoLevel = _this$props6.onCreateUndoLevel,
|
||
markAutomaticChange = _this$props6.markAutomaticChange,
|
||
didAutomaticChange = _this$props6.didAutomaticChange,
|
||
undo = _this$props6.undo,
|
||
placeholder = _this$props6.placeholder,
|
||
keepPlaceholderOnFocus = _this$props6.keepPlaceholderOnFocus,
|
||
allowedFormats = _this$props6.allowedFormats,
|
||
withoutInteractiveFormatting = _this$props6.withoutInteractiveFormatting,
|
||
onRemove = _this$props6.onRemove,
|
||
onMerge = _this$props6.onMerge,
|
||
onSplit = _this$props6.onSplit,
|
||
canUserUseUnfilteredHTML = _this$props6.canUserUseUnfilteredHTML,
|
||
clientId = _this$props6.clientId,
|
||
identifier = _this$props6.identifier,
|
||
instanceId = _this$props6.instanceId,
|
||
start = _this$props6.start,
|
||
reversed = _this$props6.reversed,
|
||
experimentalProps = Object(objectWithoutProperties["a" /* default */])(_this$props6, ["children", "tagName", "value", "onChange", "selectionStart", "selectionEnd", "onSelectionChange", "multiline", "inlineToolbar", "wrapperClassName", "className", "autocompleters", "onReplace", "isCaretWithinFormattedText", "onEnterFormattedText", "onExitFormattedText", "isSelected", "onCreateUndoLevel", "markAutomaticChange", "didAutomaticChange", "undo", "placeholder", "keepPlaceholderOnFocus", "allowedFormats", "withoutInteractiveFormatting", "onRemove", "onMerge", "onSplit", "canUserUseUnfilteredHTML", "clientId", "identifier", "instanceId", "start", "reversed"]);
|
||
|
||
var multilineTag = getMultilineTag(multiline);
|
||
var adjustedAllowedFormats = this.getAllowedFormats();
|
||
var hasFormats = !adjustedAllowedFormats || adjustedAllowedFormats.length > 0;
|
||
var adjustedValue = originalValue;
|
||
var adjustedOnChange = originalOnChange; // Handle deprecated format.
|
||
|
||
if (Array.isArray(originalValue)) {
|
||
adjustedValue = external_this_wp_blocks_["children"].toHTML(originalValue);
|
||
|
||
adjustedOnChange = function adjustedOnChange(newValue) {
|
||
return originalOnChange(external_this_wp_blocks_["children"].fromDOM(Object(external_this_wp_richText_["__unstableCreateElement"])(document, newValue).childNodes));
|
||
};
|
||
}
|
||
|
||
var content = Object(external_this_wp_element_["createElement"])(external_this_wp_richText_["__experimentalRichText"], Object(esm_extends["a" /* default */])({}, experimentalProps, {
|
||
value: adjustedValue,
|
||
onChange: adjustedOnChange,
|
||
selectionStart: selectionStart,
|
||
selectionEnd: selectionEnd,
|
||
onSelectionChange: onSelectionChange,
|
||
tagName: tagName,
|
||
className: classnames_default()(rich_text_classes, className, {
|
||
'is-selected': originalIsSelected,
|
||
'keep-placeholder-on-focus': keepPlaceholderOnFocus
|
||
}),
|
||
placeholder: placeholder,
|
||
allowedFormats: adjustedAllowedFormats,
|
||
withoutInteractiveFormatting: withoutInteractiveFormatting,
|
||
onEnter: this.onEnter,
|
||
onDelete: this.onDelete,
|
||
onPaste: this.onPaste,
|
||
__unstableIsSelected: originalIsSelected,
|
||
__unstableInputRule: this.inputRule,
|
||
__unstableMultilineTag: multilineTag,
|
||
__unstableIsCaretWithinFormattedText: isCaretWithinFormattedText,
|
||
__unstableOnEnterFormattedText: onEnterFormattedText,
|
||
__unstableOnExitFormattedText: onExitFormattedText,
|
||
__unstableOnCreateUndoLevel: onCreateUndoLevel,
|
||
__unstableMarkAutomaticChange: this.markAutomaticChange,
|
||
__unstableDidAutomaticChange: didAutomaticChange,
|
||
__unstableUndo: undo
|
||
}), function (_ref7) {
|
||
var isSelected = _ref7.isSelected,
|
||
value = _ref7.value,
|
||
onChange = _ref7.onChange,
|
||
Editable = _ref7.Editable;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, children && children({
|
||
value: value,
|
||
onChange: onChange
|
||
}), isSelected && !inlineToolbar && hasFormats && Object(external_this_wp_element_["createElement"])(block_format_controls, null, Object(external_this_wp_element_["createElement"])(format_toolbar, null)), isSelected && inlineToolbar && hasFormats && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IsolatedEventContainer"], {
|
||
className: "editor-rich-text__inline-toolbar block-editor-rich-text__inline-toolbar"
|
||
}, Object(external_this_wp_element_["createElement"])(format_toolbar, null)), isSelected && Object(external_this_wp_element_["createElement"])(RemoveBrowserShortcuts, null), Object(external_this_wp_element_["createElement"])(autocomplete, {
|
||
onReplace: onReplace,
|
||
completers: autocompleters,
|
||
record: value,
|
||
onChange: onChange,
|
||
isSelected: isSelected
|
||
}, function (_ref8) {
|
||
var listBoxId = _ref8.listBoxId,
|
||
activeId = _ref8.activeId,
|
||
onKeyDown = _ref8.onKeyDown;
|
||
return Object(external_this_wp_element_["createElement"])(Editable, {
|
||
"aria-autocomplete": listBoxId ? 'list' : undefined,
|
||
"aria-owns": listBoxId,
|
||
"aria-activedescendant": activeId,
|
||
start: start,
|
||
reversed: reversed,
|
||
onKeyDown: onKeyDown
|
||
});
|
||
}));
|
||
});
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: classnames_default()(wrapperClasses, wrapperClassName)
|
||
}, content);
|
||
}
|
||
}]);
|
||
|
||
return RichTextWrapper;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
var RichTextContainer = Object(external_this_wp_compose_["compose"])([external_this_wp_compose_["withInstanceId"], context_withBlockEditContext(function (_ref9) {
|
||
var clientId = _ref9.clientId;
|
||
return {
|
||
clientId: clientId
|
||
};
|
||
}), Object(external_this_wp_data_["withSelect"])(function (select, _ref10) {
|
||
var clientId = _ref10.clientId,
|
||
instanceId = _ref10.instanceId,
|
||
_ref10$identifier = _ref10.identifier,
|
||
identifier = _ref10$identifier === void 0 ? instanceId : _ref10$identifier,
|
||
isSelected = _ref10.isSelected;
|
||
|
||
var _select = select('core/block-editor'),
|
||
isCaretWithinFormattedText = _select.isCaretWithinFormattedText,
|
||
getSelectionStart = _select.getSelectionStart,
|
||
getSelectionEnd = _select.getSelectionEnd,
|
||
getSettings = _select.getSettings,
|
||
didAutomaticChange = _select.didAutomaticChange;
|
||
|
||
var selectionStart = getSelectionStart();
|
||
var selectionEnd = getSelectionEnd();
|
||
|
||
var _getSettings = getSettings(),
|
||
__experimentalCanUserUseUnfilteredHTML = _getSettings.__experimentalCanUserUseUnfilteredHTML;
|
||
|
||
if (isSelected === undefined) {
|
||
isSelected = selectionStart.clientId === clientId && selectionStart.attributeKey === identifier;
|
||
} else if (isSelected) {
|
||
isSelected = selectionStart.clientId === clientId;
|
||
}
|
||
|
||
return {
|
||
canUserUseUnfilteredHTML: __experimentalCanUserUseUnfilteredHTML,
|
||
isCaretWithinFormattedText: isCaretWithinFormattedText(),
|
||
selectionStart: isSelected ? selectionStart.offset : undefined,
|
||
selectionEnd: isSelected ? selectionEnd.offset : undefined,
|
||
isSelected: isSelected,
|
||
didAutomaticChange: didAutomaticChange()
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref11) {
|
||
var clientId = _ref11.clientId,
|
||
instanceId = _ref11.instanceId,
|
||
_ref11$identifier = _ref11.identifier,
|
||
identifier = _ref11$identifier === void 0 ? instanceId : _ref11$identifier;
|
||
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
__unstableMarkLastChangeAsPersistent = _dispatch.__unstableMarkLastChangeAsPersistent,
|
||
enterFormattedText = _dispatch.enterFormattedText,
|
||
exitFormattedText = _dispatch.exitFormattedText,
|
||
selectionChange = _dispatch.selectionChange,
|
||
__unstableMarkAutomaticChange = _dispatch.__unstableMarkAutomaticChange;
|
||
|
||
var _dispatch2 = dispatch('core/editor'),
|
||
undo = _dispatch2.undo;
|
||
|
||
return {
|
||
onCreateUndoLevel: __unstableMarkLastChangeAsPersistent,
|
||
onEnterFormattedText: enterFormattedText,
|
||
onExitFormattedText: exitFormattedText,
|
||
onSelectionChange: function onSelectionChange(start, end) {
|
||
selectionChange(clientId, identifier, start, end);
|
||
},
|
||
markAutomaticChange: __unstableMarkAutomaticChange,
|
||
undo: undo
|
||
};
|
||
}), Object(external_this_wp_components_["withFilters"])('experimentalRichText')])(rich_text_RichTextWrapper);
|
||
|
||
RichTextContainer.Content = function (_ref12) {
|
||
var value = _ref12.value,
|
||
Tag = _ref12.tagName,
|
||
multiline = _ref12.multiline,
|
||
props = Object(objectWithoutProperties["a" /* default */])(_ref12, ["value", "tagName", "multiline"]);
|
||
|
||
// Handle deprecated `children` and `node` sources.
|
||
if (Array.isArray(value)) {
|
||
value = external_this_wp_blocks_["children"].toHTML(value);
|
||
}
|
||
|
||
var MultilineTag = getMultilineTag(multiline);
|
||
|
||
if (!value && MultilineTag) {
|
||
value = "<".concat(MultilineTag, "></").concat(MultilineTag, ">");
|
||
}
|
||
|
||
var content = Object(external_this_wp_element_["createElement"])(external_this_wp_element_["RawHTML"], null, value);
|
||
|
||
if (Tag) {
|
||
return Object(external_this_wp_element_["createElement"])(Tag, Object(external_lodash_["omit"])(props, ['format']), content);
|
||
}
|
||
|
||
return content;
|
||
};
|
||
|
||
RichTextContainer.isEmpty = function (value) {
|
||
return !value || value.length === 0;
|
||
};
|
||
|
||
RichTextContainer.Content.defaultProps = {
|
||
format: 'string',
|
||
value: ''
|
||
};
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/rich-text/README.md
|
||
*/
|
||
|
||
/* harmony default export */ var rich_text = (RichTextContainer);
|
||
|
||
|
||
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-input/button.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var button_URLInputButton =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(URLInputButton, _Component);
|
||
|
||
function URLInputButton() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, URLInputButton);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(URLInputButton).apply(this, arguments));
|
||
_this.toggle = _this.toggle.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.submitLink = _this.submitLink.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.state = {
|
||
expanded: false
|
||
};
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(URLInputButton, [{
|
||
key: "toggle",
|
||
value: function toggle() {
|
||
this.setState({
|
||
expanded: !this.state.expanded
|
||
});
|
||
}
|
||
}, {
|
||
key: "submitLink",
|
||
value: function submitLink(event) {
|
||
event.preventDefault();
|
||
this.toggle();
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this$props = this.props,
|
||
url = _this$props.url,
|
||
onChange = _this$props.onChange;
|
||
var expanded = this.state.expanded;
|
||
var buttonLabel = url ? Object(external_this_wp_i18n_["__"])('Edit link') : Object(external_this_wp_i18n_["__"])('Insert link');
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-url-input__button block-editor-url-input__button"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
icon: "admin-links",
|
||
label: buttonLabel,
|
||
onClick: this.toggle,
|
||
className: classnames_default()('components-toolbar__control', {
|
||
'is-active': url
|
||
})
|
||
}), expanded && Object(external_this_wp_element_["createElement"])("form", {
|
||
className: "editor-url-input__button-modal block-editor-url-input__button-modal",
|
||
onSubmit: this.submitLink
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-url-input__button-modal-line block-editor-url-input__button-modal-line"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
className: "editor-url-input__back block-editor-url-input__back",
|
||
icon: "arrow-left-alt",
|
||
label: Object(external_this_wp_i18n_["__"])('Close'),
|
||
onClick: this.toggle
|
||
}), Object(external_this_wp_element_["createElement"])(url_input, {
|
||
value: url || '',
|
||
onChange: onChange
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
icon: "editor-break",
|
||
label: Object(external_this_wp_i18n_["__"])('Submit'),
|
||
type: "submit"
|
||
}))));
|
||
}
|
||
}]);
|
||
|
||
return URLInputButton;
|
||
}(external_this_wp_element_["Component"]);
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/url-input/README.md
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var url_input_button = (button_URLInputButton);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-settings-menu-first-item.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
var block_settings_menu_first_item_createSlotFill = Object(external_this_wp_components_["createSlotFill"])('__experimentalBlockSettingsMenuFirstItem'),
|
||
__experimentalBlockSettingsMenuFirstItem = block_settings_menu_first_item_createSlotFill.Fill,
|
||
block_settings_menu_first_item_Slot = block_settings_menu_first_item_createSlotFill.Slot;
|
||
|
||
__experimentalBlockSettingsMenuFirstItem.Slot = block_settings_menu_first_item_Slot;
|
||
/* harmony default export */ var block_settings_menu_first_item = (__experimentalBlockSettingsMenuFirstItem);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-settings-menu-plugins-extension.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
var block_settings_menu_plugins_extension_createSlotFill = Object(external_this_wp_components_["createSlotFill"])('__experimentalBlockSettingsMenuPluginsExtension'),
|
||
__experimentalBlockSettingsMenuPluginsExtension = block_settings_menu_plugins_extension_createSlotFill.Fill,
|
||
block_settings_menu_plugins_extension_Slot = block_settings_menu_plugins_extension_createSlotFill.Slot;
|
||
|
||
__experimentalBlockSettingsMenuPluginsExtension.Slot = block_settings_menu_plugins_extension_Slot;
|
||
/* harmony default export */ var block_settings_menu_plugins_extension = (__experimentalBlockSettingsMenuPluginsExtension);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-actions/index.js
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
function BlockActions(_ref) {
|
||
var canDuplicate = _ref.canDuplicate,
|
||
canInsertDefaultBlock = _ref.canInsertDefaultBlock,
|
||
children = _ref.children,
|
||
isLocked = _ref.isLocked,
|
||
onDuplicate = _ref.onDuplicate,
|
||
onGroup = _ref.onGroup,
|
||
onInsertAfter = _ref.onInsertAfter,
|
||
onInsertBefore = _ref.onInsertBefore,
|
||
onRemove = _ref.onRemove,
|
||
onUngroup = _ref.onUngroup;
|
||
return children({
|
||
canDuplicate: canDuplicate,
|
||
canInsertDefaultBlock: canInsertDefaultBlock,
|
||
isLocked: isLocked,
|
||
onDuplicate: onDuplicate,
|
||
onGroup: onGroup,
|
||
onInsertAfter: onInsertAfter,
|
||
onInsertBefore: onInsertBefore,
|
||
onRemove: onRemove,
|
||
onUngroup: onUngroup
|
||
});
|
||
}
|
||
|
||
/* harmony default export */ var block_actions = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select, props) {
|
||
var _select = select('core/block-editor'),
|
||
canInsertBlockType = _select.canInsertBlockType,
|
||
getBlockRootClientId = _select.getBlockRootClientId,
|
||
getBlocksByClientId = _select.getBlocksByClientId,
|
||
getTemplateLock = _select.getTemplateLock;
|
||
|
||
var _select2 = select('core/blocks'),
|
||
getDefaultBlockName = _select2.getDefaultBlockName;
|
||
|
||
var blocks = getBlocksByClientId(props.clientIds);
|
||
var rootClientId = getBlockRootClientId(props.clientIds[0]);
|
||
var canDuplicate = Object(external_lodash_["every"])(blocks, function (block) {
|
||
return !!block && Object(external_this_wp_blocks_["hasBlockSupport"])(block.name, 'multiple', true) && canInsertBlockType(block.name, rootClientId);
|
||
});
|
||
var canInsertDefaultBlock = canInsertBlockType(getDefaultBlockName(), rootClientId);
|
||
return {
|
||
blocks: blocks,
|
||
canDuplicate: canDuplicate,
|
||
canInsertDefaultBlock: canInsertDefaultBlock,
|
||
extraProps: props,
|
||
isLocked: !!getTemplateLock(rootClientId),
|
||
rootClientId: rootClientId
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, props, _ref2) {
|
||
var select = _ref2.select;
|
||
var clientIds = props.clientIds,
|
||
rootClientId = props.rootClientId,
|
||
blocks = props.blocks,
|
||
isLocked = props.isLocked,
|
||
canDuplicate = props.canDuplicate;
|
||
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
insertBlocks = _dispatch.insertBlocks,
|
||
multiSelect = _dispatch.multiSelect,
|
||
removeBlocks = _dispatch.removeBlocks,
|
||
insertDefaultBlock = _dispatch.insertDefaultBlock,
|
||
replaceBlocks = _dispatch.replaceBlocks;
|
||
|
||
return {
|
||
onDuplicate: function onDuplicate() {
|
||
if (!canDuplicate) {
|
||
return;
|
||
}
|
||
|
||
var _select3 = select('core/block-editor'),
|
||
getBlockIndex = _select3.getBlockIndex;
|
||
|
||
var lastSelectedIndex = getBlockIndex(Object(external_lodash_["last"])(Object(external_lodash_["castArray"])(clientIds)), rootClientId);
|
||
var clonedBlocks = blocks.map(function (block) {
|
||
return Object(external_this_wp_blocks_["cloneBlock"])(block);
|
||
});
|
||
insertBlocks(clonedBlocks, lastSelectedIndex + 1, rootClientId);
|
||
|
||
if (clonedBlocks.length > 1) {
|
||
multiSelect(Object(external_lodash_["first"])(clonedBlocks).clientId, Object(external_lodash_["last"])(clonedBlocks).clientId);
|
||
}
|
||
},
|
||
onRemove: function onRemove() {
|
||
if (!isLocked) {
|
||
removeBlocks(clientIds);
|
||
}
|
||
},
|
||
onInsertBefore: function onInsertBefore() {
|
||
if (!isLocked) {
|
||
var _select4 = select('core/block-editor'),
|
||
getBlockIndex = _select4.getBlockIndex;
|
||
|
||
var firstSelectedIndex = getBlockIndex(Object(external_lodash_["first"])(Object(external_lodash_["castArray"])(clientIds)), rootClientId);
|
||
insertDefaultBlock({}, rootClientId, firstSelectedIndex);
|
||
}
|
||
},
|
||
onInsertAfter: function onInsertAfter() {
|
||
if (!isLocked) {
|
||
var _select5 = select('core/block-editor'),
|
||
getBlockIndex = _select5.getBlockIndex;
|
||
|
||
var lastSelectedIndex = getBlockIndex(Object(external_lodash_["last"])(Object(external_lodash_["castArray"])(clientIds)), rootClientId);
|
||
insertDefaultBlock({}, rootClientId, lastSelectedIndex + 1);
|
||
}
|
||
},
|
||
onGroup: function onGroup() {
|
||
if (!blocks.length) {
|
||
return;
|
||
}
|
||
|
||
var _select6 = select('core/blocks'),
|
||
getGroupingBlockName = _select6.getGroupingBlockName;
|
||
|
||
var groupingBlockName = getGroupingBlockName(); // Activate the `transform` on `core/group` which does the conversion
|
||
|
||
var newBlocks = Object(external_this_wp_blocks_["switchToBlockType"])(blocks, groupingBlockName);
|
||
|
||
if (!newBlocks) {
|
||
return;
|
||
}
|
||
|
||
replaceBlocks(clientIds, newBlocks);
|
||
},
|
||
onUngroup: function onUngroup() {
|
||
if (!blocks.length) {
|
||
return;
|
||
}
|
||
|
||
var innerBlocks = blocks[0].innerBlocks;
|
||
|
||
if (!innerBlocks.length) {
|
||
return;
|
||
}
|
||
|
||
replaceBlocks(clientIds, innerBlocks);
|
||
}
|
||
};
|
||
})])(BlockActions));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-editor-keyboard-shortcuts/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var preventDefault = function preventDefault(event) {
|
||
event.preventDefault();
|
||
return event;
|
||
};
|
||
|
||
var shortcuts = {
|
||
duplicate: {
|
||
raw: external_this_wp_keycodes_["rawShortcut"].primaryShift('d'),
|
||
display: external_this_wp_keycodes_["displayShortcut"].primaryShift('d')
|
||
},
|
||
removeBlock: {
|
||
raw: external_this_wp_keycodes_["rawShortcut"].access('z'),
|
||
display: external_this_wp_keycodes_["displayShortcut"].access('z')
|
||
},
|
||
insertBefore: {
|
||
raw: external_this_wp_keycodes_["rawShortcut"].primaryAlt('t'),
|
||
display: external_this_wp_keycodes_["displayShortcut"].primaryAlt('t')
|
||
},
|
||
insertAfter: {
|
||
raw: external_this_wp_keycodes_["rawShortcut"].primaryAlt('y'),
|
||
display: external_this_wp_keycodes_["displayShortcut"].primaryAlt('y')
|
||
}
|
||
};
|
||
|
||
var block_editor_keyboard_shortcuts_BlockEditorKeyboardShortcuts =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockEditorKeyboardShortcuts, _Component);
|
||
|
||
function BlockEditorKeyboardShortcuts() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockEditorKeyboardShortcuts);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockEditorKeyboardShortcuts).apply(this, arguments));
|
||
_this.selectAll = _this.selectAll.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.deleteSelectedBlocks = _this.deleteSelectedBlocks.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.clearMultiSelection = _this.clearMultiSelection.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockEditorKeyboardShortcuts, [{
|
||
key: "selectAll",
|
||
value: function selectAll(event) {
|
||
var _this$props = this.props,
|
||
rootBlocksClientIds = _this$props.rootBlocksClientIds,
|
||
onMultiSelect = _this$props.onMultiSelect;
|
||
event.preventDefault();
|
||
onMultiSelect(Object(external_lodash_["first"])(rootBlocksClientIds), Object(external_lodash_["last"])(rootBlocksClientIds));
|
||
}
|
||
}, {
|
||
key: "deleteSelectedBlocks",
|
||
value: function deleteSelectedBlocks(event) {
|
||
var _this$props2 = this.props,
|
||
selectedBlockClientIds = _this$props2.selectedBlockClientIds,
|
||
hasMultiSelection = _this$props2.hasMultiSelection,
|
||
onRemove = _this$props2.onRemove,
|
||
isLocked = _this$props2.isLocked;
|
||
|
||
if (hasMultiSelection) {
|
||
event.preventDefault();
|
||
|
||
if (!isLocked) {
|
||
onRemove(selectedBlockClientIds);
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Clears current multi-selection, if one exists.
|
||
*/
|
||
|
||
}, {
|
||
key: "clearMultiSelection",
|
||
value: function clearMultiSelection() {
|
||
var _this$props3 = this.props,
|
||
hasMultiSelection = _this$props3.hasMultiSelection,
|
||
clearSelectedBlock = _this$props3.clearSelectedBlock;
|
||
|
||
if (hasMultiSelection) {
|
||
clearSelectedBlock();
|
||
window.getSelection().removeAllRanges();
|
||
}
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _ref;
|
||
|
||
var selectedBlockClientIds = this.props.selectedBlockClientIds;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["KeyboardShortcuts"], {
|
||
shortcuts: (_ref = {}, Object(defineProperty["a" /* default */])(_ref, external_this_wp_keycodes_["rawShortcut"].primary('a'), this.selectAll), Object(defineProperty["a" /* default */])(_ref, "backspace", this.deleteSelectedBlocks), Object(defineProperty["a" /* default */])(_ref, "del", this.deleteSelectedBlocks), Object(defineProperty["a" /* default */])(_ref, "escape", this.clearMultiSelection), _ref)
|
||
}), selectedBlockClientIds.length > 0 && Object(external_this_wp_element_["createElement"])(block_actions, {
|
||
clientIds: selectedBlockClientIds
|
||
}, function (_ref2) {
|
||
var _ref3;
|
||
|
||
var onDuplicate = _ref2.onDuplicate,
|
||
onRemove = _ref2.onRemove,
|
||
onInsertAfter = _ref2.onInsertAfter,
|
||
onInsertBefore = _ref2.onInsertBefore;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["KeyboardShortcuts"], {
|
||
bindGlobal: true,
|
||
shortcuts: (_ref3 = {}, Object(defineProperty["a" /* default */])(_ref3, shortcuts.duplicate.raw, Object(external_lodash_["flow"])(preventDefault, onDuplicate)), Object(defineProperty["a" /* default */])(_ref3, shortcuts.removeBlock.raw, Object(external_lodash_["flow"])(preventDefault, onRemove)), Object(defineProperty["a" /* default */])(_ref3, shortcuts.insertBefore.raw, Object(external_lodash_["flow"])(preventDefault, onInsertBefore)), Object(defineProperty["a" /* default */])(_ref3, shortcuts.insertAfter.raw, Object(external_lodash_["flow"])(preventDefault, onInsertAfter)), _ref3)
|
||
});
|
||
}));
|
||
}
|
||
}]);
|
||
|
||
return BlockEditorKeyboardShortcuts;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var block_editor_keyboard_shortcuts = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getBlockOrder = _select.getBlockOrder,
|
||
getSelectedBlockClientIds = _select.getSelectedBlockClientIds,
|
||
hasMultiSelection = _select.hasMultiSelection,
|
||
getBlockRootClientId = _select.getBlockRootClientId,
|
||
getTemplateLock = _select.getTemplateLock;
|
||
|
||
var selectedBlockClientIds = getSelectedBlockClientIds();
|
||
return {
|
||
rootBlocksClientIds: getBlockOrder(),
|
||
hasMultiSelection: hasMultiSelection(),
|
||
isLocked: Object(external_lodash_["some"])(selectedBlockClientIds, function (clientId) {
|
||
return !!getTemplateLock(getBlockRootClientId(clientId));
|
||
}),
|
||
selectedBlockClientIds: selectedBlockClientIds
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
clearSelectedBlock = _dispatch.clearSelectedBlock,
|
||
multiSelect = _dispatch.multiSelect,
|
||
removeBlocks = _dispatch.removeBlocks;
|
||
|
||
return {
|
||
clearSelectedBlock: clearSelectedBlock,
|
||
onMultiSelect: multiSelect,
|
||
onRemove: removeBlocks
|
||
};
|
||
})])(block_editor_keyboard_shortcuts_BlockEditorKeyboardShortcuts));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/skip-to-selected-block/index.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var skip_to_selected_block_SkipToSelectedBlock = function SkipToSelectedBlock(_ref) {
|
||
var selectedBlockClientId = _ref.selectedBlockClientId;
|
||
|
||
var onClick = function onClick() {
|
||
var selectedBlockElement = getBlockFocusableWrapper(selectedBlockClientId);
|
||
selectedBlockElement.focus();
|
||
};
|
||
|
||
return selectedBlockClientId && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
|
||
isDefault: true,
|
||
type: "button",
|
||
className: "editor-skip-to-selected-block block-editor-skip-to-selected-block",
|
||
onClick: onClick
|
||
}, Object(external_this_wp_i18n_["__"])('Skip to the selected block'));
|
||
};
|
||
|
||
/* harmony default export */ var skip_to_selected_block = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
return {
|
||
selectedBlockClientId: select('core/block-editor').getBlockSelectionStart()
|
||
};
|
||
})(skip_to_selected_block_SkipToSelectedBlock));
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","tokenList"]}
|
||
var external_this_wp_tokenList_ = __webpack_require__(158);
|
||
var external_this_wp_tokenList_default = /*#__PURE__*/__webpack_require__.n(external_this_wp_tokenList_);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-styles/index.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Returns the active style from the given className.
|
||
*
|
||
* @param {Array} styles Block style variations.
|
||
* @param {string} className Class name
|
||
*
|
||
* @return {Object?} The active style.
|
||
*/
|
||
|
||
function getActiveStyle(styles, className) {
|
||
var _iteratorNormalCompletion = true;
|
||
var _didIteratorError = false;
|
||
var _iteratorError = undefined;
|
||
|
||
try {
|
||
for (var _iterator = new external_this_wp_tokenList_default.a(className).values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
||
var style = _step.value;
|
||
|
||
if (style.indexOf('is-style-') === -1) {
|
||
continue;
|
||
}
|
||
|
||
var potentialStyleName = style.substring(9);
|
||
var activeStyle = Object(external_lodash_["find"])(styles, {
|
||
name: potentialStyleName
|
||
});
|
||
|
||
if (activeStyle) {
|
||
return activeStyle;
|
||
}
|
||
}
|
||
} catch (err) {
|
||
_didIteratorError = true;
|
||
_iteratorError = err;
|
||
} finally {
|
||
try {
|
||
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
||
_iterator.return();
|
||
}
|
||
} finally {
|
||
if (_didIteratorError) {
|
||
throw _iteratorError;
|
||
}
|
||
}
|
||
}
|
||
|
||
return Object(external_lodash_["find"])(styles, 'isDefault');
|
||
}
|
||
/**
|
||
* Replaces the active style in the block's className.
|
||
*
|
||
* @param {string} className Class name.
|
||
* @param {Object?} activeStyle The replaced style.
|
||
* @param {Object} newStyle The replacing style.
|
||
*
|
||
* @return {string} The updated className.
|
||
*/
|
||
|
||
function replaceActiveStyle(className, activeStyle, newStyle) {
|
||
var list = new external_this_wp_tokenList_default.a(className);
|
||
|
||
if (activeStyle) {
|
||
list.remove('is-style-' + activeStyle.name);
|
||
}
|
||
|
||
list.add('is-style-' + newStyle.name);
|
||
return list.value;
|
||
}
|
||
|
||
function BlockStyles(_ref) {
|
||
var styles = _ref.styles,
|
||
className = _ref.className,
|
||
onChangeClassName = _ref.onChangeClassName,
|
||
type = _ref.type,
|
||
block = _ref.block,
|
||
_ref$onSwitch = _ref.onSwitch,
|
||
onSwitch = _ref$onSwitch === void 0 ? external_lodash_["noop"] : _ref$onSwitch,
|
||
_ref$onHoverClassName = _ref.onHoverClassName,
|
||
onHoverClassName = _ref$onHoverClassName === void 0 ? external_lodash_["noop"] : _ref$onHoverClassName;
|
||
|
||
if (!styles || styles.length === 0) {
|
||
return null;
|
||
}
|
||
|
||
if (!type.styles && !Object(external_lodash_["find"])(styles, 'isDefault')) {
|
||
styles = [{
|
||
name: 'default',
|
||
label: Object(external_this_wp_i18n_["_x"])('Default', 'block style'),
|
||
isDefault: true
|
||
}].concat(Object(toConsumableArray["a" /* default */])(styles));
|
||
}
|
||
|
||
var activeStyle = getActiveStyle(styles, className);
|
||
|
||
function updateClassName(style) {
|
||
var updatedClassName = replaceActiveStyle(className, activeStyle, style);
|
||
onChangeClassName(updatedClassName);
|
||
onHoverClassName(null);
|
||
onSwitch();
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-styles block-editor-block-styles"
|
||
}, styles.map(function (style) {
|
||
var styleClassName = replaceActiveStyle(className, activeStyle, style);
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
key: style.name,
|
||
className: classnames_default()('editor-block-styles__item block-editor-block-styles__item', {
|
||
'is-active': activeStyle === style
|
||
}),
|
||
onClick: function onClick() {
|
||
return updateClassName(style);
|
||
},
|
||
onKeyDown: function onKeyDown(event) {
|
||
if (external_this_wp_keycodes_["ENTER"] === event.keyCode || external_this_wp_keycodes_["SPACE"] === event.keyCode) {
|
||
event.preventDefault();
|
||
updateClassName(style);
|
||
}
|
||
},
|
||
onMouseEnter: function onMouseEnter() {
|
||
return onHoverClassName(styleClassName);
|
||
},
|
||
onMouseLeave: function onMouseLeave() {
|
||
return onHoverClassName(null);
|
||
},
|
||
role: "button",
|
||
tabIndex: "0",
|
||
"aria-label": style.label || style.name
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-styles__item-preview block-editor-block-styles__item-preview"
|
||
}, Object(external_this_wp_element_["createElement"])(block_preview, {
|
||
viewportWidth: 500,
|
||
blocks: type.example ? Object(external_this_wp_blocks_["getBlockFromExample"])(block.name, {
|
||
attributes: Object(objectSpread["a" /* default */])({}, type.example.attributes, {
|
||
className: styleClassName
|
||
}),
|
||
innerBlocks: type.example.innerBlocks
|
||
}) : Object(external_this_wp_blocks_["cloneBlock"])(block, {
|
||
className: styleClassName
|
||
})
|
||
})), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-styles__item-label block-editor-block-styles__item-label"
|
||
}, style.label || style.name));
|
||
}));
|
||
}
|
||
|
||
/* harmony default export */ var block_styles = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select, _ref2) {
|
||
var clientId = _ref2.clientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlock = _select.getBlock;
|
||
|
||
var _select2 = select('core/blocks'),
|
||
getBlockStyles = _select2.getBlockStyles;
|
||
|
||
var block = getBlock(clientId);
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(block.name);
|
||
return {
|
||
block: block,
|
||
className: block.attributes.className || '',
|
||
styles: getBlockStyles(block.name),
|
||
type: blockType
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref3) {
|
||
var clientId = _ref3.clientId;
|
||
return {
|
||
onChangeClassName: function onChangeClassName(newClassName) {
|
||
dispatch('core/block-editor').updateBlockAttributes(clientId, {
|
||
className: newClassName
|
||
});
|
||
}
|
||
};
|
||
})])(BlockStyles));
|
||
|
||
// EXTERNAL MODULE: external {"this":["wp","wordcount"]}
|
||
var external_this_wp_wordcount_ = __webpack_require__(104);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/multi-selection-inspector/index.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
function MultiSelectionInspector(_ref) {
|
||
var blocks = _ref.blocks;
|
||
var words = Object(external_this_wp_wordcount_["count"])(Object(external_this_wp_blocks_["serialize"])(blocks), 'words');
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-multi-selection-inspector__card block-editor-multi-selection-inspector__card"
|
||
}, Object(external_this_wp_element_["createElement"])(BlockIcon, {
|
||
icon: Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
viewBox: "0 0 24 24"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"
|
||
})),
|
||
showColors: true
|
||
}), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-multi-selection-inspector__card-content block-editor-multi-selection-inspector__card-content"
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-multi-selection-inspector__card-title block-editor-multi-selection-inspector__card-title"
|
||
},
|
||
/* translators: %d: number of blocks */
|
||
Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["_n"])('%d block', '%d blocks', blocks.length), blocks.length)), Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-multi-selection-inspector__card-description block-editor-multi-selection-inspector__card-description"
|
||
},
|
||
/* translators: %d: number of words */
|
||
Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["_n"])('%d word', '%d words', words), words))));
|
||
}
|
||
|
||
/* harmony default export */ var multi_selection_inspector = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getMultiSelectedBlocks = _select.getMultiSelectedBlocks;
|
||
|
||
return {
|
||
blocks: getMultiSelectedBlocks()
|
||
};
|
||
})(MultiSelectionInspector));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/default-style-picker/index.js
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
function DefaultStylePicker(_ref) {
|
||
var blockName = _ref.blockName;
|
||
|
||
var _useSelect = Object(external_this_wp_data_["useSelect"])(function (select) {
|
||
var settings = select('core/block-editor').getSettings();
|
||
var preferredStyleVariations = settings.__experimentalPreferredStyleVariations;
|
||
return {
|
||
preferredStyle: Object(external_lodash_["get"])(preferredStyleVariations, ['value', blockName]),
|
||
onUpdatePreferredStyleVariations: Object(external_lodash_["get"])(preferredStyleVariations, ['onChange'], null),
|
||
styles: select('core/blocks').getBlockStyles(blockName)
|
||
};
|
||
}, [blockName]),
|
||
preferredStyle = _useSelect.preferredStyle,
|
||
onUpdatePreferredStyleVariations = _useSelect.onUpdatePreferredStyleVariations,
|
||
styles = _useSelect.styles;
|
||
|
||
var selectOptions = Object(external_this_wp_element_["useMemo"])(function () {
|
||
return [{
|
||
label: Object(external_this_wp_i18n_["__"])('Not set'),
|
||
value: ''
|
||
}].concat(Object(toConsumableArray["a" /* default */])(styles.map(function (_ref2) {
|
||
var label = _ref2.label,
|
||
name = _ref2.name;
|
||
return {
|
||
label: label,
|
||
value: name
|
||
};
|
||
})));
|
||
}, [styles]);
|
||
var selectOnChange = Object(external_this_wp_element_["useCallback"])(function (blockStyle) {
|
||
onUpdatePreferredStyleVariations(blockName, blockStyle);
|
||
}, [blockName, onUpdatePreferredStyleVariations]);
|
||
return onUpdatePreferredStyleVariations && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SelectControl"], {
|
||
options: selectOptions,
|
||
value: preferredStyle || '',
|
||
label: Object(external_this_wp_i18n_["__"])('Default Style'),
|
||
onChange: selectOnChange
|
||
});
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-inspector/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
var block_inspector_BlockInspector = function BlockInspector(_ref) {
|
||
var blockType = _ref.blockType,
|
||
count = _ref.count,
|
||
hasBlockStyles = _ref.hasBlockStyles,
|
||
selectedBlockClientId = _ref.selectedBlockClientId,
|
||
selectedBlockName = _ref.selectedBlockName,
|
||
_ref$showNoBlockSelec = _ref.showNoBlockSelectedMessage,
|
||
showNoBlockSelectedMessage = _ref$showNoBlockSelec === void 0 ? true : _ref$showNoBlockSelec;
|
||
|
||
if (count > 1) {
|
||
return Object(external_this_wp_element_["createElement"])(multi_selection_inspector, null);
|
||
}
|
||
|
||
var isSelectedBlockUnregistered = selectedBlockName === Object(external_this_wp_blocks_["getUnregisteredTypeHandlerName"])();
|
||
/*
|
||
* If the selected block is of an unregistered type, avoid showing it as an actual selection
|
||
* because we want the user to focus on the unregistered block warning, not block settings.
|
||
*/
|
||
|
||
if (!blockType || !selectedBlockClientId || isSelectedBlockUnregistered) {
|
||
if (showNoBlockSelectedMessage) {
|
||
return Object(external_this_wp_element_["createElement"])("span", {
|
||
className: "editor-block-inspector__no-blocks block-editor-block-inspector__no-blocks"
|
||
}, Object(external_this_wp_i18n_["__"])('No block selected.'));
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(block_card, {
|
||
blockType: blockType
|
||
}), hasBlockStyles && Object(external_this_wp_element_["createElement"])("div", null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["PanelBody"], {
|
||
title: Object(external_this_wp_i18n_["__"])('Styles'),
|
||
initialOpen: false
|
||
}, Object(external_this_wp_element_["createElement"])(block_styles, {
|
||
clientId: selectedBlockClientId
|
||
}), Object(external_this_wp_element_["createElement"])(DefaultStylePicker, {
|
||
blockName: blockType.name
|
||
}))), Object(external_this_wp_element_["createElement"])("div", null, Object(external_this_wp_element_["createElement"])(inspector_controls.Slot, null)), Object(external_this_wp_element_["createElement"])("div", null, Object(external_this_wp_element_["createElement"])(inspector_advanced_controls.Slot, null, function (fills) {
|
||
return !Object(external_lodash_["isEmpty"])(fills) && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["PanelBody"], {
|
||
className: "editor-block-inspector__advanced block-editor-block-inspector__advanced",
|
||
title: Object(external_this_wp_i18n_["__"])('Advanced'),
|
||
initialOpen: false
|
||
}, fills);
|
||
})), Object(external_this_wp_element_["createElement"])(skip_to_selected_block, {
|
||
key: "back"
|
||
}));
|
||
};
|
||
|
||
/* harmony default export */ var block_inspector = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSelectedBlockClientId = _select.getSelectedBlockClientId,
|
||
getSelectedBlockCount = _select.getSelectedBlockCount,
|
||
getBlockName = _select.getBlockName;
|
||
|
||
var _select2 = select('core/blocks'),
|
||
getBlockStyles = _select2.getBlockStyles;
|
||
|
||
var selectedBlockClientId = getSelectedBlockClientId();
|
||
var selectedBlockName = selectedBlockClientId && getBlockName(selectedBlockClientId);
|
||
var blockType = selectedBlockClientId && Object(external_this_wp_blocks_["getBlockType"])(selectedBlockName);
|
||
var blockStyles = selectedBlockClientId && getBlockStyles(selectedBlockName);
|
||
return {
|
||
count: getSelectedBlockCount(),
|
||
hasBlockStyles: blockStyles && blockStyles.length > 0,
|
||
selectedBlockName: selectedBlockName,
|
||
selectedBlockClientId: selectedBlockClientId,
|
||
blockType: blockType
|
||
};
|
||
})(block_inspector_BlockInspector));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-selection-clearer/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
var block_selection_clearer_BlockSelectionClearer =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockSelectionClearer, _Component);
|
||
|
||
function BlockSelectionClearer() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockSelectionClearer);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockSelectionClearer).apply(this, arguments));
|
||
_this.bindContainer = _this.bindContainer.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.clearSelectionIfFocusTarget = _this.clearSelectionIfFocusTarget.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockSelectionClearer, [{
|
||
key: "bindContainer",
|
||
value: function bindContainer(ref) {
|
||
this.container = ref;
|
||
}
|
||
/**
|
||
* Clears the selected block on focus if the container is the target of the
|
||
* focus. This assumes no other descendents have received focus until event
|
||
* has bubbled to the container.
|
||
*
|
||
* @param {FocusEvent} event Focus event.
|
||
*/
|
||
|
||
}, {
|
||
key: "clearSelectionIfFocusTarget",
|
||
value: function clearSelectionIfFocusTarget(event) {
|
||
var _this$props = this.props,
|
||
hasSelectedBlock = _this$props.hasSelectedBlock,
|
||
hasMultiSelection = _this$props.hasMultiSelection,
|
||
clearSelectedBlock = _this$props.clearSelectedBlock;
|
||
var hasSelection = hasSelectedBlock || hasMultiSelection;
|
||
|
||
if (event.target === this.container && hasSelection) {
|
||
clearSelectedBlock();
|
||
}
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
return Object(external_this_wp_element_["createElement"])("div", Object(esm_extends["a" /* default */])({
|
||
tabIndex: -1,
|
||
onFocus: this.clearSelectionIfFocusTarget,
|
||
ref: this.bindContainer
|
||
}, Object(external_lodash_["omit"])(this.props, ['clearSelectedBlock', 'hasSelectedBlock', 'hasMultiSelection'])));
|
||
}
|
||
}]);
|
||
|
||
return BlockSelectionClearer;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var block_selection_clearer = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
hasSelectedBlock = _select.hasSelectedBlock,
|
||
hasMultiSelection = _select.hasMultiSelection;
|
||
|
||
return {
|
||
hasSelectedBlock: hasSelectedBlock(),
|
||
hasMultiSelection: hasMultiSelection()
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
clearSelectedBlock = _dispatch.clearSelectedBlock;
|
||
|
||
return {
|
||
clearSelectedBlock: clearSelectedBlock
|
||
};
|
||
})])(block_selection_clearer_BlockSelectionClearer));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-mode-toggle.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
function BlockModeToggle(_ref) {
|
||
var blockType = _ref.blockType,
|
||
mode = _ref.mode,
|
||
onToggleMode = _ref.onToggleMode,
|
||
_ref$small = _ref.small,
|
||
small = _ref$small === void 0 ? false : _ref$small,
|
||
_ref$isCodeEditingEna = _ref.isCodeEditingEnabled,
|
||
isCodeEditingEnabled = _ref$isCodeEditingEna === void 0 ? true : _ref$isCodeEditingEna;
|
||
|
||
if (!Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'html', true) || !isCodeEditingEnabled) {
|
||
return null;
|
||
}
|
||
|
||
var label = mode === 'visual' ? Object(external_this_wp_i18n_["__"])('Edit as HTML') : Object(external_this_wp_i18n_["__"])('Edit visually');
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuItem"], {
|
||
className: "editor-block-settings-menu__control block-editor-block-settings-menu__control",
|
||
onClick: onToggleMode,
|
||
icon: "html"
|
||
}, !small && label);
|
||
}
|
||
/* harmony default export */ var block_mode_toggle = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select, _ref2) {
|
||
var clientId = _ref2.clientId;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlock = _select.getBlock,
|
||
getBlockMode = _select.getBlockMode,
|
||
getSettings = _select.getSettings;
|
||
|
||
var block = getBlock(clientId);
|
||
var isCodeEditingEnabled = getSettings().codeEditingEnabled;
|
||
return {
|
||
mode: getBlockMode(clientId),
|
||
blockType: block ? Object(external_this_wp_blocks_["getBlockType"])(block.name) : null,
|
||
isCodeEditingEnabled: isCodeEditingEnabled
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref3) {
|
||
var _ref3$onToggle = _ref3.onToggle,
|
||
onToggle = _ref3$onToggle === void 0 ? external_lodash_["noop"] : _ref3$onToggle,
|
||
clientId = _ref3.clientId;
|
||
return {
|
||
onToggleMode: function onToggleMode() {
|
||
dispatch('core/block-editor').toggleBlockMode(clientId);
|
||
onToggle();
|
||
}
|
||
};
|
||
})])(BlockModeToggle));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-convert-button.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
function BlockConvertButton(_ref) {
|
||
var shouldRender = _ref.shouldRender,
|
||
onClick = _ref.onClick,
|
||
small = _ref.small;
|
||
|
||
if (!shouldRender) {
|
||
return null;
|
||
}
|
||
|
||
var label = Object(external_this_wp_i18n_["__"])('Convert to Blocks');
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuItem"], {
|
||
className: "editor-block-settings-menu__control block-editor-block-settings-menu__control",
|
||
onClick: onClick,
|
||
icon: "screenoptions"
|
||
}, !small && label);
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-html-convert-button.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var block_html_convert_button = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withSelect"])(function (select, _ref) {
|
||
var clientId = _ref.clientId;
|
||
var block = select('core/block-editor').getBlock(clientId);
|
||
return {
|
||
block: block,
|
||
shouldRender: block && block.name === 'core/html'
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref2) {
|
||
var block = _ref2.block;
|
||
return {
|
||
onClick: function onClick() {
|
||
return dispatch('core/block-editor').replaceBlocks(block.clientId, Object(external_this_wp_blocks_["rawHandler"])({
|
||
HTML: Object(external_this_wp_blocks_["getBlockContent"])(block)
|
||
}));
|
||
}
|
||
};
|
||
}))(BlockConvertButton));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-unknown-convert-button.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var block_unknown_convert_button = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withSelect"])(function (select, _ref) {
|
||
var clientId = _ref.clientId;
|
||
var block = select('core/block-editor').getBlock(clientId);
|
||
return {
|
||
block: block,
|
||
shouldRender: block && block.name === Object(external_this_wp_blocks_["getFreeformContentHandlerName"])()
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref2) {
|
||
var block = _ref2.block;
|
||
return {
|
||
onClick: function onClick() {
|
||
return dispatch('core/block-editor').replaceBlocks(block.clientId, Object(external_this_wp_blocks_["rawHandler"])({
|
||
HTML: Object(external_this_wp_blocks_["serialize"])(block)
|
||
}));
|
||
}
|
||
};
|
||
}))(BlockConvertButton));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/index.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
var block_settings_menu_POPOVER_PROPS = {
|
||
className: 'block-editor-block-settings-menu__popover editor-block-settings-menu__popover',
|
||
position: 'bottom right'
|
||
};
|
||
function BlockSettingsMenu(_ref) {
|
||
var clientIds = _ref.clientIds;
|
||
var blockClientIds = Object(external_lodash_["castArray"])(clientIds);
|
||
var count = blockClientIds.length;
|
||
var firstBlockClientId = blockClientIds[0];
|
||
return Object(external_this_wp_element_["createElement"])(block_actions, {
|
||
clientIds: clientIds
|
||
}, function (_ref2) {
|
||
var canDuplicate = _ref2.canDuplicate,
|
||
canInsertDefaultBlock = _ref2.canInsertDefaultBlock,
|
||
isLocked = _ref2.isLocked,
|
||
onDuplicate = _ref2.onDuplicate,
|
||
onInsertAfter = _ref2.onInsertAfter,
|
||
onInsertBefore = _ref2.onInsertBefore,
|
||
onRemove = _ref2.onRemove;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["DropdownMenu"], {
|
||
icon: "ellipsis",
|
||
label: Object(external_this_wp_i18n_["__"])('More options'),
|
||
className: "block-editor-block-settings-menu",
|
||
popoverProps: block_settings_menu_POPOVER_PROPS
|
||
}, function (_ref3) {
|
||
var onClose = _ref3.onClose;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuGroup"], null, Object(external_this_wp_element_["createElement"])(block_settings_menu_first_item.Slot, {
|
||
fillProps: {
|
||
onClose: onClose
|
||
}
|
||
}), count === 1 && Object(external_this_wp_element_["createElement"])(block_unknown_convert_button, {
|
||
clientId: firstBlockClientId
|
||
}), count === 1 && Object(external_this_wp_element_["createElement"])(block_html_convert_button, {
|
||
clientId: firstBlockClientId
|
||
}), canDuplicate && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuItem"], {
|
||
className: "editor-block-settings-menu__control block-editor-block-settings-menu__control",
|
||
onClick: Object(external_lodash_["flow"])(onClose, onDuplicate),
|
||
icon: "admin-page",
|
||
shortcut: shortcuts.duplicate.display
|
||
}, Object(external_this_wp_i18n_["__"])('Duplicate')), canInsertDefaultBlock && Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuItem"], {
|
||
className: "editor-block-settings-menu__control block-editor-block-settings-menu__control",
|
||
onClick: Object(external_lodash_["flow"])(onClose, onInsertBefore),
|
||
icon: "insert-before",
|
||
shortcut: shortcuts.insertBefore.display
|
||
}, Object(external_this_wp_i18n_["__"])('Insert Before')), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuItem"], {
|
||
className: "editor-block-settings-menu__control block-editor-block-settings-menu__control",
|
||
onClick: Object(external_lodash_["flow"])(onClose, onInsertAfter),
|
||
icon: "insert-after",
|
||
shortcut: shortcuts.insertAfter.display
|
||
}, Object(external_this_wp_i18n_["__"])('Insert After'))), count === 1 && Object(external_this_wp_element_["createElement"])(block_mode_toggle, {
|
||
clientId: firstBlockClientId,
|
||
onToggle: onClose
|
||
}), Object(external_this_wp_element_["createElement"])(block_settings_menu_plugins_extension.Slot, {
|
||
fillProps: {
|
||
clientIds: clientIds,
|
||
onClose: onClose
|
||
}
|
||
})), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuGroup"], null, !isLocked && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["MenuItem"], {
|
||
className: "editor-block-settings-menu__control block-editor-block-settings-menu__control",
|
||
onClick: Object(external_lodash_["flow"])(onClose, onRemove),
|
||
icon: "trash",
|
||
shortcut: shortcuts.removeBlock.display
|
||
}, Object(external_this_wp_i18n_["__"])('Remove Block'))));
|
||
}));
|
||
});
|
||
}
|
||
/* harmony default export */ var block_settings_menu = (BlockSettingsMenu);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
var block_switcher_BlockSwitcher =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(BlockSwitcher, _Component);
|
||
|
||
function BlockSwitcher() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, BlockSwitcher);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockSwitcher).apply(this, arguments));
|
||
_this.state = {
|
||
hoveredClassName: null
|
||
};
|
||
_this.onHoverClassName = _this.onHoverClassName.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(BlockSwitcher, [{
|
||
key: "onHoverClassName",
|
||
value: function onHoverClassName(className) {
|
||
this.setState({
|
||
hoveredClassName: className
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var _this2 = this;
|
||
|
||
var _this$props = this.props,
|
||
blocks = _this$props.blocks,
|
||
onTransform = _this$props.onTransform,
|
||
inserterItems = _this$props.inserterItems,
|
||
hasBlockStyles = _this$props.hasBlockStyles;
|
||
var hoveredClassName = this.state.hoveredClassName;
|
||
|
||
if (!blocks || !blocks.length) {
|
||
return null;
|
||
}
|
||
|
||
var hoveredBlock = hoveredClassName ? blocks[0] : null;
|
||
var hoveredBlockType = hoveredClassName ? Object(external_this_wp_blocks_["getBlockType"])(hoveredBlock.name) : null;
|
||
var itemsByName = Object(external_lodash_["mapKeys"])(inserterItems, function (_ref) {
|
||
var name = _ref.name;
|
||
return name;
|
||
});
|
||
var possibleBlockTransformations = Object(external_lodash_["orderBy"])(Object(external_lodash_["filter"])(Object(external_this_wp_blocks_["getPossibleBlockTransformations"])(blocks), function (block) {
|
||
return block && !!itemsByName[block.name];
|
||
}), function (block) {
|
||
return itemsByName[block.name].frecency;
|
||
}, 'desc'); // When selection consists of blocks of multiple types, display an
|
||
// appropriate icon to communicate the non-uniformity.
|
||
|
||
var isSelectionOfSameType = Object(external_lodash_["uniq"])(Object(external_lodash_["map"])(blocks, 'name')).length === 1;
|
||
var icon;
|
||
|
||
if (isSelectionOfSameType) {
|
||
var sourceBlockName = blocks[0].name;
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(sourceBlockName);
|
||
icon = blockType.icon;
|
||
} else {
|
||
icon = 'layout';
|
||
}
|
||
|
||
if (!hasBlockStyles && !possibleBlockTransformations.length) {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
disabled: true,
|
||
className: "editor-block-switcher__no-switcher-icon block-editor-block-switcher__no-switcher-icon",
|
||
label: Object(external_this_wp_i18n_["__"])('Block icon'),
|
||
icon: Object(external_this_wp_element_["createElement"])(BlockIcon, {
|
||
icon: icon,
|
||
showColors: true
|
||
})
|
||
}));
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Dropdown"], {
|
||
position: "bottom right",
|
||
className: "editor-block-switcher block-editor-block-switcher",
|
||
contentClassName: "editor-block-switcher__popover block-editor-block-switcher__popover",
|
||
renderToggle: function renderToggle(_ref2) {
|
||
var onToggle = _ref2.onToggle,
|
||
isOpen = _ref2.isOpen;
|
||
|
||
var openOnArrowDown = function openOnArrowDown(event) {
|
||
if (!isOpen && event.keyCode === external_this_wp_keycodes_["DOWN"]) {
|
||
event.preventDefault();
|
||
event.stopPropagation();
|
||
onToggle();
|
||
}
|
||
};
|
||
|
||
var label = 1 === blocks.length ? Object(external_this_wp_i18n_["__"])('Change block type or style') : Object(external_this_wp_i18n_["sprintf"])(Object(external_this_wp_i18n_["_n"])('Change type of %d block', 'Change type of %d blocks', blocks.length), blocks.length);
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
|
||
className: "editor-block-switcher__toggle block-editor-block-switcher__toggle",
|
||
onClick: onToggle,
|
||
"aria-haspopup": "true",
|
||
"aria-expanded": isOpen,
|
||
label: label,
|
||
tooltip: label,
|
||
onKeyDown: openOnArrowDown,
|
||
icon: Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(BlockIcon, {
|
||
icon: icon,
|
||
showColors: true
|
||
}), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
|
||
className: "editor-block-switcher__transform block-editor-block-switcher__transform",
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
viewBox: "0 0 24 24"
|
||
}, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
|
||
d: "M6.5 8.9c.6-.6 1.4-.9 2.2-.9h6.9l-1.3 1.3 1.4 1.4L19.4 7l-3.7-3.7-1.4 1.4L15.6 6H8.7c-1.4 0-2.6.5-3.6 1.5l-2.8 2.8 1.4 1.4 2.8-2.8zm13.8 2.4l-2.8 2.8c-.6.6-1.3.9-2.1.9h-7l1.3-1.3-1.4-1.4L4.6 16l3.7 3.7 1.4-1.4L8.4 17h6.9c1.3 0 2.6-.5 3.5-1.5l2.8-2.8-1.3-1.4z"
|
||
})))
|
||
}));
|
||
},
|
||
renderContent: function renderContent(_ref3) {
|
||
var onClose = _ref3.onClose;
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, (hasBlockStyles || possibleBlockTransformations.length !== 0) && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-block-switcher__container"
|
||
}, hasBlockStyles && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["PanelBody"], {
|
||
title: Object(external_this_wp_i18n_["__"])('Block Styles'),
|
||
initialOpen: true
|
||
}, Object(external_this_wp_element_["createElement"])(block_styles, {
|
||
clientId: blocks[0].clientId,
|
||
onSwitch: onClose,
|
||
onHoverClassName: _this2.onHoverClassName
|
||
})), possibleBlockTransformations.length !== 0 && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["PanelBody"], {
|
||
title: Object(external_this_wp_i18n_["__"])('Transform To:'),
|
||
initialOpen: true
|
||
}, Object(external_this_wp_element_["createElement"])(block_types_list, {
|
||
items: possibleBlockTransformations.map(function (destinationBlockType) {
|
||
return {
|
||
id: destinationBlockType.name,
|
||
icon: destinationBlockType.icon,
|
||
title: destinationBlockType.title
|
||
};
|
||
}),
|
||
onSelect: function onSelect(item) {
|
||
onTransform(blocks, item.id);
|
||
onClose();
|
||
}
|
||
}))), hoveredClassName !== null && Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-block-switcher__preview"
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "block-editor-block-switcher__preview-title"
|
||
}, Object(external_this_wp_i18n_["__"])('Preview')), Object(external_this_wp_element_["createElement"])(block_preview, {
|
||
viewportWidth: 500,
|
||
blocks: hoveredBlockType.example ? Object(external_this_wp_blocks_["getBlockFromExample"])(hoveredBlock.name, {
|
||
attributes: Object(objectSpread["a" /* default */])({}, hoveredBlockType.example.attributes, {
|
||
className: hoveredClassName
|
||
}),
|
||
innerBlocks: hoveredBlockType.example.innerBlocks
|
||
}) : Object(external_this_wp_blocks_["cloneBlock"])(hoveredBlock, {
|
||
className: hoveredClassName
|
||
})
|
||
})));
|
||
}
|
||
});
|
||
}
|
||
}]);
|
||
|
||
return BlockSwitcher;
|
||
}(external_this_wp_element_["Component"]);
|
||
/* harmony default export */ var block_switcher = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withSelect"])(function (select, _ref4) {
|
||
var clientIds = _ref4.clientIds;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlocksByClientId = _select.getBlocksByClientId,
|
||
getBlockRootClientId = _select.getBlockRootClientId,
|
||
getInserterItems = _select.getInserterItems;
|
||
|
||
var _select2 = select('core/blocks'),
|
||
getBlockStyles = _select2.getBlockStyles;
|
||
|
||
var rootClientId = getBlockRootClientId(Object(external_lodash_["first"])(Object(external_lodash_["castArray"])(clientIds)));
|
||
var blocks = getBlocksByClientId(clientIds);
|
||
var firstBlock = blocks && blocks.length === 1 ? blocks[0] : null;
|
||
var styles = firstBlock && getBlockStyles(firstBlock.name);
|
||
return {
|
||
blocks: blocks,
|
||
inserterItems: getInserterItems(rootClientId),
|
||
hasBlockStyles: styles && styles.length > 0
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps) {
|
||
return {
|
||
onTransform: function onTransform(blocks, name) {
|
||
dispatch('core/block-editor').replaceBlocks(ownProps.clientIds, Object(external_this_wp_blocks_["switchToBlockType"])(blocks, name));
|
||
}
|
||
};
|
||
}))(block_switcher_BlockSwitcher));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/multi-blocks-switcher.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
function MultiBlocksSwitcher(_ref) {
|
||
var isMultiBlockSelection = _ref.isMultiBlockSelection,
|
||
selectedBlockClientIds = _ref.selectedBlockClientIds;
|
||
|
||
if (!isMultiBlockSelection) {
|
||
return null;
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(block_switcher, {
|
||
key: "switcher",
|
||
clientIds: selectedBlockClientIds
|
||
});
|
||
}
|
||
/* harmony default export */ var multi_blocks_switcher = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var selectedBlockClientIds = select('core/block-editor').getMultiSelectedBlockClientIds();
|
||
return {
|
||
isMultiBlockSelection: selectedBlockClientIds.length > 1,
|
||
selectedBlockClientIds: selectedBlockClientIds
|
||
};
|
||
})(MultiBlocksSwitcher));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/index.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
function BlockToolbar(_ref) {
|
||
var blockClientIds = _ref.blockClientIds,
|
||
isValid = _ref.isValid,
|
||
mode = _ref.mode;
|
||
|
||
if (blockClientIds.length === 0) {
|
||
return null;
|
||
}
|
||
|
||
if (blockClientIds.length > 1) {
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-toolbar block-editor-block-toolbar"
|
||
}, Object(external_this_wp_element_["createElement"])(multi_blocks_switcher, null), Object(external_this_wp_element_["createElement"])(block_settings_menu, {
|
||
clientIds: blockClientIds
|
||
}));
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-block-toolbar block-editor-block-toolbar"
|
||
}, mode === 'visual' && isValid && Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(block_switcher, {
|
||
clientIds: blockClientIds
|
||
}), Object(external_this_wp_element_["createElement"])(block_controls.Slot, {
|
||
bubblesVirtually: true,
|
||
className: "block-editor-block-toolbar__slot"
|
||
}), Object(external_this_wp_element_["createElement"])(block_format_controls.Slot, {
|
||
bubblesVirtually: true,
|
||
className: "block-editor-block-toolbar__slot"
|
||
})), Object(external_this_wp_element_["createElement"])(block_settings_menu, {
|
||
clientIds: blockClientIds
|
||
}));
|
||
}
|
||
|
||
/* harmony default export */ var block_toolbar = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getBlockMode = _select.getBlockMode,
|
||
getSelectedBlockClientIds = _select.getSelectedBlockClientIds,
|
||
isBlockValid = _select.isBlockValid;
|
||
|
||
var blockClientIds = getSelectedBlockClientIds();
|
||
return {
|
||
blockClientIds: blockClientIds,
|
||
isValid: blockClientIds.length === 1 ? isBlockValid(blockClientIds[0]) : null,
|
||
mode: blockClientIds.length === 1 ? getBlockMode(blockClientIds[0]) : null
|
||
};
|
||
})(BlockToolbar));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/copy-handler/index.js
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
function CopyHandler(_ref) {
|
||
var children = _ref.children,
|
||
onCopy = _ref.onCopy,
|
||
onCut = _ref.onCut;
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
onCopy: onCopy,
|
||
onCut: onCut
|
||
}, children);
|
||
}
|
||
|
||
/* harmony default export */ var copy_handler = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps, _ref2) {
|
||
var select = _ref2.select;
|
||
|
||
var _select = select('core/block-editor'),
|
||
getBlocksByClientId = _select.getBlocksByClientId,
|
||
getSelectedBlockClientIds = _select.getSelectedBlockClientIds,
|
||
hasMultiSelection = _select.hasMultiSelection;
|
||
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
removeBlocks = _dispatch.removeBlocks;
|
||
|
||
var onCopy = function onCopy(event) {
|
||
var selectedBlockClientIds = getSelectedBlockClientIds();
|
||
|
||
if (selectedBlockClientIds.length === 0) {
|
||
return;
|
||
} // Let native copy behaviour take over in input fields.
|
||
|
||
|
||
if (!hasMultiSelection() && Object(external_this_wp_dom_["documentHasSelection"])()) {
|
||
return;
|
||
}
|
||
|
||
var serialized = Object(external_this_wp_blocks_["serialize"])(getBlocksByClientId(selectedBlockClientIds));
|
||
event.clipboardData.setData('text/plain', serialized);
|
||
event.clipboardData.setData('text/html', serialized);
|
||
event.preventDefault();
|
||
};
|
||
|
||
return {
|
||
onCopy: onCopy,
|
||
onCut: function onCut(event) {
|
||
onCopy(event);
|
||
|
||
if (hasMultiSelection()) {
|
||
var selectedBlockClientIds = getSelectedBlockClientIds();
|
||
removeBlocks(selectedBlockClientIds);
|
||
}
|
||
}
|
||
};
|
||
})])(CopyHandler));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/multi-select-scroll-into-view/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
var multi_select_scroll_into_view_MultiSelectScrollIntoView =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(MultiSelectScrollIntoView, _Component);
|
||
|
||
function MultiSelectScrollIntoView() {
|
||
Object(classCallCheck["a" /* default */])(this, MultiSelectScrollIntoView);
|
||
|
||
return Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(MultiSelectScrollIntoView).apply(this, arguments));
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(MultiSelectScrollIntoView, [{
|
||
key: "componentDidUpdate",
|
||
value: function componentDidUpdate() {
|
||
// Relies on expectation that `componentDidUpdate` will only be called
|
||
// if value of `extentClientId` changes.
|
||
this.scrollIntoView();
|
||
}
|
||
/**
|
||
* Ensures that if a multi-selection exists, the extent of the selection is
|
||
* visible within the nearest scrollable container.
|
||
*/
|
||
|
||
}, {
|
||
key: "scrollIntoView",
|
||
value: function scrollIntoView() {
|
||
var extentClientId = this.props.extentClientId;
|
||
|
||
if (!extentClientId) {
|
||
return;
|
||
}
|
||
|
||
var extentNode = getBlockDOMNode(extentClientId);
|
||
|
||
if (!extentNode) {
|
||
return;
|
||
}
|
||
|
||
var scrollContainer = Object(external_this_wp_dom_["getScrollContainer"])(extentNode); // If there's no scroll container, it follows that there's no scrollbar
|
||
// and thus there's no need to try to scroll into view.
|
||
|
||
if (!scrollContainer) {
|
||
return;
|
||
}
|
||
|
||
lib_default()(extentNode, scrollContainer, {
|
||
onlyScrollIfNeeded: true
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
return null;
|
||
}
|
||
}]);
|
||
|
||
return MultiSelectScrollIntoView;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var multi_select_scroll_into_view = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getLastMultiSelectedBlockClientId = _select.getLastMultiSelectedBlockClientId;
|
||
|
||
return {
|
||
extentClientId: getLastMultiSelectedBlockClientId()
|
||
};
|
||
})(multi_select_scroll_into_view_MultiSelectScrollIntoView));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/observe-typing/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Set of key codes upon which typing is to be initiated on a keydown event.
|
||
*
|
||
* @type {number[]}
|
||
*/
|
||
|
||
var KEY_DOWN_ELIGIBLE_KEY_CODES = [external_this_wp_keycodes_["UP"], external_this_wp_keycodes_["RIGHT"], external_this_wp_keycodes_["DOWN"], external_this_wp_keycodes_["LEFT"], external_this_wp_keycodes_["ENTER"], external_this_wp_keycodes_["BACKSPACE"]];
|
||
/**
|
||
* Returns true if a given keydown event can be inferred as intent to start
|
||
* typing, or false otherwise. A keydown is considered eligible if it is a
|
||
* text navigation without shift active.
|
||
*
|
||
* @param {KeyboardEvent} event Keydown event to test.
|
||
*
|
||
* @return {boolean} Whether event is eligible to start typing.
|
||
*/
|
||
|
||
function isKeyDownEligibleForStartTyping(event) {
|
||
var keyCode = event.keyCode,
|
||
shiftKey = event.shiftKey;
|
||
return !shiftKey && Object(external_lodash_["includes"])(KEY_DOWN_ELIGIBLE_KEY_CODES, keyCode);
|
||
}
|
||
|
||
var observe_typing_ObserveTyping =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(ObserveTyping, _Component);
|
||
|
||
function ObserveTyping() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, ObserveTyping);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(ObserveTyping).apply(this, arguments));
|
||
_this.stopTypingOnSelectionUncollapse = _this.stopTypingOnSelectionUncollapse.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.stopTypingOnMouseMove = _this.stopTypingOnMouseMove.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.startTypingInTextField = _this.startTypingInTextField.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.stopTypingOnNonTextField = _this.stopTypingOnNonTextField.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.stopTypingOnEscapeKey = _this.stopTypingOnEscapeKey.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onKeyDown = Object(external_lodash_["over"])([_this.startTypingInTextField, _this.stopTypingOnEscapeKey]);
|
||
_this.lastMouseMove = null;
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(ObserveTyping, [{
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
this.toggleEventBindings(this.props.isTyping);
|
||
}
|
||
}, {
|
||
key: "componentDidUpdate",
|
||
value: function componentDidUpdate(prevProps) {
|
||
if (this.props.isTyping !== prevProps.isTyping) {
|
||
this.toggleEventBindings(this.props.isTyping);
|
||
}
|
||
}
|
||
}, {
|
||
key: "componentWillUnmount",
|
||
value: function componentWillUnmount() {
|
||
this.toggleEventBindings(false);
|
||
}
|
||
/**
|
||
* Bind or unbind events to the document when typing has started or stopped
|
||
* respectively, or when component has become unmounted.
|
||
*
|
||
* @param {boolean} isBound Whether event bindings should be applied.
|
||
*/
|
||
|
||
}, {
|
||
key: "toggleEventBindings",
|
||
value: function toggleEventBindings(isBound) {
|
||
var bindFn = isBound ? 'addEventListener' : 'removeEventListener';
|
||
document[bindFn]('selectionchange', this.stopTypingOnSelectionUncollapse);
|
||
document[bindFn]('mousemove', this.stopTypingOnMouseMove);
|
||
}
|
||
/**
|
||
* On mouse move, unset typing flag if user has moved cursor.
|
||
*
|
||
* @param {MouseEvent} event Mousemove event.
|
||
*/
|
||
|
||
}, {
|
||
key: "stopTypingOnMouseMove",
|
||
value: function stopTypingOnMouseMove(event) {
|
||
var clientX = event.clientX,
|
||
clientY = event.clientY; // We need to check that the mouse really moved because Safari triggers
|
||
// mousemove events when shift or ctrl are pressed.
|
||
|
||
if (this.lastMouseMove) {
|
||
var _this$lastMouseMove = this.lastMouseMove,
|
||
lastClientX = _this$lastMouseMove.clientX,
|
||
lastClientY = _this$lastMouseMove.clientY;
|
||
|
||
if (lastClientX !== clientX || lastClientY !== clientY) {
|
||
this.props.onStopTyping();
|
||
}
|
||
}
|
||
|
||
this.lastMouseMove = {
|
||
clientX: clientX,
|
||
clientY: clientY
|
||
};
|
||
}
|
||
/**
|
||
* On selection change, unset typing flag if user has made an uncollapsed
|
||
* (shift) selection.
|
||
*/
|
||
|
||
}, {
|
||
key: "stopTypingOnSelectionUncollapse",
|
||
value: function stopTypingOnSelectionUncollapse() {
|
||
var selection = window.getSelection();
|
||
var isCollapsed = selection.rangeCount > 0 && selection.getRangeAt(0).collapsed;
|
||
|
||
if (!isCollapsed) {
|
||
this.props.onStopTyping();
|
||
}
|
||
}
|
||
/**
|
||
* Unsets typing flag if user presses Escape while typing flag is active.
|
||
*
|
||
* @param {KeyboardEvent} event Keypress or keydown event to interpret.
|
||
*/
|
||
|
||
}, {
|
||
key: "stopTypingOnEscapeKey",
|
||
value: function stopTypingOnEscapeKey(event) {
|
||
if (this.props.isTyping && event.keyCode === external_this_wp_keycodes_["ESCAPE"]) {
|
||
this.props.onStopTyping();
|
||
}
|
||
}
|
||
/**
|
||
* Handles a keypress or keydown event to infer intention to start typing.
|
||
*
|
||
* @param {KeyboardEvent} event Keypress or keydown event to interpret.
|
||
*/
|
||
|
||
}, {
|
||
key: "startTypingInTextField",
|
||
value: function startTypingInTextField(event) {
|
||
var _this$props = this.props,
|
||
isTyping = _this$props.isTyping,
|
||
onStartTyping = _this$props.onStartTyping;
|
||
var type = event.type,
|
||
target = event.target; // Abort early if already typing, or key press is incurred outside a
|
||
// text field (e.g. arrow-ing through toolbar buttons).
|
||
// Ignore typing in a block toolbar
|
||
|
||
if (isTyping || !Object(external_this_wp_dom_["isTextField"])(target) || target.closest('.block-editor-block-toolbar')) {
|
||
return;
|
||
} // Special-case keydown because certain keys do not emit a keypress
|
||
// event. Conversely avoid keydown as the canonical event since there
|
||
// are many keydown which are explicitly not targeted for typing.
|
||
|
||
|
||
if (type === 'keydown' && !isKeyDownEligibleForStartTyping(event)) {
|
||
return;
|
||
}
|
||
|
||
onStartTyping();
|
||
}
|
||
/**
|
||
* Stops typing when focus transitions to a non-text field element.
|
||
*
|
||
* @param {FocusEvent} event Focus event.
|
||
*/
|
||
|
||
}, {
|
||
key: "stopTypingOnNonTextField",
|
||
value: function stopTypingOnNonTextField(event) {
|
||
var _this2 = this;
|
||
|
||
event.persist(); // Since focus to a non-text field via arrow key will trigger before
|
||
// the keydown event, wait until after current stack before evaluating
|
||
// whether typing is to be stopped. Otherwise, typing will re-start.
|
||
|
||
this.props.setTimeout(function () {
|
||
var _this2$props = _this2.props,
|
||
isTyping = _this2$props.isTyping,
|
||
onStopTyping = _this2$props.onStopTyping;
|
||
var target = event.target;
|
||
|
||
if (isTyping && !Object(external_this_wp_dom_["isTextField"])(target)) {
|
||
onStopTyping();
|
||
}
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var children = this.props.children; // Disable reason: This component is responsible for capturing bubbled
|
||
// keyboard events which are interpreted as typing intent.
|
||
|
||
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
onFocus: this.stopTypingOnNonTextField,
|
||
onKeyPress: this.startTypingInTextField,
|
||
onKeyDown: this.onKeyDown
|
||
}, children);
|
||
/* eslint-enable jsx-a11y/no-static-element-interactions */
|
||
}
|
||
}]);
|
||
|
||
return ObserveTyping;
|
||
}(external_this_wp_element_["Component"]);
|
||
/**
|
||
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/observe-typing/README.md
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var observe_typing = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
isTyping = _select.isTyping;
|
||
|
||
return {
|
||
isTyping: isTyping()
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
startTyping = _dispatch.startTyping,
|
||
stopTyping = _dispatch.stopTyping;
|
||
|
||
return {
|
||
onStartTyping: startTyping,
|
||
onStopTyping: stopTyping
|
||
};
|
||
}), external_this_wp_compose_["withSafeTimeout"]])(observe_typing_ObserveTyping));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/preserve-scroll-in-reorder/index.js
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
function PreserveScrollInReorder() {
|
||
external_this_wp_deprecated_default()('PreserveScrollInReorder component', {
|
||
hint: 'This behavior is now built-in the block list'
|
||
});
|
||
return null;
|
||
}
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/typewriter/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
var isIE = window.navigator.userAgent.indexOf('Trident') !== -1;
|
||
var arrowKeyCodes = new Set([external_this_wp_keycodes_["UP"], external_this_wp_keycodes_["DOWN"], external_this_wp_keycodes_["LEFT"], external_this_wp_keycodes_["RIGHT"]]);
|
||
var initialTriggerPercentage = 0.75;
|
||
|
||
var typewriter_Typewriter =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(Typewriter, _Component);
|
||
|
||
function Typewriter() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, Typewriter);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(Typewriter).apply(this, arguments));
|
||
_this.ref = Object(external_this_wp_element_["createRef"])();
|
||
_this.onKeyDown = _this.onKeyDown.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.addSelectionChangeListener = _this.addSelectionChangeListener.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.computeCaretRectOnSelectionChange = _this.computeCaretRectOnSelectionChange.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.maintainCaretPosition = _this.maintainCaretPosition.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.computeCaretRect = _this.computeCaretRect.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onScrollResize = _this.onScrollResize.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.isSelectionEligibleForScroll = _this.isSelectionEligibleForScroll.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(Typewriter, [{
|
||
key: "componentDidMount",
|
||
value: function componentDidMount() {
|
||
// When the user scrolls or resizes, the scroll position should be
|
||
// reset.
|
||
window.addEventListener('scroll', this.onScrollResize, true);
|
||
window.addEventListener('resize', this.onScrollResize, true);
|
||
}
|
||
}, {
|
||
key: "componentWillUnmount",
|
||
value: function componentWillUnmount() {
|
||
window.removeEventListener('scroll', this.onScrollResize, true);
|
||
window.removeEventListener('resize', this.onScrollResize, true);
|
||
document.removeEventListener('selectionchange', this.computeCaretRectOnSelectionChange);
|
||
|
||
if (this.onScrollResize.rafId) {
|
||
window.cancelAnimationFrame(this.onScrollResize.rafId);
|
||
}
|
||
|
||
if (this.onKeyDown.rafId) {
|
||
window.cancelAnimationFrame(this.onKeyDown.rafId);
|
||
}
|
||
}
|
||
/**
|
||
* Resets the scroll position to be maintained.
|
||
*/
|
||
|
||
}, {
|
||
key: "computeCaretRect",
|
||
value: function computeCaretRect() {
|
||
if (this.isSelectionEligibleForScroll()) {
|
||
this.caretRect = Object(external_this_wp_dom_["computeCaretRect"])();
|
||
}
|
||
}
|
||
/**
|
||
* Resets the scroll position to be maintained during a `selectionchange`
|
||
* event. Also removes the listener, so it acts as a one-time listener.
|
||
*/
|
||
|
||
}, {
|
||
key: "computeCaretRectOnSelectionChange",
|
||
value: function computeCaretRectOnSelectionChange() {
|
||
document.removeEventListener('selectionchange', this.computeCaretRectOnSelectionChange);
|
||
this.computeCaretRect();
|
||
}
|
||
}, {
|
||
key: "onScrollResize",
|
||
value: function onScrollResize() {
|
||
var _this2 = this;
|
||
|
||
if (this.onScrollResize.rafId) {
|
||
return;
|
||
}
|
||
|
||
this.onScrollResize.rafId = window.requestAnimationFrame(function () {
|
||
_this2.computeCaretRect();
|
||
|
||
delete _this2.onScrollResize.rafId;
|
||
});
|
||
}
|
||
/**
|
||
* Checks if the current situation is elegible for scroll:
|
||
* - There should be one and only one block selected.
|
||
* - The component must contain the selection.
|
||
* - The active element must be contenteditable.
|
||
*/
|
||
|
||
}, {
|
||
key: "isSelectionEligibleForScroll",
|
||
value: function isSelectionEligibleForScroll() {
|
||
return this.props.selectedBlockClientId && this.ref.current.contains(document.activeElement) && document.activeElement.isContentEditable;
|
||
}
|
||
}, {
|
||
key: "isLastEditableNode",
|
||
value: function isLastEditableNode() {
|
||
var editableNodes = this.ref.current.querySelectorAll('[contenteditable="true"]');
|
||
var lastEditableNode = editableNodes[editableNodes.length - 1];
|
||
return lastEditableNode === document.activeElement;
|
||
}
|
||
/**
|
||
* Maintains the scroll position after a selection change caused by a
|
||
* keyboard event.
|
||
*
|
||
* @param {SyntheticEvent} event Synthetic keyboard event.
|
||
*/
|
||
|
||
}, {
|
||
key: "maintainCaretPosition",
|
||
value: function maintainCaretPosition(_ref) {
|
||
var keyCode = _ref.keyCode;
|
||
|
||
if (!this.isSelectionEligibleForScroll()) {
|
||
return;
|
||
}
|
||
|
||
var currentCaretRect = Object(external_this_wp_dom_["computeCaretRect"])();
|
||
|
||
if (!currentCaretRect) {
|
||
return;
|
||
} // If for some reason there is no position set to be scrolled to, let
|
||
// this be the position to be scrolled to in the future.
|
||
|
||
|
||
if (!this.caretRect) {
|
||
this.caretRect = currentCaretRect;
|
||
return;
|
||
} // Even though enabling the typewriter effect for arrow keys results in
|
||
// a pleasant experience, it may not be the case for everyone, so, for
|
||
// now, let's disable it.
|
||
|
||
|
||
if (arrowKeyCodes.has(keyCode)) {
|
||
// Reset the caret position to maintain.
|
||
this.caretRect = currentCaretRect;
|
||
return;
|
||
}
|
||
|
||
var diff = currentCaretRect.y - this.caretRect.y;
|
||
|
||
if (diff === 0) {
|
||
return;
|
||
}
|
||
|
||
var scrollContainer = Object(external_this_wp_dom_["getScrollContainer"])(this.ref.current); // The page must be scrollable.
|
||
|
||
if (!scrollContainer) {
|
||
return;
|
||
}
|
||
|
||
var windowScroll = scrollContainer === document.body;
|
||
var scrollY = windowScroll ? window.scrollY : scrollContainer.scrollTop;
|
||
var scrollContainerY = windowScroll ? 0 : scrollContainer.getBoundingClientRect().y;
|
||
var relativeScrollPosition = windowScroll ? this.caretRect.y / window.innerHeight : (this.caretRect.y - scrollContainerY) / (window.innerHeight - scrollContainerY); // If the scroll position is at the start, the active editable element
|
||
// is the last one, and the caret is positioned within the initial
|
||
// trigger percentage of the page, do not scroll the page.
|
||
// The typewriter effect should not kick in until an empty page has been
|
||
// filled with the initial trigger percentage or the user scrolls
|
||
// intentionally down.
|
||
|
||
if (scrollY === 0 && relativeScrollPosition < initialTriggerPercentage && this.isLastEditableNode()) {
|
||
// Reset the caret position to maintain.
|
||
this.caretRect = currentCaretRect;
|
||
return;
|
||
}
|
||
|
||
var scrollContainerHeight = windowScroll ? window.innerHeight : scrollContainer.clientHeight; // Abort if the target scroll position would scroll the caret out of
|
||
// view.
|
||
|
||
if ( // The caret is under the lower fold.
|
||
this.caretRect.y + this.caretRect.height > scrollContainerY + scrollContainerHeight || // The caret is above the upper fold.
|
||
this.caretRect.y < scrollContainerY) {
|
||
// Reset the caret position to maintain.
|
||
this.caretRect = currentCaretRect;
|
||
return;
|
||
}
|
||
|
||
if (windowScroll) {
|
||
window.scrollBy(0, diff);
|
||
} else {
|
||
scrollContainer.scrollTop += diff;
|
||
}
|
||
}
|
||
/**
|
||
* Adds a `selectionchange` listener to reset the scroll position to be
|
||
* maintained.
|
||
*/
|
||
|
||
}, {
|
||
key: "addSelectionChangeListener",
|
||
value: function addSelectionChangeListener() {
|
||
document.addEventListener('selectionchange', this.computeCaretRectOnSelectionChange);
|
||
}
|
||
}, {
|
||
key: "onKeyDown",
|
||
value: function onKeyDown(event) {
|
||
var _this3 = this;
|
||
|
||
event.persist(); // Ensure the any remaining request is cancelled.
|
||
|
||
if (this.onKeyDown.rafId) {
|
||
window.cancelAnimationFrame(this.onKeyDown.rafId);
|
||
} // Use an animation frame for a smooth result.
|
||
|
||
|
||
this.onKeyDown.rafId = window.requestAnimationFrame(function () {
|
||
_this3.maintainCaretPosition(event);
|
||
|
||
delete _this3.onKeyDown.rafId;
|
||
});
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
// There are some issues with Internet Explorer, which are probably not
|
||
// worth spending time on. Let's disable it.
|
||
if (isIE) {
|
||
return this.props.children;
|
||
} // Disable reason: Wrapper itself is non-interactive, but must capture
|
||
// bubbling events from children to determine focus transition intents.
|
||
|
||
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
||
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
ref: this.ref,
|
||
onKeyDown: this.onKeyDown,
|
||
onKeyUp: this.maintainCaretPosition,
|
||
onMouseDown: this.addSelectionChangeListener,
|
||
onTouchStart: this.addSelectionChangeListener
|
||
}, this.props.children);
|
||
/* eslint-enable jsx-a11y/no-static-element-interactions */
|
||
}
|
||
}]);
|
||
|
||
return Typewriter;
|
||
}(external_this_wp_element_["Component"]);
|
||
/**
|
||
* Ensures that the text selection keeps the same vertical distance from the
|
||
* viewport during keyboard events within this component. The vertical distance
|
||
* can vary. It is the last clicked or scrolled to position.
|
||
*/
|
||
|
||
|
||
/* harmony default export */ var typewriter = (Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSelectedBlockClientId = _select.getSelectedBlockClientId;
|
||
|
||
return {
|
||
selectedBlockClientId: getSelectedBlockClientId()
|
||
};
|
||
})(typewriter_Typewriter));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/index.js
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Browser constants
|
||
*/
|
||
|
||
var _window = window,
|
||
getSelection = _window.getSelection,
|
||
getComputedStyle = _window.getComputedStyle;
|
||
/**
|
||
* Given an element, returns true if the element is a tabbable text field, or
|
||
* false otherwise.
|
||
*
|
||
* @param {Element} element Element to test.
|
||
*
|
||
* @return {boolean} Whether element is a tabbable text field.
|
||
*/
|
||
|
||
var isTabbableTextField = Object(external_lodash_["overEvery"])([external_this_wp_dom_["isTextField"], external_this_wp_dom_["focus"].tabbable.isTabbableIndex]);
|
||
/**
|
||
* Returns true if the element should consider edge navigation upon a keyboard
|
||
* event of the given directional key code, or false otherwise.
|
||
*
|
||
* @param {Element} element HTML element to test.
|
||
* @param {number} keyCode KeyboardEvent keyCode to test.
|
||
* @param {boolean} hasModifier Whether a modifier is pressed.
|
||
*
|
||
* @return {boolean} Whether element should consider edge navigation.
|
||
*/
|
||
|
||
function isNavigationCandidate(element, keyCode, hasModifier) {
|
||
var isVertical = keyCode === external_this_wp_keycodes_["UP"] || keyCode === external_this_wp_keycodes_["DOWN"]; // Currently, all elements support unmodified vertical navigation.
|
||
|
||
if (isVertical && !hasModifier) {
|
||
return true;
|
||
} // Native inputs should not navigate horizontally.
|
||
|
||
|
||
var tagName = element.tagName;
|
||
return tagName !== 'INPUT' && tagName !== 'TEXTAREA';
|
||
}
|
||
|
||
var writing_flow_WritingFlow =
|
||
/*#__PURE__*/
|
||
function (_Component) {
|
||
Object(inherits["a" /* default */])(WritingFlow, _Component);
|
||
|
||
function WritingFlow() {
|
||
var _this;
|
||
|
||
Object(classCallCheck["a" /* default */])(this, WritingFlow);
|
||
|
||
_this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(WritingFlow).apply(this, arguments));
|
||
_this.onKeyDown = _this.onKeyDown.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.bindContainer = _this.bindContainer.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.onMouseDown = _this.onMouseDown.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
_this.focusLastTextField = _this.focusLastTextField.bind(Object(assertThisInitialized["a" /* default */])(_this));
|
||
/**
|
||
* Here a rectangle is stored while moving the caret vertically so
|
||
* vertical position of the start position can be restored.
|
||
* This is to recreate browser behaviour across blocks.
|
||
*
|
||
* @type {?DOMRect}
|
||
*/
|
||
|
||
_this.verticalRect = null;
|
||
/**
|
||
* Reference of the writing flow appender element.
|
||
* The reference is used to focus the first tabbable element after the block list
|
||
* once we hit `tab` on the last block in navigation mode.
|
||
*/
|
||
|
||
_this.appender = Object(external_this_wp_element_["createRef"])();
|
||
return _this;
|
||
}
|
||
|
||
Object(createClass["a" /* default */])(WritingFlow, [{
|
||
key: "bindContainer",
|
||
value: function bindContainer(ref) {
|
||
this.container = ref;
|
||
}
|
||
}, {
|
||
key: "onMouseDown",
|
||
value: function onMouseDown() {
|
||
this.verticalRect = null;
|
||
this.disableNavigationMode();
|
||
}
|
||
}, {
|
||
key: "disableNavigationMode",
|
||
value: function disableNavigationMode() {
|
||
if (this.props.isNavigationMode) {
|
||
this.props.disableNavigationMode();
|
||
}
|
||
}
|
||
/**
|
||
* Returns the optimal tab target from the given focused element in the
|
||
* desired direction. A preference is made toward text fields, falling back
|
||
* to the block focus stop if no other candidates exist for the block.
|
||
*
|
||
* @param {Element} target Currently focused text field.
|
||
* @param {boolean} isReverse True if considering as the first field.
|
||
*
|
||
* @return {?Element} Optimal tab target, if one exists.
|
||
*/
|
||
|
||
}, {
|
||
key: "getClosestTabbable",
|
||
value: function getClosestTabbable(target, isReverse) {
|
||
// Since the current focus target is not guaranteed to be a text field,
|
||
// find all focusables. Tabbability is considered later.
|
||
var focusableNodes = external_this_wp_dom_["focus"].focusable.find(this.container);
|
||
|
||
if (isReverse) {
|
||
focusableNodes = Object(external_lodash_["reverse"])(focusableNodes);
|
||
} // Consider as candidates those focusables after the current target.
|
||
// It's assumed this can only be reached if the target is focusable
|
||
// (on its keydown event), so no need to verify it exists in the set.
|
||
|
||
|
||
focusableNodes = focusableNodes.slice(focusableNodes.indexOf(target) + 1);
|
||
|
||
function isTabCandidate(node, i, array) {
|
||
// Not a candidate if the node is not tabbable.
|
||
if (!external_this_wp_dom_["focus"].tabbable.isTabbableIndex(node)) {
|
||
return false;
|
||
} // Prefer text fields...
|
||
|
||
|
||
if (Object(external_this_wp_dom_["isTextField"])(node)) {
|
||
return true;
|
||
} // ...but settle for block focus stop.
|
||
|
||
|
||
if (!isBlockFocusStop(node)) {
|
||
return false;
|
||
} // If element contains inner blocks, stop immediately at its focus
|
||
// wrapper.
|
||
|
||
|
||
if (hasInnerBlocksContext(node)) {
|
||
return true;
|
||
} // If navigating out of a block (in reverse), don't consider its
|
||
// block focus stop.
|
||
|
||
|
||
if (node.contains(target)) {
|
||
return false;
|
||
} // In case of block focus stop, check to see if there's a better
|
||
// text field candidate within.
|
||
|
||
|
||
for (var offset = 1, nextNode; nextNode = array[i + offset]; offset++) {
|
||
// Abort if no longer testing descendents of focus stop.
|
||
if (!node.contains(nextNode)) {
|
||
break;
|
||
} // Apply same tests by recursion. This is important to consider
|
||
// nestable blocks where we don't want to settle for the inner
|
||
// block focus stop.
|
||
|
||
|
||
if (isTabCandidate(nextNode, i + offset, array)) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
return Object(external_lodash_["find"])(focusableNodes, isTabCandidate);
|
||
}
|
||
}, {
|
||
key: "expandSelection",
|
||
value: function expandSelection(isReverse) {
|
||
var _this$props = this.props,
|
||
selectedBlockClientId = _this$props.selectedBlockClientId,
|
||
selectionStartClientId = _this$props.selectionStartClientId,
|
||
selectionBeforeEndClientId = _this$props.selectionBeforeEndClientId,
|
||
selectionAfterEndClientId = _this$props.selectionAfterEndClientId;
|
||
var nextSelectionEndClientId = isReverse ? selectionBeforeEndClientId : selectionAfterEndClientId;
|
||
|
||
if (nextSelectionEndClientId) {
|
||
this.props.onMultiSelect(selectionStartClientId || selectedBlockClientId, nextSelectionEndClientId);
|
||
}
|
||
}
|
||
}, {
|
||
key: "moveSelection",
|
||
value: function moveSelection(isReverse) {
|
||
var _this$props2 = this.props,
|
||
selectedFirstClientId = _this$props2.selectedFirstClientId,
|
||
selectedLastClientId = _this$props2.selectedLastClientId;
|
||
var focusedBlockClientId = isReverse ? selectedFirstClientId : selectedLastClientId;
|
||
|
||
if (focusedBlockClientId) {
|
||
this.props.onSelectBlock(focusedBlockClientId);
|
||
}
|
||
}
|
||
/**
|
||
* Returns true if the given target field is the last in its block which
|
||
* can be considered for tab transition. For example, in a block with two
|
||
* text fields, this would return true when reversing from the first of the
|
||
* two fields, but false when reversing from the second.
|
||
*
|
||
* @param {Element} target Currently focused text field.
|
||
* @param {boolean} isReverse True if considering as the first field.
|
||
*
|
||
* @return {boolean} Whether field is at edge for tab transition.
|
||
*/
|
||
|
||
}, {
|
||
key: "isTabbableEdge",
|
||
value: function isTabbableEdge(target, isReverse) {
|
||
var closestTabbable = this.getClosestTabbable(target, isReverse);
|
||
return !closestTabbable || !isInSameBlock(target, closestTabbable);
|
||
}
|
||
}, {
|
||
key: "onKeyDown",
|
||
value: function onKeyDown(event) {
|
||
var _this$props3 = this.props,
|
||
hasMultiSelection = _this$props3.hasMultiSelection,
|
||
onMultiSelect = _this$props3.onMultiSelect,
|
||
blocks = _this$props3.blocks,
|
||
selectedBlockClientId = _this$props3.selectedBlockClientId,
|
||
selectionBeforeEndClientId = _this$props3.selectionBeforeEndClientId,
|
||
selectionAfterEndClientId = _this$props3.selectionAfterEndClientId,
|
||
isNavigationMode = _this$props3.isNavigationMode;
|
||
var keyCode = event.keyCode,
|
||
target = event.target;
|
||
var isUp = keyCode === external_this_wp_keycodes_["UP"];
|
||
var isDown = keyCode === external_this_wp_keycodes_["DOWN"];
|
||
var isLeft = keyCode === external_this_wp_keycodes_["LEFT"];
|
||
var isRight = keyCode === external_this_wp_keycodes_["RIGHT"];
|
||
var isTab = keyCode === external_this_wp_keycodes_["TAB"];
|
||
var isReverse = isUp || isLeft;
|
||
var isHorizontal = isLeft || isRight;
|
||
var isVertical = isUp || isDown;
|
||
var isNav = isHorizontal || isVertical;
|
||
var isShift = event.shiftKey;
|
||
var hasModifier = isShift || event.ctrlKey || event.altKey || event.metaKey;
|
||
var isNavEdge = isVertical ? external_this_wp_dom_["isVerticalEdge"] : external_this_wp_dom_["isHorizontalEdge"]; // In navigation mode, tab and arrows navigate from block to block.
|
||
|
||
if (isNavigationMode) {
|
||
var navigateUp = isTab && isShift || isUp;
|
||
var navigateDown = isTab && !isShift || isDown;
|
||
var focusedBlockUid = navigateUp ? selectionBeforeEndClientId : selectionAfterEndClientId;
|
||
|
||
if ((navigateDown || navigateUp) && focusedBlockUid) {
|
||
event.preventDefault();
|
||
this.props.onSelectBlock(focusedBlockUid);
|
||
} // Special case when reaching the end of the blocks (navigate to the next tabbable outside of the writing flow)
|
||
|
||
|
||
if (navigateDown && selectedBlockClientId && !selectionAfterEndClientId && [external_this_wp_keycodes_["UP"], external_this_wp_keycodes_["DOWN"]].indexOf(keyCode) === -1) {
|
||
this.props.clearSelectedBlock();
|
||
this.appender.current.focus();
|
||
}
|
||
|
||
return;
|
||
} // When presing any key other than up or down, the initial vertical
|
||
// position must ALWAYS be reset. The vertical position is saved so it
|
||
// can be restored as well as possible on sebsequent vertical arrow key
|
||
// presses. It may not always be possible to restore the exact same
|
||
// position (such as at an empty line), so it wouldn't be good to
|
||
// compute the position right before any vertical arrow key press.
|
||
|
||
|
||
if (!isVertical) {
|
||
this.verticalRect = null;
|
||
} else if (!this.verticalRect) {
|
||
this.verticalRect = Object(external_this_wp_dom_["computeCaretRect"])();
|
||
} // This logic inside this condition needs to be checked before
|
||
// the check for event.nativeEvent.defaultPrevented.
|
||
// The logic handles meta+a keypress and this event is default prevented
|
||
// by RichText.
|
||
|
||
|
||
if (!isNav) {
|
||
// Set immediately before the meta+a combination can be pressed.
|
||
if (external_this_wp_keycodes_["isKeyboardEvent"].primary(event)) {
|
||
this.isEntirelySelected = Object(external_this_wp_dom_["isEntirelySelected"])(target);
|
||
}
|
||
|
||
if (external_this_wp_keycodes_["isKeyboardEvent"].primary(event, 'a')) {
|
||
// When the target is contentEditable, selection will already
|
||
// have been set by the browser earlier in this call stack. We
|
||
// need check the previous result, otherwise all blocks will be
|
||
// selected right away.
|
||
if (target.isContentEditable ? this.isEntirelySelected : Object(external_this_wp_dom_["isEntirelySelected"])(target)) {
|
||
onMultiSelect(Object(external_lodash_["first"])(blocks), Object(external_lodash_["last"])(blocks));
|
||
event.preventDefault();
|
||
} // After pressing primary + A we can assume isEntirelySelected is true.
|
||
// Calling right away isEntirelySelected after primary + A may still return false on some browsers.
|
||
|
||
|
||
this.isEntirelySelected = true;
|
||
}
|
||
|
||
return;
|
||
} // Abort if navigation has already been handled (e.g. RichText inline
|
||
// boundaries).
|
||
|
||
|
||
if (event.nativeEvent.defaultPrevented) {
|
||
return;
|
||
} // Abort if our current target is not a candidate for navigation (e.g.
|
||
// preserve native input behaviors).
|
||
|
||
|
||
if (!isNavigationCandidate(target, keyCode, hasModifier)) {
|
||
return;
|
||
} // In the case of RTL scripts, right means previous and left means next,
|
||
// which is the exact reverse of LTR.
|
||
|
||
|
||
var _getComputedStyle = getComputedStyle(target),
|
||
direction = _getComputedStyle.direction;
|
||
|
||
var isReverseDir = direction === 'rtl' ? !isReverse : isReverse;
|
||
|
||
if (isShift) {
|
||
if (( // Ensure that there is a target block.
|
||
isReverse && selectionBeforeEndClientId || !isReverse && selectionAfterEndClientId) && (hasMultiSelection || this.isTabbableEdge(target, isReverse) && isNavEdge(target, isReverse))) {
|
||
// Shift key is down, and there is multi selection or we're at
|
||
// the end of the current block.
|
||
this.expandSelection(isReverse);
|
||
event.preventDefault();
|
||
}
|
||
} else if (hasMultiSelection) {
|
||
// Moving from block multi-selection to single block selection
|
||
this.moveSelection(isReverse);
|
||
event.preventDefault();
|
||
} else if (isVertical && Object(external_this_wp_dom_["isVerticalEdge"])(target, isReverse)) {
|
||
var closestTabbable = this.getClosestTabbable(target, isReverse);
|
||
|
||
if (closestTabbable) {
|
||
Object(external_this_wp_dom_["placeCaretAtVerticalEdge"])(closestTabbable, isReverse, this.verticalRect);
|
||
event.preventDefault();
|
||
}
|
||
} else if (isHorizontal && getSelection().isCollapsed && Object(external_this_wp_dom_["isHorizontalEdge"])(target, isReverseDir)) {
|
||
var _closestTabbable = this.getClosestTabbable(target, isReverseDir);
|
||
|
||
Object(external_this_wp_dom_["placeCaretAtHorizontalEdge"])(_closestTabbable, isReverseDir);
|
||
event.preventDefault();
|
||
}
|
||
}
|
||
/**
|
||
* Sets focus to the end of the last tabbable text field, if one exists.
|
||
*/
|
||
|
||
}, {
|
||
key: "focusLastTextField",
|
||
value: function focusLastTextField() {
|
||
var focusableNodes = external_this_wp_dom_["focus"].focusable.find(this.container);
|
||
var target = Object(external_lodash_["findLast"])(focusableNodes, isTabbableTextField);
|
||
|
||
if (target) {
|
||
Object(external_this_wp_dom_["placeCaretAtHorizontalEdge"])(target, true);
|
||
}
|
||
}
|
||
}, {
|
||
key: "render",
|
||
value: function render() {
|
||
var children = this.props.children; // Disable reason: Wrapper itself is non-interactive, but must capture
|
||
// bubbling events from children to determine focus transition intents.
|
||
|
||
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
||
|
||
return Object(external_this_wp_element_["createElement"])("div", {
|
||
className: "editor-writing-flow block-editor-writing-flow"
|
||
}, Object(external_this_wp_element_["createElement"])("div", {
|
||
ref: this.bindContainer,
|
||
onKeyDown: this.onKeyDown,
|
||
onMouseDown: this.onMouseDown
|
||
}, children), Object(external_this_wp_element_["createElement"])("div", {
|
||
ref: this.appender,
|
||
"aria-hidden": true,
|
||
tabIndex: -1,
|
||
onClick: this.focusLastTextField,
|
||
className: "editor-writing-flow__click-redirect block-editor-writing-flow__click-redirect"
|
||
}));
|
||
/* eslint-enable jsx-a11y/no-static-element-interactions */
|
||
}
|
||
}]);
|
||
|
||
return WritingFlow;
|
||
}(external_this_wp_element_["Component"]);
|
||
|
||
/* harmony default export */ var writing_flow = (Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSelectedBlockClientId = _select.getSelectedBlockClientId,
|
||
getMultiSelectedBlocksStartClientId = _select.getMultiSelectedBlocksStartClientId,
|
||
getMultiSelectedBlocksEndClientId = _select.getMultiSelectedBlocksEndClientId,
|
||
getPreviousBlockClientId = _select.getPreviousBlockClientId,
|
||
getNextBlockClientId = _select.getNextBlockClientId,
|
||
getFirstMultiSelectedBlockClientId = _select.getFirstMultiSelectedBlockClientId,
|
||
getLastMultiSelectedBlockClientId = _select.getLastMultiSelectedBlockClientId,
|
||
hasMultiSelection = _select.hasMultiSelection,
|
||
getBlockOrder = _select.getBlockOrder,
|
||
isNavigationMode = _select.isNavigationMode;
|
||
|
||
var selectedBlockClientId = getSelectedBlockClientId();
|
||
var selectionStartClientId = getMultiSelectedBlocksStartClientId();
|
||
var selectionEndClientId = getMultiSelectedBlocksEndClientId();
|
||
return {
|
||
selectedBlockClientId: selectedBlockClientId,
|
||
selectionStartClientId: selectionStartClientId,
|
||
selectionBeforeEndClientId: getPreviousBlockClientId(selectionEndClientId || selectedBlockClientId),
|
||
selectionAfterEndClientId: getNextBlockClientId(selectionEndClientId || selectedBlockClientId),
|
||
selectedFirstClientId: getFirstMultiSelectedBlockClientId(),
|
||
selectedLastClientId: getLastMultiSelectedBlockClientId(),
|
||
hasMultiSelection: hasMultiSelection(),
|
||
blocks: getBlockOrder(),
|
||
isNavigationMode: isNavigationMode()
|
||
};
|
||
}), Object(external_this_wp_data_["withDispatch"])(function (dispatch) {
|
||
var _dispatch = dispatch('core/block-editor'),
|
||
multiSelect = _dispatch.multiSelect,
|
||
selectBlock = _dispatch.selectBlock,
|
||
setNavigationMode = _dispatch.setNavigationMode,
|
||
clearSelectedBlock = _dispatch.clearSelectedBlock;
|
||
|
||
return {
|
||
onMultiSelect: multiSelect,
|
||
onSelectBlock: selectBlock,
|
||
disableNavigationMode: function disableNavigationMode() {
|
||
return setNavigationMode(false);
|
||
},
|
||
clearSelectedBlock: clearSelectedBlock
|
||
};
|
||
})])(writing_flow_WritingFlow));
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/index.js
|
||
/*
|
||
* Block Creation Components
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* Content Related Components
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* State Related Components
|
||
*/
|
||
|
||
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/align.js
|
||
|
||
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* An array which includes all possible valid alignments,
|
||
* used to validate if an alignment is valid or not.
|
||
*
|
||
* @constant
|
||
* @type {string[]}
|
||
*/
|
||
|
||
var ALL_ALIGNMENTS = ['left', 'center', 'right', 'wide', 'full'];
|
||
/**
|
||
* An array which includes all wide alignments.
|
||
* In order for this alignments to be valid they need to be supported by the block,
|
||
* and by the theme.
|
||
*
|
||
* @constant
|
||
* @type {string[]}
|
||
*/
|
||
|
||
var WIDE_ALIGNMENTS = ['wide', 'full'];
|
||
/**
|
||
* Returns the valid alignments.
|
||
* Takes into consideration the aligns supported by a block, if the block supports wide controls or not and if theme supports wide controls or not.
|
||
* Exported just for testing purposes, not exported outside the module.
|
||
*
|
||
* @param {?boolean|string[]} blockAlign Aligns supported by the block.
|
||
* @param {?boolean} hasWideBlockSupport True if block supports wide alignments. And False otherwise.
|
||
* @param {?boolean} hasWideEnabled True if theme supports wide alignments. And False otherwise.
|
||
*
|
||
* @return {string[]} Valid alignments.
|
||
*/
|
||
|
||
function getValidAlignments(blockAlign) {
|
||
var hasWideBlockSupport = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
||
var hasWideEnabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
||
var validAlignments;
|
||
|
||
if (Array.isArray(blockAlign)) {
|
||
validAlignments = blockAlign;
|
||
} else if (blockAlign === true) {
|
||
// `true` includes all alignments...
|
||
validAlignments = ALL_ALIGNMENTS;
|
||
} else {
|
||
validAlignments = [];
|
||
}
|
||
|
||
if (!hasWideEnabled || blockAlign === true && !hasWideBlockSupport) {
|
||
return external_lodash_["without"].apply(void 0, [validAlignments].concat(WIDE_ALIGNMENTS));
|
||
}
|
||
|
||
return validAlignments;
|
||
}
|
||
/**
|
||
* Filters registered block settings, extending attributes to include `align`.
|
||
*
|
||
* @param {Object} settings Original block settings
|
||
* @return {Object} Filtered block settings
|
||
*/
|
||
|
||
function addAttribute(settings) {
|
||
// allow blocks to specify their own attribute definition with default values if needed.
|
||
if (Object(external_lodash_["has"])(settings.attributes, ['align', 'type'])) {
|
||
return settings;
|
||
}
|
||
|
||
if (Object(external_this_wp_blocks_["hasBlockSupport"])(settings, 'align')) {
|
||
// Use Lodash's assign to gracefully handle if attributes are undefined
|
||
settings.attributes = Object(external_lodash_["assign"])(settings.attributes, {
|
||
align: {
|
||
type: 'string'
|
||
}
|
||
});
|
||
}
|
||
|
||
return settings;
|
||
}
|
||
/**
|
||
* Override the default edit UI to include new toolbar controls for block
|
||
* alignment, if block defines support.
|
||
*
|
||
* @param {Function} BlockEdit Original component
|
||
* @return {Function} Wrapped component
|
||
*/
|
||
|
||
var withToolbarControls = Object(external_this_wp_compose_["createHigherOrderComponent"])(function (BlockEdit) {
|
||
return function (props) {
|
||
var blockName = props.name; // Compute valid alignments without taking into account,
|
||
// if the theme supports wide alignments or not.
|
||
// BlockAlignmentToolbar takes into account the theme support.
|
||
|
||
var validAlignments = getValidAlignments(Object(external_this_wp_blocks_["getBlockSupport"])(blockName, 'align'), Object(external_this_wp_blocks_["hasBlockSupport"])(blockName, 'alignWide', true));
|
||
|
||
var updateAlignment = function updateAlignment(nextAlign) {
|
||
if (!nextAlign) {
|
||
var blockType = Object(external_this_wp_blocks_["getBlockType"])(props.name);
|
||
var blockDefaultAlign = Object(external_lodash_["get"])(blockType, ['attributes', 'align', 'default']);
|
||
|
||
if (blockDefaultAlign) {
|
||
nextAlign = '';
|
||
}
|
||
}
|
||
|
||
props.setAttributes({
|
||
align: nextAlign
|
||
});
|
||
};
|
||
|
||
return [validAlignments.length > 0 && props.isSelected && Object(external_this_wp_element_["createElement"])(block_controls, {
|
||
key: "align-controls"
|
||
}, Object(external_this_wp_element_["createElement"])(block_alignment_toolbar, {
|
||
value: props.attributes.align,
|
||
onChange: updateAlignment,
|
||
controls: validAlignments
|
||
})), Object(external_this_wp_element_["createElement"])(BlockEdit, Object(esm_extends["a" /* default */])({
|
||
key: "edit"
|
||
}, props))];
|
||
};
|
||
}, 'withToolbarControls'); // Exported just for testing purposes, not exported outside the module.
|
||
|
||
var align_insideSelectWithDataAlign = function insideSelectWithDataAlign(BlockListBlock) {
|
||
return function (props) {
|
||
var name = props.name,
|
||
attributes = props.attributes,
|
||
hasWideEnabled = props.hasWideEnabled;
|
||
var align = attributes.align;
|
||
var validAlignments = getValidAlignments(Object(external_this_wp_blocks_["getBlockSupport"])(name, 'align'), Object(external_this_wp_blocks_["hasBlockSupport"])(name, 'alignWide', true), hasWideEnabled);
|
||
var wrapperProps = props.wrapperProps;
|
||
|
||
if (Object(external_lodash_["includes"])(validAlignments, align)) {
|
||
wrapperProps = Object(objectSpread["a" /* default */])({}, wrapperProps, {
|
||
'data-align': align
|
||
});
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(BlockListBlock, Object(esm_extends["a" /* default */])({}, props, {
|
||
wrapperProps: wrapperProps
|
||
}));
|
||
};
|
||
};
|
||
/**
|
||
* Override the default block element to add alignment wrapper props.
|
||
*
|
||
* @param {Function} BlockListBlock Original component
|
||
* @return {Function} Wrapped component
|
||
*/
|
||
|
||
var withDataAlign = Object(external_this_wp_compose_["createHigherOrderComponent"])(Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select) {
|
||
var _select = select('core/block-editor'),
|
||
getSettings = _select.getSettings;
|
||
|
||
return {
|
||
hasWideEnabled: !!getSettings().alignWide
|
||
};
|
||
}), align_insideSelectWithDataAlign]));
|
||
/**
|
||
* Override props assigned to save component to inject alignment class name if
|
||
* block supports it.
|
||
*
|
||
* @param {Object} props Additional props applied to save element
|
||
* @param {Object} blockType Block type
|
||
* @param {Object} attributes Block attributes
|
||
* @return {Object} Filtered props applied to save element
|
||
*/
|
||
|
||
function addAssignedAlign(props, blockType, attributes) {
|
||
var align = attributes.align;
|
||
var blockAlign = Object(external_this_wp_blocks_["getBlockSupport"])(blockType, 'align');
|
||
var hasWideBlockSupport = Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'alignWide', true);
|
||
var isAlignValid = Object(external_lodash_["includes"])( // Compute valid alignments without taking into account,
|
||
// if the theme supports wide alignments or not.
|
||
// This way changing themes does not impacts the block save.
|
||
getValidAlignments(blockAlign, hasWideBlockSupport), align);
|
||
|
||
if (isAlignValid) {
|
||
props.className = classnames_default()("align".concat(align), props.className);
|
||
}
|
||
|
||
return props;
|
||
}
|
||
Object(external_this_wp_hooks_["addFilter"])('blocks.registerBlockType', 'core/align/addAttribute', addAttribute);
|
||
Object(external_this_wp_hooks_["addFilter"])('editor.BlockListBlock', 'core/editor/align/with-data-align', withDataAlign);
|
||
Object(external_this_wp_hooks_["addFilter"])('editor.BlockEdit', 'core/editor/align/with-toolbar-controls', withToolbarControls);
|
||
Object(external_this_wp_hooks_["addFilter"])('blocks.getSaveContent.extraProps', 'core/align/addAssignedAlign', addAssignedAlign);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/anchor.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Regular expression matching invalid anchor characters for replacement.
|
||
*
|
||
* @type {RegExp}
|
||
*/
|
||
|
||
var ANCHOR_REGEX = /[\s#]/g;
|
||
/**
|
||
* Filters registered block settings, extending attributes with anchor using ID
|
||
* of the first node.
|
||
*
|
||
* @param {Object} settings Original block settings.
|
||
*
|
||
* @return {Object} Filtered block settings.
|
||
*/
|
||
|
||
function anchor_addAttribute(settings) {
|
||
// allow blocks to specify their own attribute definition with default values if needed.
|
||
if (Object(external_lodash_["has"])(settings.attributes, ['anchor', 'type'])) {
|
||
return settings;
|
||
}
|
||
|
||
if (Object(external_this_wp_blocks_["hasBlockSupport"])(settings, 'anchor')) {
|
||
// Use Lodash's assign to gracefully handle if attributes are undefined
|
||
settings.attributes = Object(external_lodash_["assign"])(settings.attributes, {
|
||
anchor: {
|
||
type: 'string',
|
||
source: 'attribute',
|
||
attribute: 'id',
|
||
selector: '*'
|
||
}
|
||
});
|
||
}
|
||
|
||
return settings;
|
||
}
|
||
/**
|
||
* Override the default edit UI to include a new block inspector control for
|
||
* assigning the anchor ID, if block supports anchor.
|
||
*
|
||
* @param {Function|Component} BlockEdit Original component.
|
||
*
|
||
* @return {string} Wrapped component.
|
||
*/
|
||
|
||
var withInspectorControl = Object(external_this_wp_compose_["createHigherOrderComponent"])(function (BlockEdit) {
|
||
return function (props) {
|
||
var hasAnchor = Object(external_this_wp_blocks_["hasBlockSupport"])(props.name, 'anchor');
|
||
|
||
if (hasAnchor && props.isSelected) {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(BlockEdit, props), Object(external_this_wp_element_["createElement"])(inspector_advanced_controls, null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["TextControl"], {
|
||
className: "html-anchor-control",
|
||
label: Object(external_this_wp_i18n_["__"])('HTML Anchor'),
|
||
help: Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_i18n_["__"])('Enter a word or two — without spaces — to make a unique web address just for this heading, called an “anchor.” Then, you’ll be able to link directly to this section of your page.'), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["ExternalLink"], {
|
||
href: 'https://wordpress.org/support/article/page-jumps/'
|
||
}, Object(external_this_wp_i18n_["__"])('Learn more about anchors'))),
|
||
value: props.attributes.anchor || '',
|
||
onChange: function onChange(nextValue) {
|
||
nextValue = nextValue.replace(ANCHOR_REGEX, '-');
|
||
props.setAttributes({
|
||
anchor: nextValue
|
||
});
|
||
}
|
||
})));
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(BlockEdit, props);
|
||
};
|
||
}, 'withInspectorControl');
|
||
/**
|
||
* Override props assigned to save component to inject anchor ID, if block
|
||
* supports anchor. This is only applied if the block's save result is an
|
||
* element and not a markup string.
|
||
*
|
||
* @param {Object} extraProps Additional props applied to save element.
|
||
* @param {Object} blockType Block type.
|
||
* @param {Object} attributes Current block attributes.
|
||
*
|
||
* @return {Object} Filtered props applied to save element.
|
||
*/
|
||
|
||
function addSaveProps(extraProps, blockType, attributes) {
|
||
if (Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'anchor')) {
|
||
extraProps.id = attributes.anchor === '' ? null : attributes.anchor;
|
||
}
|
||
|
||
return extraProps;
|
||
}
|
||
Object(external_this_wp_hooks_["addFilter"])('blocks.registerBlockType', 'core/anchor/attribute', anchor_addAttribute);
|
||
Object(external_this_wp_hooks_["addFilter"])('editor.BlockEdit', 'core/editor/anchor/with-inspector-control', withInspectorControl);
|
||
Object(external_this_wp_hooks_["addFilter"])('blocks.getSaveContent.extraProps', 'core/anchor/save-props', addSaveProps);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/custom-class-name.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Filters registered block settings, extending attributes with anchor using ID
|
||
* of the first node.
|
||
*
|
||
* @param {Object} settings Original block settings.
|
||
*
|
||
* @return {Object} Filtered block settings.
|
||
*/
|
||
|
||
function custom_class_name_addAttribute(settings) {
|
||
if (Object(external_this_wp_blocks_["hasBlockSupport"])(settings, 'customClassName', true)) {
|
||
// Use Lodash's assign to gracefully handle if attributes are undefined
|
||
settings.attributes = Object(external_lodash_["assign"])(settings.attributes, {
|
||
className: {
|
||
type: 'string'
|
||
}
|
||
});
|
||
}
|
||
|
||
return settings;
|
||
}
|
||
/**
|
||
* Override the default edit UI to include a new block inspector control for
|
||
* assigning the custom class name, if block supports custom class name.
|
||
*
|
||
* @param {Function|Component} BlockEdit Original component.
|
||
*
|
||
* @return {string} Wrapped component.
|
||
*/
|
||
|
||
var custom_class_name_withInspectorControl = Object(external_this_wp_compose_["createHigherOrderComponent"])(function (BlockEdit) {
|
||
return function (props) {
|
||
var hasCustomClassName = Object(external_this_wp_blocks_["hasBlockSupport"])(props.name, 'customClassName', true);
|
||
|
||
if (hasCustomClassName && props.isSelected) {
|
||
return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, Object(external_this_wp_element_["createElement"])(BlockEdit, props), Object(external_this_wp_element_["createElement"])(inspector_advanced_controls, null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["TextControl"], {
|
||
label: Object(external_this_wp_i18n_["__"])('Additional CSS Class(es)'),
|
||
value: props.attributes.className || '',
|
||
onChange: function onChange(nextValue) {
|
||
props.setAttributes({
|
||
className: nextValue !== '' ? nextValue : undefined
|
||
});
|
||
},
|
||
help: Object(external_this_wp_i18n_["__"])('Separate multiple classes with spaces.')
|
||
})));
|
||
}
|
||
|
||
return Object(external_this_wp_element_["createElement"])(BlockEdit, props);
|
||
};
|
||
}, 'withInspectorControl');
|
||
/**
|
||
* Override props assigned to save component to inject anchor ID, if block
|
||
* supports anchor. This is only applied if the block's save result is an
|
||
* element and not a markup string.
|
||
*
|
||
* @param {Object} extraProps Additional props applied to save element.
|
||
* @param {Object} blockType Block type.
|
||
* @param {Object} attributes Current block attributes.
|
||
*
|
||
* @return {Object} Filtered props applied to save element.
|
||
*/
|
||
|
||
function custom_class_name_addSaveProps(extraProps, blockType, attributes) {
|
||
if (Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'customClassName', true) && attributes.className) {
|
||
extraProps.className = classnames_default()(extraProps.className, attributes.className);
|
||
}
|
||
|
||
return extraProps;
|
||
}
|
||
/**
|
||
* Given an HTML string, returns an array of class names assigned to the root
|
||
* element in the markup.
|
||
*
|
||
* @param {string} innerHTML Markup string from which to extract classes.
|
||
*
|
||
* @return {string[]} Array of class names assigned to the root element.
|
||
*/
|
||
|
||
function getHTMLRootElementClasses(innerHTML) {
|
||
innerHTML = "<div data-custom-class-name>".concat(innerHTML, "</div>");
|
||
var parsed = Object(external_this_wp_blocks_["parseWithAttributeSchema"])(innerHTML, {
|
||
type: 'string',
|
||
source: 'attribute',
|
||
selector: '[data-custom-class-name] > *',
|
||
attribute: 'class'
|
||
});
|
||
return parsed ? parsed.trim().split(/\s+/) : [];
|
||
}
|
||
/**
|
||
* Given a parsed set of block attributes, if the block supports custom class
|
||
* names and an unknown class (per the block's serialization behavior) is
|
||
* found, the unknown classes are treated as custom classes. This prevents the
|
||
* block from being considered as invalid.
|
||
*
|
||
* @param {Object} blockAttributes Original block attributes.
|
||
* @param {Object} blockType Block type settings.
|
||
* @param {string} innerHTML Original block markup.
|
||
*
|
||
* @return {Object} Filtered block attributes.
|
||
*/
|
||
|
||
function addParsedDifference(blockAttributes, blockType, innerHTML) {
|
||
if (Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'customClassName', true)) {
|
||
// To determine difference, serialize block given the known set of
|
||
// attributes, with the exception of `className`. This will determine
|
||
// the default set of classes. From there, any difference in innerHTML
|
||
// can be considered as custom classes.
|
||
var attributesSansClassName = Object(external_lodash_["omit"])(blockAttributes, ['className']);
|
||
var serialized = Object(external_this_wp_blocks_["getSaveContent"])(blockType, attributesSansClassName);
|
||
var defaultClasses = getHTMLRootElementClasses(serialized);
|
||
var actualClasses = getHTMLRootElementClasses(innerHTML);
|
||
var customClasses = Object(external_lodash_["difference"])(actualClasses, defaultClasses);
|
||
|
||
if (customClasses.length) {
|
||
blockAttributes.className = customClasses.join(' ');
|
||
} else if (serialized) {
|
||
delete blockAttributes.className;
|
||
}
|
||
}
|
||
|
||
return blockAttributes;
|
||
}
|
||
Object(external_this_wp_hooks_["addFilter"])('blocks.registerBlockType', 'core/custom-class-name/attribute', custom_class_name_addAttribute);
|
||
Object(external_this_wp_hooks_["addFilter"])('editor.BlockEdit', 'core/editor/custom-class-name/with-inspector-control', custom_class_name_withInspectorControl);
|
||
Object(external_this_wp_hooks_["addFilter"])('blocks.getSaveContent.extraProps', 'core/custom-class-name/save-props', custom_class_name_addSaveProps);
|
||
Object(external_this_wp_hooks_["addFilter"])('blocks.getBlockAttributes', 'core/custom-class-name/addParsedDifference', addParsedDifference);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/generated-class-name.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Override props assigned to save component to inject generated className if
|
||
* block supports it. This is only applied if the block's save result is an
|
||
* element and not a markup string.
|
||
*
|
||
* @param {Object} extraProps Additional props applied to save element.
|
||
* @param {Object} blockType Block type.
|
||
*
|
||
* @return {Object} Filtered props applied to save element.
|
||
*/
|
||
|
||
function addGeneratedClassName(extraProps, blockType) {
|
||
// Adding the generated className
|
||
if (Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'className', true)) {
|
||
if (typeof extraProps.className === 'string') {
|
||
// We have some extra classes and want to add the default classname
|
||
// We use uniq to prevent duplicate classnames
|
||
extraProps.className = Object(external_lodash_["uniq"])([Object(external_this_wp_blocks_["getBlockDefaultClassName"])(blockType.name)].concat(Object(toConsumableArray["a" /* default */])(extraProps.className.split(' ')))).join(' ').trim();
|
||
} else {
|
||
// There is no string in the className variable,
|
||
// so we just dump the default name in there
|
||
extraProps.className = Object(external_this_wp_blocks_["getBlockDefaultClassName"])(blockType.name);
|
||
}
|
||
}
|
||
|
||
return extraProps;
|
||
}
|
||
Object(external_this_wp_hooks_["addFilter"])('blocks.getSaveContent.extraProps', 'core/generated-class-name/save-props', addGeneratedClassName);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/index.js
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
// EXTERNAL MODULE: ./node_modules/traverse/index.js
|
||
var traverse = __webpack_require__(228);
|
||
var traverse_default = /*#__PURE__*/__webpack_require__.n(traverse);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js
|
||
var esm_typeof = __webpack_require__(31);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/ast/parse.js
|
||
|
||
|
||
/* eslint-disable @wordpress/no-unused-vars-before-return */
|
||
// Adapted from https://github.com/reworkcss/css
|
||
// because we needed to remove source map support.
|
||
// http://www.w3.org/TR/CSS21/grammar.htm
|
||
// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027
|
||
var commentre = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//g;
|
||
/* harmony default export */ var parse = (function (css, options) {
|
||
options = options || {};
|
||
/**
|
||
* Positional.
|
||
*/
|
||
|
||
var lineno = 1;
|
||
var column = 1;
|
||
/**
|
||
* Update lineno and column based on `str`.
|
||
*/
|
||
|
||
function updatePosition(str) {
|
||
var lines = str.match(/\n/g);
|
||
|
||
if (lines) {
|
||
lineno += lines.length;
|
||
}
|
||
|
||
var i = str.lastIndexOf('\n'); // eslint-disable-next-line no-bitwise
|
||
|
||
column = ~i ? str.length - i : column + str.length;
|
||
}
|
||
/**
|
||
* Mark position and patch `node.position`.
|
||
*/
|
||
|
||
|
||
function position() {
|
||
var start = {
|
||
line: lineno,
|
||
column: column
|
||
};
|
||
return function (node) {
|
||
node.position = new Position(start);
|
||
whitespace();
|
||
return node;
|
||
};
|
||
}
|
||
/**
|
||
* Store position information for a node
|
||
*/
|
||
|
||
|
||
function Position(start) {
|
||
this.start = start;
|
||
this.end = {
|
||
line: lineno,
|
||
column: column
|
||
};
|
||
this.source = options.source;
|
||
}
|
||
/**
|
||
* Non-enumerable source string
|
||
*/
|
||
|
||
|
||
Position.prototype.content = css;
|
||
/**
|
||
* Error `msg`.
|
||
*/
|
||
|
||
var errorsList = [];
|
||
|
||
function error(msg) {
|
||
var err = new Error(options.source + ':' + lineno + ':' + column + ': ' + msg);
|
||
err.reason = msg;
|
||
err.filename = options.source;
|
||
err.line = lineno;
|
||
err.column = column;
|
||
err.source = css;
|
||
|
||
if (options.silent) {
|
||
errorsList.push(err);
|
||
} else {
|
||
throw err;
|
||
}
|
||
}
|
||
/**
|
||
* Parse stylesheet.
|
||
*/
|
||
|
||
|
||
function stylesheet() {
|
||
var rulesList = rules();
|
||
return {
|
||
type: 'stylesheet',
|
||
stylesheet: {
|
||
source: options.source,
|
||
rules: rulesList,
|
||
parsingErrors: errorsList
|
||
}
|
||
};
|
||
}
|
||
/**
|
||
* Opening brace.
|
||
*/
|
||
|
||
|
||
function open() {
|
||
return match(/^{\s*/);
|
||
}
|
||
/**
|
||
* Closing brace.
|
||
*/
|
||
|
||
|
||
function close() {
|
||
return match(/^}/);
|
||
}
|
||
/**
|
||
* Parse ruleset.
|
||
*/
|
||
|
||
|
||
function rules() {
|
||
var node;
|
||
var accumulator = [];
|
||
whitespace();
|
||
comments(accumulator);
|
||
|
||
while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {
|
||
if (node !== false) {
|
||
accumulator.push(node);
|
||
comments(accumulator);
|
||
}
|
||
}
|
||
|
||
return accumulator;
|
||
}
|
||
/**
|
||
* Match `re` and return captures.
|
||
*/
|
||
|
||
|
||
function match(re) {
|
||
var m = re.exec(css);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
var str = m[0];
|
||
updatePosition(str);
|
||
css = css.slice(str.length);
|
||
return m;
|
||
}
|
||
/**
|
||
* Parse whitespace.
|
||
*/
|
||
|
||
|
||
function whitespace() {
|
||
match(/^\s*/);
|
||
}
|
||
/**
|
||
* Parse comments;
|
||
*/
|
||
|
||
|
||
function comments(accumulator) {
|
||
var c;
|
||
accumulator = accumulator || []; // eslint-disable-next-line no-cond-assign
|
||
|
||
while (c = comment()) {
|
||
if (c !== false) {
|
||
accumulator.push(c);
|
||
}
|
||
}
|
||
|
||
return accumulator;
|
||
}
|
||
/**
|
||
* Parse comment.
|
||
*/
|
||
|
||
|
||
function comment() {
|
||
var pos = position();
|
||
|
||
if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {
|
||
return;
|
||
}
|
||
|
||
var i = 2;
|
||
|
||
while ('' !== css.charAt(i) && ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {
|
||
++i;
|
||
}
|
||
|
||
i += 2;
|
||
|
||
if ('' === css.charAt(i - 1)) {
|
||
return error('End of comment missing');
|
||
}
|
||
|
||
var str = css.slice(2, i - 2);
|
||
column += 2;
|
||
updatePosition(str);
|
||
css = css.slice(i);
|
||
column += 2;
|
||
return pos({
|
||
type: 'comment',
|
||
comment: str
|
||
});
|
||
}
|
||
/**
|
||
* Parse selector.
|
||
*/
|
||
|
||
|
||
function selector() {
|
||
var m = match(/^([^{]+)/);
|
||
|
||
if (!m) {
|
||
return;
|
||
} // FIXME: Remove all comments from selectors http://ostermiller.org/findcomment.html
|
||
|
||
|
||
return trim(m[0]).replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*\/+/g, '').replace(/"(?:\\"|[^"])*"|'(?:\\'|[^'])*'/g, function (matched) {
|
||
return matched.replace(/,/g, "\u200C");
|
||
}).split(/\s*(?![^(]*\)),\s*/).map(function (s) {
|
||
return s.replace(/\u200C/g, ',');
|
||
});
|
||
}
|
||
/**
|
||
* Parse declaration.
|
||
*/
|
||
|
||
|
||
function declaration() {
|
||
var pos = position(); // prop
|
||
|
||
var prop = match(/^(\*?[-#\/\*\\\w]+(\[[0-9a-z_-]+\])?)\s*/);
|
||
|
||
if (!prop) {
|
||
return;
|
||
}
|
||
|
||
prop = trim(prop[0]); // :
|
||
|
||
if (!match(/^:\s*/)) {
|
||
return error("property missing ':'");
|
||
} // val
|
||
|
||
|
||
var val = match(/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^\)]*?\)|[^};])+)/);
|
||
var ret = pos({
|
||
type: 'declaration',
|
||
property: prop.replace(commentre, ''),
|
||
value: val ? trim(val[0]).replace(commentre, '') : ''
|
||
}); // ;
|
||
|
||
match(/^[;\s]*/);
|
||
return ret;
|
||
}
|
||
/**
|
||
* Parse declarations.
|
||
*/
|
||
|
||
|
||
function declarations() {
|
||
var decls = [];
|
||
|
||
if (!open()) {
|
||
return error("missing '{'");
|
||
}
|
||
|
||
comments(decls); // declarations
|
||
|
||
var decl; // eslint-disable-next-line no-cond-assign
|
||
|
||
while (decl = declaration()) {
|
||
if (decl !== false) {
|
||
decls.push(decl);
|
||
comments(decls);
|
||
}
|
||
}
|
||
|
||
if (!close()) {
|
||
return error("missing '}'");
|
||
}
|
||
|
||
return decls;
|
||
}
|
||
/**
|
||
* Parse keyframe.
|
||
*/
|
||
|
||
|
||
function keyframe() {
|
||
var m;
|
||
var vals = [];
|
||
var pos = position(); // eslint-disable-next-line no-cond-assign
|
||
|
||
while (m = match(/^((\d+\.\d+|\.\d+|\d+)%?|[a-z]+)\s*/)) {
|
||
vals.push(m[1]);
|
||
match(/^,\s*/);
|
||
}
|
||
|
||
if (!vals.length) {
|
||
return;
|
||
}
|
||
|
||
return pos({
|
||
type: 'keyframe',
|
||
values: vals,
|
||
declarations: declarations()
|
||
});
|
||
}
|
||
/**
|
||
* Parse keyframes.
|
||
*/
|
||
|
||
|
||
function atkeyframes() {
|
||
var pos = position();
|
||
var m = match(/^@([-\w]+)?keyframes\s*/);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
var vendor = m[1]; // identifier
|
||
|
||
m = match(/^([-\w]+)\s*/);
|
||
|
||
if (!m) {
|
||
return error('@keyframes missing name');
|
||
}
|
||
|
||
var name = m[1];
|
||
|
||
if (!open()) {
|
||
return error("@keyframes missing '{'");
|
||
}
|
||
|
||
var frame;
|
||
var frames = comments(); // eslint-disable-next-line no-cond-assign
|
||
|
||
while (frame = keyframe()) {
|
||
frames.push(frame);
|
||
frames = frames.concat(comments());
|
||
}
|
||
|
||
if (!close()) {
|
||
return error("@keyframes missing '}'");
|
||
}
|
||
|
||
return pos({
|
||
type: 'keyframes',
|
||
name: name,
|
||
vendor: vendor,
|
||
keyframes: frames
|
||
});
|
||
}
|
||
/**
|
||
* Parse supports.
|
||
*/
|
||
|
||
|
||
function atsupports() {
|
||
var pos = position();
|
||
var m = match(/^@supports *([^{]+)/);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
var supports = trim(m[1]);
|
||
|
||
if (!open()) {
|
||
return error("@supports missing '{'");
|
||
}
|
||
|
||
var style = comments().concat(rules());
|
||
|
||
if (!close()) {
|
||
return error("@supports missing '}'");
|
||
}
|
||
|
||
return pos({
|
||
type: 'supports',
|
||
supports: supports,
|
||
rules: style
|
||
});
|
||
}
|
||
/**
|
||
* Parse host.
|
||
*/
|
||
|
||
|
||
function athost() {
|
||
var pos = position();
|
||
var m = match(/^@host\s*/);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
if (!open()) {
|
||
return error("@host missing '{'");
|
||
}
|
||
|
||
var style = comments().concat(rules());
|
||
|
||
if (!close()) {
|
||
return error("@host missing '}'");
|
||
}
|
||
|
||
return pos({
|
||
type: 'host',
|
||
rules: style
|
||
});
|
||
}
|
||
/**
|
||
* Parse media.
|
||
*/
|
||
|
||
|
||
function atmedia() {
|
||
var pos = position();
|
||
var m = match(/^@media *([^{]+)/);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
var media = trim(m[1]);
|
||
|
||
if (!open()) {
|
||
return error("@media missing '{'");
|
||
}
|
||
|
||
var style = comments().concat(rules());
|
||
|
||
if (!close()) {
|
||
return error("@media missing '}'");
|
||
}
|
||
|
||
return pos({
|
||
type: 'media',
|
||
media: media,
|
||
rules: style
|
||
});
|
||
}
|
||
/**
|
||
* Parse custom-media.
|
||
*/
|
||
|
||
|
||
function atcustommedia() {
|
||
var pos = position();
|
||
var m = match(/^@custom-media\s+(--[^\s]+)\s*([^{;]+);/);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
return pos({
|
||
type: 'custom-media',
|
||
name: trim(m[1]),
|
||
media: trim(m[2])
|
||
});
|
||
}
|
||
/**
|
||
* Parse paged media.
|
||
*/
|
||
|
||
|
||
function atpage() {
|
||
var pos = position();
|
||
var m = match(/^@page */);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
var sel = selector() || [];
|
||
|
||
if (!open()) {
|
||
return error("@page missing '{'");
|
||
}
|
||
|
||
var decls = comments(); // declarations
|
||
|
||
var decl; // eslint-disable-next-line no-cond-assign
|
||
|
||
while (decl = declaration()) {
|
||
decls.push(decl);
|
||
decls = decls.concat(comments());
|
||
}
|
||
|
||
if (!close()) {
|
||
return error("@page missing '}'");
|
||
}
|
||
|
||
return pos({
|
||
type: 'page',
|
||
selectors: sel,
|
||
declarations: decls
|
||
});
|
||
}
|
||
/**
|
||
* Parse document.
|
||
*/
|
||
|
||
|
||
function atdocument() {
|
||
var pos = position();
|
||
var m = match(/^@([-\w]+)?document *([^{]+)/);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
var vendor = trim(m[1]);
|
||
var doc = trim(m[2]);
|
||
|
||
if (!open()) {
|
||
return error("@document missing '{'");
|
||
}
|
||
|
||
var style = comments().concat(rules());
|
||
|
||
if (!close()) {
|
||
return error("@document missing '}'");
|
||
}
|
||
|
||
return pos({
|
||
type: 'document',
|
||
document: doc,
|
||
vendor: vendor,
|
||
rules: style
|
||
});
|
||
}
|
||
/**
|
||
* Parse font-face.
|
||
*/
|
||
|
||
|
||
function atfontface() {
|
||
var pos = position();
|
||
var m = match(/^@font-face\s*/);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
if (!open()) {
|
||
return error("@font-face missing '{'");
|
||
}
|
||
|
||
var decls = comments(); // declarations
|
||
|
||
var decl; // eslint-disable-next-line no-cond-assign
|
||
|
||
while (decl = declaration()) {
|
||
decls.push(decl);
|
||
decls = decls.concat(comments());
|
||
}
|
||
|
||
if (!close()) {
|
||
return error("@font-face missing '}'");
|
||
}
|
||
|
||
return pos({
|
||
type: 'font-face',
|
||
declarations: decls
|
||
});
|
||
}
|
||
/**
|
||
* Parse import
|
||
*/
|
||
|
||
|
||
var atimport = _compileAtrule('import');
|
||
/**
|
||
* Parse charset
|
||
*/
|
||
|
||
|
||
var atcharset = _compileAtrule('charset');
|
||
/**
|
||
* Parse namespace
|
||
*/
|
||
|
||
|
||
var atnamespace = _compileAtrule('namespace');
|
||
/**
|
||
* Parse non-block at-rules
|
||
*/
|
||
|
||
|
||
function _compileAtrule(name) {
|
||
var re = new RegExp('^@' + name + '\\s*([^;]+);');
|
||
return function () {
|
||
var pos = position();
|
||
var m = match(re);
|
||
|
||
if (!m) {
|
||
return;
|
||
}
|
||
|
||
var ret = {
|
||
type: name
|
||
};
|
||
ret[name] = m[1].trim();
|
||
return pos(ret);
|
||
};
|
||
}
|
||
/**
|
||
* Parse at rule.
|
||
*/
|
||
|
||
|
||
function atrule() {
|
||
if (css[0] !== '@') {
|
||
return;
|
||
}
|
||
|
||
return atkeyframes() || atmedia() || atcustommedia() || atsupports() || atimport() || atcharset() || atnamespace() || atdocument() || atpage() || athost() || atfontface();
|
||
}
|
||
/**
|
||
* Parse rule.
|
||
*/
|
||
|
||
|
||
function rule() {
|
||
var pos = position();
|
||
var sel = selector();
|
||
|
||
if (!sel) {
|
||
return error('selector missing');
|
||
}
|
||
|
||
comments();
|
||
return pos({
|
||
type: 'rule',
|
||
selectors: sel,
|
||
declarations: declarations()
|
||
});
|
||
}
|
||
|
||
return addParent(stylesheet());
|
||
});
|
||
/**
|
||
* Trim `str`.
|
||
*/
|
||
|
||
function trim(str) {
|
||
return str ? str.replace(/^\s+|\s+$/g, '') : '';
|
||
}
|
||
/**
|
||
* Adds non-enumerable parent node reference to each node.
|
||
*/
|
||
|
||
|
||
function addParent(obj, parent) {
|
||
var isNode = obj && typeof obj.type === 'string';
|
||
var childParent = isNode ? obj : parent;
|
||
|
||
for (var k in obj) {
|
||
var value = obj[k];
|
||
|
||
if (Array.isArray(value)) {
|
||
value.forEach(function (v) {
|
||
addParent(v, childParent);
|
||
});
|
||
} else if (value && Object(esm_typeof["a" /* default */])(value) === 'object') {
|
||
addParent(value, childParent);
|
||
}
|
||
}
|
||
|
||
if (isNode) {
|
||
Object.defineProperty(obj, 'parent', {
|
||
configurable: true,
|
||
writable: true,
|
||
enumerable: false,
|
||
value: parent || null
|
||
});
|
||
}
|
||
|
||
return obj;
|
||
}
|
||
/* eslint-enable @wordpress/no-unused-vars-before-return */
|
||
|
||
// EXTERNAL MODULE: ./node_modules/inherits/inherits_browser.js
|
||
var inherits_browser = __webpack_require__(122);
|
||
var inherits_browser_default = /*#__PURE__*/__webpack_require__.n(inherits_browser);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/ast/stringify/compiler.js
|
||
// Adapted from https://github.com/reworkcss/css
|
||
// because we needed to remove source map support.
|
||
|
||
/**
|
||
* Expose `Compiler`.
|
||
*/
|
||
/* harmony default export */ var stringify_compiler = (Compiler);
|
||
/**
|
||
* Initialize a compiler.
|
||
*/
|
||
|
||
function Compiler(opts) {
|
||
this.options = opts || {};
|
||
}
|
||
/**
|
||
* Emit `str`
|
||
*/
|
||
|
||
|
||
Compiler.prototype.emit = function (str) {
|
||
return str;
|
||
};
|
||
/**
|
||
* Visit `node`.
|
||
*/
|
||
|
||
|
||
Compiler.prototype.visit = function (node) {
|
||
return this[node.type](node);
|
||
};
|
||
/**
|
||
* Map visit over array of `nodes`, optionally using a `delim`
|
||
*/
|
||
|
||
|
||
Compiler.prototype.mapVisit = function (nodes, delim) {
|
||
var buf = '';
|
||
delim = delim || '';
|
||
|
||
for (var i = 0, length = nodes.length; i < length; i++) {
|
||
buf += this.visit(nodes[i]);
|
||
|
||
if (delim && i < length - 1) {
|
||
buf += this.emit(delim);
|
||
}
|
||
}
|
||
|
||
return buf;
|
||
};
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/ast/stringify/compress.js
|
||
// Adapted from https://github.com/reworkcss/css
|
||
// because we needed to remove source map support.
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Expose compiler.
|
||
*/
|
||
|
||
/* harmony default export */ var compress = (compress_Compiler);
|
||
/**
|
||
* Initialize a new `Compiler`.
|
||
*/
|
||
|
||
function compress_Compiler(options) {
|
||
stringify_compiler.call(this, options);
|
||
}
|
||
/**
|
||
* Inherit from `Base.prototype`.
|
||
*/
|
||
|
||
|
||
inherits_browser_default()(compress_Compiler, stringify_compiler);
|
||
/**
|
||
* Compile `node`.
|
||
*/
|
||
|
||
compress_Compiler.prototype.compile = function (node) {
|
||
return node.stylesheet.rules.map(this.visit, this).join('');
|
||
};
|
||
/**
|
||
* Visit comment node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.comment = function (node) {
|
||
return this.emit('', node.position);
|
||
};
|
||
/**
|
||
* Visit import node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.import = function (node) {
|
||
return this.emit('@import ' + node.import + ';', node.position);
|
||
};
|
||
/**
|
||
* Visit media node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.media = function (node) {
|
||
return this.emit('@media ' + node.media, node.position) + this.emit('{') + this.mapVisit(node.rules) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit document node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.document = function (node) {
|
||
var doc = '@' + (node.vendor || '') + 'document ' + node.document;
|
||
return this.emit(doc, node.position) + this.emit('{') + this.mapVisit(node.rules) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit charset node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.charset = function (node) {
|
||
return this.emit('@charset ' + node.charset + ';', node.position);
|
||
};
|
||
/**
|
||
* Visit namespace node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.namespace = function (node) {
|
||
return this.emit('@namespace ' + node.namespace + ';', node.position);
|
||
};
|
||
/**
|
||
* Visit supports node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.supports = function (node) {
|
||
return this.emit('@supports ' + node.supports, node.position) + this.emit('{') + this.mapVisit(node.rules) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit keyframes node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.keyframes = function (node) {
|
||
return this.emit('@' + (node.vendor || '') + 'keyframes ' + node.name, node.position) + this.emit('{') + this.mapVisit(node.keyframes) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit keyframe node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.keyframe = function (node) {
|
||
var decls = node.declarations;
|
||
return this.emit(node.values.join(','), node.position) + this.emit('{') + this.mapVisit(decls) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit page node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.page = function (node) {
|
||
var sel = node.selectors.length ? node.selectors.join(', ') : '';
|
||
return this.emit('@page ' + sel, node.position) + this.emit('{') + this.mapVisit(node.declarations) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit font-face node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype['font-face'] = function (node) {
|
||
return this.emit('@font-face', node.position) + this.emit('{') + this.mapVisit(node.declarations) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit host node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.host = function (node) {
|
||
return this.emit('@host', node.position) + this.emit('{') + this.mapVisit(node.rules) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit custom-media node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype['custom-media'] = function (node) {
|
||
return this.emit('@custom-media ' + node.name + ' ' + node.media + ';', node.position);
|
||
};
|
||
/**
|
||
* Visit rule node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.rule = function (node) {
|
||
var decls = node.declarations;
|
||
|
||
if (!decls.length) {
|
||
return '';
|
||
}
|
||
|
||
return this.emit(node.selectors.join(','), node.position) + this.emit('{') + this.mapVisit(decls) + this.emit('}');
|
||
};
|
||
/**
|
||
* Visit declaration node.
|
||
*/
|
||
|
||
|
||
compress_Compiler.prototype.declaration = function (node) {
|
||
return this.emit(node.property + ':' + node.value, node.position) + this.emit(';');
|
||
};
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/ast/stringify/identity.js
|
||
/* eslint-disable @wordpress/no-unused-vars-before-return */
|
||
// Adapted from https://github.com/reworkcss/css
|
||
// because we needed to remove source map support.
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Expose compiler.
|
||
*/
|
||
|
||
/* harmony default export */ var identity = (identity_Compiler);
|
||
/**
|
||
* Initialize a new `Compiler`.
|
||
*/
|
||
|
||
function identity_Compiler(options) {
|
||
options = options || {};
|
||
stringify_compiler.call(this, options);
|
||
this.indentation = options.indent;
|
||
}
|
||
/**
|
||
* Inherit from `Base.prototype`.
|
||
*/
|
||
|
||
|
||
inherits_browser_default()(identity_Compiler, stringify_compiler);
|
||
/**
|
||
* Compile `node`.
|
||
*/
|
||
|
||
identity_Compiler.prototype.compile = function (node) {
|
||
return this.stylesheet(node);
|
||
};
|
||
/**
|
||
* Visit stylesheet node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.stylesheet = function (node) {
|
||
return this.mapVisit(node.stylesheet.rules, '\n\n');
|
||
};
|
||
/**
|
||
* Visit comment node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.comment = function (node) {
|
||
return this.emit(this.indent() + '/*' + node.comment + '*/', node.position);
|
||
};
|
||
/**
|
||
* Visit import node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.import = function (node) {
|
||
return this.emit('@import ' + node.import + ';', node.position);
|
||
};
|
||
/**
|
||
* Visit media node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.media = function (node) {
|
||
return this.emit('@media ' + node.media, node.position) + this.emit(' {\n' + this.indent(1)) + this.mapVisit(node.rules, '\n\n') + this.emit(this.indent(-1) + '\n}');
|
||
};
|
||
/**
|
||
* Visit document node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.document = function (node) {
|
||
var doc = '@' + (node.vendor || '') + 'document ' + node.document;
|
||
return this.emit(doc, node.position) + this.emit(' ' + ' {\n' + this.indent(1)) + this.mapVisit(node.rules, '\n\n') + this.emit(this.indent(-1) + '\n}');
|
||
};
|
||
/**
|
||
* Visit charset node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.charset = function (node) {
|
||
return this.emit('@charset ' + node.charset + ';', node.position);
|
||
};
|
||
/**
|
||
* Visit namespace node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.namespace = function (node) {
|
||
return this.emit('@namespace ' + node.namespace + ';', node.position);
|
||
};
|
||
/**
|
||
* Visit supports node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.supports = function (node) {
|
||
return this.emit('@supports ' + node.supports, node.position) + this.emit(' {\n' + this.indent(1)) + this.mapVisit(node.rules, '\n\n') + this.emit(this.indent(-1) + '\n}');
|
||
};
|
||
/**
|
||
* Visit keyframes node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.keyframes = function (node) {
|
||
return this.emit('@' + (node.vendor || '') + 'keyframes ' + node.name, node.position) + this.emit(' {\n' + this.indent(1)) + this.mapVisit(node.keyframes, '\n') + this.emit(this.indent(-1) + '}');
|
||
};
|
||
/**
|
||
* Visit keyframe node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.keyframe = function (node) {
|
||
var decls = node.declarations;
|
||
return this.emit(this.indent()) + this.emit(node.values.join(', '), node.position) + this.emit(' {\n' + this.indent(1)) + this.mapVisit(decls, '\n') + this.emit(this.indent(-1) + '\n' + this.indent() + '}\n');
|
||
};
|
||
/**
|
||
* Visit page node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.page = function (node) {
|
||
var sel = node.selectors.length ? node.selectors.join(', ') + ' ' : '';
|
||
return this.emit('@page ' + sel, node.position) + this.emit('{\n') + this.emit(this.indent(1)) + this.mapVisit(node.declarations, '\n') + this.emit(this.indent(-1)) + this.emit('\n}');
|
||
};
|
||
/**
|
||
* Visit font-face node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype['font-face'] = function (node) {
|
||
return this.emit('@font-face ', node.position) + this.emit('{\n') + this.emit(this.indent(1)) + this.mapVisit(node.declarations, '\n') + this.emit(this.indent(-1)) + this.emit('\n}');
|
||
};
|
||
/**
|
||
* Visit host node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.host = function (node) {
|
||
return this.emit('@host', node.position) + this.emit(' {\n' + this.indent(1)) + this.mapVisit(node.rules, '\n\n') + this.emit(this.indent(-1) + '\n}');
|
||
};
|
||
/**
|
||
* Visit custom-media node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype['custom-media'] = function (node) {
|
||
return this.emit('@custom-media ' + node.name + ' ' + node.media + ';', node.position);
|
||
};
|
||
/**
|
||
* Visit rule node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.rule = function (node) {
|
||
var indent = this.indent();
|
||
var decls = node.declarations;
|
||
|
||
if (!decls.length) {
|
||
return '';
|
||
}
|
||
|
||
return this.emit(node.selectors.map(function (s) {
|
||
return indent + s;
|
||
}).join(',\n'), node.position) + this.emit(' {\n') + this.emit(this.indent(1)) + this.mapVisit(decls, '\n') + this.emit(this.indent(-1)) + this.emit('\n' + this.indent() + '}');
|
||
};
|
||
/**
|
||
* Visit declaration node.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.declaration = function (node) {
|
||
return this.emit(this.indent()) + this.emit(node.property + ': ' + node.value, node.position) + this.emit(';');
|
||
};
|
||
/**
|
||
* Increase, decrease or return current indentation.
|
||
*/
|
||
|
||
|
||
identity_Compiler.prototype.indent = function (level) {
|
||
this.level = this.level || 1;
|
||
|
||
if (null !== level) {
|
||
this.level += level;
|
||
return '';
|
||
}
|
||
|
||
return Array(this.level).join(this.indentation || ' ');
|
||
};
|
||
/* eslint-enable @wordpress/no-unused-vars-before-return */
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/ast/stringify/index.js
|
||
// Adapted from https://github.com/reworkcss/css
|
||
// because we needed to remove source map support.
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Stringfy the given AST `node`.
|
||
*
|
||
* Options:
|
||
*
|
||
* - `compress` space-optimized output
|
||
* - `sourcemap` return an object with `.code` and `.map`
|
||
*
|
||
* @param {Object} node
|
||
* @param {Object} [options]
|
||
* @return {string}
|
||
*/
|
||
|
||
/* harmony default export */ var stringify = (function (node, options) {
|
||
options = options || {};
|
||
var compiler = options.compress ? new compress(options) : new identity(options);
|
||
var code = compiler.compile(node);
|
||
return code;
|
||
});
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/ast/index.js
|
||
// Adapted from https://github.com/reworkcss/css
|
||
// because we needed to remove source map support.
|
||
|
||
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/traverse.js
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
function traverseCSS(css, callback) {
|
||
try {
|
||
var parsed = parse(css);
|
||
var updated = traverse_default.a.map(parsed, function (node) {
|
||
if (!node) {
|
||
return node;
|
||
}
|
||
|
||
var updatedNode = callback(node);
|
||
return this.update(updatedNode);
|
||
});
|
||
return stringify(updated);
|
||
} catch (err) {
|
||
// eslint-disable-next-line no-console
|
||
console.warn('Error while traversing the CSS: ' + err);
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/* harmony default export */ var transform_styles_traverse = (traverseCSS);
|
||
|
||
// EXTERNAL MODULE: ./node_modules/url/url.js
|
||
var url_url = __webpack_require__(87);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/transforms/url-rewrite.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* Return `true` if the given path is http/https.
|
||
*
|
||
* @param {string} filePath path
|
||
*
|
||
* @return {boolean} is remote path.
|
||
*/
|
||
|
||
function isRemotePath(filePath) {
|
||
return /^(?:https?:)?\/\//.test(filePath);
|
||
}
|
||
/**
|
||
* Return `true` if the given filePath is an absolute url.
|
||
*
|
||
* @param {string} filePath path
|
||
*
|
||
* @return {boolean} is absolute path.
|
||
*/
|
||
|
||
|
||
function isAbsolutePath(filePath) {
|
||
return /^\/(?!\/)/.test(filePath);
|
||
}
|
||
/**
|
||
* Whether or not the url should be inluded.
|
||
*
|
||
* @param {Object} meta url meta info
|
||
*
|
||
* @return {boolean} is valid.
|
||
*/
|
||
|
||
|
||
function isValidURL(meta) {
|
||
// ignore hashes or data uris
|
||
if (meta.value.indexOf('data:') === 0 || meta.value.indexOf('#') === 0) {
|
||
return false;
|
||
}
|
||
|
||
if (isAbsolutePath(meta.value)) {
|
||
return false;
|
||
} // do not handle the http/https urls if `includeRemote` is false
|
||
|
||
|
||
if (isRemotePath(meta.value)) {
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
/**
|
||
* Get the absolute path of the url, relative to the basePath
|
||
*
|
||
* @param {string} str the url
|
||
* @param {string} baseURL base URL
|
||
*
|
||
* @return {string} the full path to the file
|
||
*/
|
||
|
||
|
||
function getResourcePath(str, baseURL) {
|
||
var pathname = Object(url_url["parse"])(str).pathname;
|
||
var filePath = Object(url_url["resolve"])(baseURL, pathname);
|
||
return filePath;
|
||
}
|
||
/**
|
||
* Process the single `url()` pattern
|
||
*
|
||
* @param {string} baseURL the base URL for relative URLs
|
||
* @return {Promise} the Promise
|
||
*/
|
||
|
||
|
||
function processURL(baseURL) {
|
||
return function (meta) {
|
||
var URL = getResourcePath(meta.value, baseURL);
|
||
return Object(objectSpread["a" /* default */])({}, meta, {
|
||
newUrl: 'url(' + meta.before + meta.quote + URL + meta.quote + meta.after + ')'
|
||
});
|
||
};
|
||
}
|
||
/**
|
||
* Get all `url()`s, and return the meta info
|
||
*
|
||
* @param {string} value decl.value
|
||
*
|
||
* @return {Array} the urls
|
||
*/
|
||
|
||
|
||
function getURLs(value) {
|
||
var reg = /url\((\s*)(['"]?)(.+?)\2(\s*)\)/g;
|
||
var match;
|
||
var URLs = [];
|
||
|
||
while ((match = reg.exec(value)) !== null) {
|
||
var meta = {
|
||
source: match[0],
|
||
before: match[1],
|
||
quote: match[2],
|
||
value: match[3],
|
||
after: match[4]
|
||
};
|
||
|
||
if (isValidURL(meta)) {
|
||
URLs.push(meta);
|
||
}
|
||
}
|
||
|
||
return URLs;
|
||
}
|
||
/**
|
||
* Replace the raw value's `url()` segment to the new value
|
||
*
|
||
* @param {string} raw the raw value
|
||
* @param {Array} URLs the URLs to replace
|
||
*
|
||
* @return {string} the new value
|
||
*/
|
||
|
||
|
||
function replaceURLs(raw, URLs) {
|
||
URLs.forEach(function (item) {
|
||
raw = raw.replace(item.source, item.newUrl);
|
||
});
|
||
return raw;
|
||
}
|
||
|
||
var url_rewrite_rewrite = function rewrite(rootURL) {
|
||
return function (node) {
|
||
if (node.type === 'declaration') {
|
||
var updatedURLs = getURLs(node.value).map(processURL(rootURL));
|
||
return Object(objectSpread["a" /* default */])({}, node, {
|
||
value: replaceURLs(node.value, updatedURLs)
|
||
});
|
||
}
|
||
|
||
return node;
|
||
};
|
||
};
|
||
|
||
/* harmony default export */ var url_rewrite = (url_rewrite_rewrite);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/transforms/wrap.js
|
||
|
||
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* @constant string IS_ROOT_TAG Regex to check if the selector is a root tag selector.
|
||
*/
|
||
|
||
var IS_ROOT_TAG = /^(body|html|:root).*$/;
|
||
|
||
var wrap_wrap = function wrap(namespace) {
|
||
var ignore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
||
return function (node) {
|
||
var updateSelector = function updateSelector(selector) {
|
||
if (Object(external_lodash_["includes"])(ignore, selector.trim())) {
|
||
return selector;
|
||
} // Anything other than a root tag is always prefixed.
|
||
|
||
|
||
{
|
||
if (!selector.match(IS_ROOT_TAG)) {
|
||
return namespace + ' ' + selector;
|
||
}
|
||
} // HTML and Body elements cannot be contained within our container so lets extract their styles.
|
||
|
||
return selector.replace(/^(body|html|:root)/, namespace);
|
||
};
|
||
|
||
if (node.type === 'rule') {
|
||
return Object(objectSpread["a" /* default */])({}, node, {
|
||
selectors: node.selectors.map(updateSelector)
|
||
});
|
||
}
|
||
|
||
return node;
|
||
};
|
||
};
|
||
|
||
/* harmony default export */ var transforms_wrap = (wrap_wrap);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/index.js
|
||
/**
|
||
* External dependencies
|
||
*/
|
||
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Applies a series of CSS rule transforms to wrap selectors inside a given class and/or rewrite URLs depending on the parameters passed.
|
||
*
|
||
* @param {Array} styles CSS rules.
|
||
* @param {string} wrapperClassName Wrapper Class Name.
|
||
* @return {Array} converted rules.
|
||
*/
|
||
|
||
var transform_styles_transformStyles = function transformStyles(styles) {
|
||
var wrapperClassName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
||
return Object(external_lodash_["map"])(styles, function (_ref) {
|
||
var css = _ref.css,
|
||
baseURL = _ref.baseURL;
|
||
var transforms = [];
|
||
|
||
if (wrapperClassName) {
|
||
transforms.push(transforms_wrap(wrapperClassName));
|
||
}
|
||
|
||
if (baseURL) {
|
||
transforms.push(url_rewrite(baseURL));
|
||
}
|
||
|
||
if (transforms.length) {
|
||
return transform_styles_traverse(css, Object(external_this_wp_compose_["compose"])(transforms));
|
||
}
|
||
|
||
return css;
|
||
});
|
||
};
|
||
|
||
/* harmony default export */ var transform_styles = (transform_styles_transformStyles);
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/index.js
|
||
|
||
|
||
// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/index.js
|
||
/* concated harmony reexport AlignmentToolbar */__webpack_require__.d(__webpack_exports__, "AlignmentToolbar", function() { return alignment_toolbar; });
|
||
/* concated harmony reexport Autocomplete */__webpack_require__.d(__webpack_exports__, "Autocomplete", function() { return autocomplete; });
|
||
/* concated harmony reexport BlockAlignmentToolbar */__webpack_require__.d(__webpack_exports__, "BlockAlignmentToolbar", function() { return block_alignment_toolbar; });
|
||
/* concated harmony reexport BlockControls */__webpack_require__.d(__webpack_exports__, "BlockControls", function() { return block_controls; });
|
||
/* concated harmony reexport BlockEdit */__webpack_require__.d(__webpack_exports__, "BlockEdit", function() { return block_edit; });
|
||
/* concated harmony reexport BlockFormatControls */__webpack_require__.d(__webpack_exports__, "BlockFormatControls", function() { return block_format_controls; });
|
||
/* concated harmony reexport BlockIcon */__webpack_require__.d(__webpack_exports__, "BlockIcon", function() { return BlockIcon; });
|
||
/* concated harmony reexport BlockNavigationDropdown */__webpack_require__.d(__webpack_exports__, "BlockNavigationDropdown", function() { return dropdown; });
|
||
/* concated harmony reexport __experimentalBlockNavigationList */__webpack_require__.d(__webpack_exports__, "__experimentalBlockNavigationList", function() { return BlockNavigationList; });
|
||
/* concated harmony reexport BlockVerticalAlignmentToolbar */__webpack_require__.d(__webpack_exports__, "BlockVerticalAlignmentToolbar", function() { return block_vertical_alignment_toolbar; });
|
||
/* concated harmony reexport ButtonBlockerAppender */__webpack_require__.d(__webpack_exports__, "ButtonBlockerAppender", function() { return button_block_appender; });
|
||
/* concated harmony reexport ColorPalette */__webpack_require__.d(__webpack_exports__, "ColorPalette", function() { return color_palette; });
|
||
/* concated harmony reexport ContrastChecker */__webpack_require__.d(__webpack_exports__, "ContrastChecker", function() { return contrast_checker; });
|
||
/* concated harmony reexport InnerBlocks */__webpack_require__.d(__webpack_exports__, "InnerBlocks", function() { return inner_blocks; });
|
||
/* concated harmony reexport InspectorAdvancedControls */__webpack_require__.d(__webpack_exports__, "InspectorAdvancedControls", function() { return inspector_advanced_controls; });
|
||
/* concated harmony reexport InspectorControls */__webpack_require__.d(__webpack_exports__, "InspectorControls", function() { return inspector_controls; });
|
||
/* concated harmony reexport MediaPlaceholder */__webpack_require__.d(__webpack_exports__, "MediaPlaceholder", function() { return media_placeholder; });
|
||
/* concated harmony reexport MediaUpload */__webpack_require__.d(__webpack_exports__, "MediaUpload", function() { return media_upload; });
|
||
/* concated harmony reexport MediaUploadCheck */__webpack_require__.d(__webpack_exports__, "MediaUploadCheck", function() { return check; });
|
||
/* concated harmony reexport PanelColorSettings */__webpack_require__.d(__webpack_exports__, "PanelColorSettings", function() { return panel_color_settings; });
|
||
/* concated harmony reexport PlainText */__webpack_require__.d(__webpack_exports__, "PlainText", function() { return plain_text; });
|
||
/* concated harmony reexport RichText */__webpack_require__.d(__webpack_exports__, "RichText", function() { return rich_text; });
|
||
/* concated harmony reexport RichTextShortcut */__webpack_require__.d(__webpack_exports__, "RichTextShortcut", function() { return shortcut_RichTextShortcut; });
|
||
/* concated harmony reexport RichTextToolbarButton */__webpack_require__.d(__webpack_exports__, "RichTextToolbarButton", function() { return RichTextToolbarButton; });
|
||
/* concated harmony reexport __unstableRichTextInputEvent */__webpack_require__.d(__webpack_exports__, "__unstableRichTextInputEvent", function() { return input_event_unstableRichTextInputEvent; });
|
||
/* concated harmony reexport URLInput */__webpack_require__.d(__webpack_exports__, "URLInput", function() { return url_input; });
|
||
/* concated harmony reexport URLInputButton */__webpack_require__.d(__webpack_exports__, "URLInputButton", function() { return url_input_button; });
|
||
/* concated harmony reexport URLPopover */__webpack_require__.d(__webpack_exports__, "URLPopover", function() { return url_popover; });
|
||
/* concated harmony reexport withColorContext */__webpack_require__.d(__webpack_exports__, "withColorContext", function() { return with_color_context; });
|
||
/* concated harmony reexport __experimentalBlockSettingsMenuFirstItem */__webpack_require__.d(__webpack_exports__, "__experimentalBlockSettingsMenuFirstItem", function() { return block_settings_menu_first_item; });
|
||
/* concated harmony reexport __experimentalBlockSettingsMenuPluginsExtension */__webpack_require__.d(__webpack_exports__, "__experimentalBlockSettingsMenuPluginsExtension", function() { return block_settings_menu_plugins_extension; });
|
||
/* concated harmony reexport __experimentalInserterMenuExtension */__webpack_require__.d(__webpack_exports__, "__experimentalInserterMenuExtension", function() { return inserter_menu_extension; });
|
||
/* concated harmony reexport BlockEditorKeyboardShortcuts */__webpack_require__.d(__webpack_exports__, "BlockEditorKeyboardShortcuts", function() { return block_editor_keyboard_shortcuts; });
|
||
/* concated harmony reexport BlockInspector */__webpack_require__.d(__webpack_exports__, "BlockInspector", function() { return block_inspector; });
|
||
/* concated harmony reexport BlockList */__webpack_require__.d(__webpack_exports__, "BlockList", function() { return block_list; });
|
||
/* concated harmony reexport BlockMover */__webpack_require__.d(__webpack_exports__, "BlockMover", function() { return block_mover; });
|
||
/* concated harmony reexport BlockPreview */__webpack_require__.d(__webpack_exports__, "BlockPreview", function() { return block_preview; });
|
||
/* concated harmony reexport BlockSelectionClearer */__webpack_require__.d(__webpack_exports__, "BlockSelectionClearer", function() { return block_selection_clearer; });
|
||
/* concated harmony reexport BlockSettingsMenu */__webpack_require__.d(__webpack_exports__, "BlockSettingsMenu", function() { return block_settings_menu; });
|
||
/* concated harmony reexport BlockTitle */__webpack_require__.d(__webpack_exports__, "BlockTitle", function() { return block_title; });
|
||
/* concated harmony reexport BlockToolbar */__webpack_require__.d(__webpack_exports__, "BlockToolbar", function() { return block_toolbar; });
|
||
/* concated harmony reexport CopyHandler */__webpack_require__.d(__webpack_exports__, "CopyHandler", function() { return copy_handler; });
|
||
/* concated harmony reexport DefaultBlockAppender */__webpack_require__.d(__webpack_exports__, "DefaultBlockAppender", function() { return default_block_appender; });
|
||
/* concated harmony reexport Inserter */__webpack_require__.d(__webpack_exports__, "Inserter", function() { return inserter; });
|
||
/* concated harmony reexport MultiBlocksSwitcher */__webpack_require__.d(__webpack_exports__, "MultiBlocksSwitcher", function() { return multi_blocks_switcher; });
|
||
/* concated harmony reexport MultiSelectScrollIntoView */__webpack_require__.d(__webpack_exports__, "MultiSelectScrollIntoView", function() { return multi_select_scroll_into_view; });
|
||
/* concated harmony reexport NavigableToolbar */__webpack_require__.d(__webpack_exports__, "NavigableToolbar", function() { return navigable_toolbar; });
|
||
/* concated harmony reexport ObserveTyping */__webpack_require__.d(__webpack_exports__, "ObserveTyping", function() { return observe_typing; });
|
||
/* concated harmony reexport PreserveScrollInReorder */__webpack_require__.d(__webpack_exports__, "PreserveScrollInReorder", function() { return PreserveScrollInReorder; });
|
||
/* concated harmony reexport SkipToSelectedBlock */__webpack_require__.d(__webpack_exports__, "SkipToSelectedBlock", function() { return skip_to_selected_block; });
|
||
/* concated harmony reexport Typewriter */__webpack_require__.d(__webpack_exports__, "Typewriter", function() { return typewriter; });
|
||
/* concated harmony reexport Warning */__webpack_require__.d(__webpack_exports__, "Warning", function() { return warning; });
|
||
/* concated harmony reexport WritingFlow */__webpack_require__.d(__webpack_exports__, "WritingFlow", function() { return writing_flow; });
|
||
/* concated harmony reexport BlockEditorProvider */__webpack_require__.d(__webpack_exports__, "BlockEditorProvider", function() { return provider; });
|
||
/* concated harmony reexport getColorClassName */__webpack_require__.d(__webpack_exports__, "getColorClassName", function() { return getColorClassName; });
|
||
/* concated harmony reexport getColorObjectByAttributeValues */__webpack_require__.d(__webpack_exports__, "getColorObjectByAttributeValues", function() { return utils_getColorObjectByAttributeValues; });
|
||
/* concated harmony reexport getColorObjectByColorValue */__webpack_require__.d(__webpack_exports__, "getColorObjectByColorValue", function() { return utils_getColorObjectByColorValue; });
|
||
/* concated harmony reexport createCustomColorsHOC */__webpack_require__.d(__webpack_exports__, "createCustomColorsHOC", function() { return createCustomColorsHOC; });
|
||
/* concated harmony reexport withColors */__webpack_require__.d(__webpack_exports__, "withColors", function() { return withColors; });
|
||
/* concated harmony reexport getFontSize */__webpack_require__.d(__webpack_exports__, "getFontSize", function() { return utils_getFontSize; });
|
||
/* concated harmony reexport getFontSizeClass */__webpack_require__.d(__webpack_exports__, "getFontSizeClass", function() { return getFontSizeClass; });
|
||
/* concated harmony reexport FontSizePicker */__webpack_require__.d(__webpack_exports__, "FontSizePicker", function() { return font_size_picker; });
|
||
/* concated harmony reexport withFontSizes */__webpack_require__.d(__webpack_exports__, "withFontSizes", function() { return with_font_sizes; });
|
||
/* concated harmony reexport transformStyles */__webpack_require__.d(__webpack_exports__, "transformStyles", function() { return transform_styles; });
|
||
/* concated harmony reexport storeConfig */__webpack_require__.d(__webpack_exports__, "storeConfig", function() { return storeConfig; });
|
||
/* concated harmony reexport SETTINGS_DEFAULTS */__webpack_require__.d(__webpack_exports__, "SETTINGS_DEFAULTS", function() { return SETTINGS_DEFAULTS; });
|
||
/**
|
||
* WordPress dependencies
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Internal dependencies
|
||
*/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 39:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _nonIterableRest; });
|
||
function _nonIterableRest() {
|
||
throw new TypeError("Invalid attempt to destructure non-iterable instance");
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 4:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["data"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 41:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["isShallowEqual"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 43:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["viewport"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 45:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = function memize( fn, options ) {
|
||
var size = 0,
|
||
maxSize, head, tail;
|
||
|
||
if ( options && options.maxSize ) {
|
||
maxSize = options.maxSize;
|
||
}
|
||
|
||
function memoized( /* ...args */ ) {
|
||
var node = head,
|
||
len = arguments.length,
|
||
args, i;
|
||
|
||
searchCache: while ( node ) {
|
||
// Perform a shallow equality test to confirm that whether the node
|
||
// under test is a candidate for the arguments passed. Two arrays
|
||
// are shallowly equal if their length matches and each entry is
|
||
// strictly equal between the two sets. Avoid abstracting to a
|
||
// function which could incur an arguments leaking deoptimization.
|
||
|
||
// Check whether node arguments match arguments length
|
||
if ( node.args.length !== arguments.length ) {
|
||
node = node.next;
|
||
continue;
|
||
}
|
||
|
||
// Check whether node arguments match arguments values
|
||
for ( i = 0; i < len; i++ ) {
|
||
if ( node.args[ i ] !== arguments[ i ] ) {
|
||
node = node.next;
|
||
continue searchCache;
|
||
}
|
||
}
|
||
|
||
// At this point we can assume we've found a match
|
||
|
||
// Surface matched node to head if not already
|
||
if ( node !== head ) {
|
||
// As tail, shift to previous. Must only shift if not also
|
||
// head, since if both head and tail, there is no previous.
|
||
if ( node === tail ) {
|
||
tail = node.prev;
|
||
}
|
||
|
||
// Adjust siblings to point to each other. If node was tail,
|
||
// this also handles new tail's empty `next` assignment.
|
||
node.prev.next = node.next;
|
||
if ( node.next ) {
|
||
node.next.prev = node.prev;
|
||
}
|
||
|
||
node.next = head;
|
||
node.prev = null;
|
||
head.prev = node;
|
||
head = node;
|
||
}
|
||
|
||
// Return immediately
|
||
return node.val;
|
||
}
|
||
|
||
// No cached value found. Continue to insertion phase:
|
||
|
||
// Create a copy of arguments (avoid leaking deoptimization)
|
||
args = new Array( len );
|
||
for ( i = 0; i < len; i++ ) {
|
||
args[ i ] = arguments[ i ];
|
||
}
|
||
|
||
node = {
|
||
args: args,
|
||
|
||
// Generate the result from original function
|
||
val: fn.apply( null, args )
|
||
};
|
||
|
||
// Don't need to check whether node is already head, since it would
|
||
// have been returned above already if it was
|
||
|
||
// Shift existing head down list
|
||
if ( head ) {
|
||
head.prev = node;
|
||
node.next = head;
|
||
} else {
|
||
// If no head, follows that there's no tail (at initial or reset)
|
||
tail = node;
|
||
}
|
||
|
||
// Trim tail if we're reached max size and are pending cache insertion
|
||
if ( size === maxSize ) {
|
||
tail = tail.prev;
|
||
tail.next = null;
|
||
} else {
|
||
size++;
|
||
}
|
||
|
||
head = node;
|
||
|
||
return node.val;
|
||
}
|
||
|
||
memoized.clear = function() {
|
||
head = null;
|
||
tail = null;
|
||
size = 0;
|
||
};
|
||
|
||
if ( false ) {}
|
||
|
||
return memoized;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 46:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["a11y"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 48:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/**
|
||
* Copyright (c) 2014-present, Facebook, Inc.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/
|
||
|
||
var runtime = (function (exports) {
|
||
"use strict";
|
||
|
||
var Op = Object.prototype;
|
||
var hasOwn = Op.hasOwnProperty;
|
||
var undefined; // More compressible than void 0.
|
||
var $Symbol = typeof Symbol === "function" ? Symbol : {};
|
||
var iteratorSymbol = $Symbol.iterator || "@@iterator";
|
||
var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
|
||
var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
|
||
|
||
function wrap(innerFn, outerFn, self, tryLocsList) {
|
||
// If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
|
||
var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
|
||
var generator = Object.create(protoGenerator.prototype);
|
||
var context = new Context(tryLocsList || []);
|
||
|
||
// The ._invoke method unifies the implementations of the .next,
|
||
// .throw, and .return methods.
|
||
generator._invoke = makeInvokeMethod(innerFn, self, context);
|
||
|
||
return generator;
|
||
}
|
||
exports.wrap = wrap;
|
||
|
||
// Try/catch helper to minimize deoptimizations. Returns a completion
|
||
// record like context.tryEntries[i].completion. This interface could
|
||
// have been (and was previously) designed to take a closure to be
|
||
// invoked without arguments, but in all the cases we care about we
|
||
// already have an existing method we want to call, so there's no need
|
||
// to create a new function object. We can even get away with assuming
|
||
// the method takes exactly one argument, since that happens to be true
|
||
// in every case, so we don't have to touch the arguments object. The
|
||
// only additional allocation required is the completion record, which
|
||
// has a stable shape and so hopefully should be cheap to allocate.
|
||
function tryCatch(fn, obj, arg) {
|
||
try {
|
||
return { type: "normal", arg: fn.call(obj, arg) };
|
||
} catch (err) {
|
||
return { type: "throw", arg: err };
|
||
}
|
||
}
|
||
|
||
var GenStateSuspendedStart = "suspendedStart";
|
||
var GenStateSuspendedYield = "suspendedYield";
|
||
var GenStateExecuting = "executing";
|
||
var GenStateCompleted = "completed";
|
||
|
||
// Returning this object from the innerFn has the same effect as
|
||
// breaking out of the dispatch switch statement.
|
||
var ContinueSentinel = {};
|
||
|
||
// Dummy constructor functions that we use as the .constructor and
|
||
// .constructor.prototype properties for functions that return Generator
|
||
// objects. For full spec compliance, you may wish to configure your
|
||
// minifier not to mangle the names of these two functions.
|
||
function Generator() {}
|
||
function GeneratorFunction() {}
|
||
function GeneratorFunctionPrototype() {}
|
||
|
||
// This is a polyfill for %IteratorPrototype% for environments that
|
||
// don't natively support it.
|
||
var IteratorPrototype = {};
|
||
IteratorPrototype[iteratorSymbol] = function () {
|
||
return this;
|
||
};
|
||
|
||
var getProto = Object.getPrototypeOf;
|
||
var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
|
||
if (NativeIteratorPrototype &&
|
||
NativeIteratorPrototype !== Op &&
|
||
hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
|
||
// This environment has a native %IteratorPrototype%; use it instead
|
||
// of the polyfill.
|
||
IteratorPrototype = NativeIteratorPrototype;
|
||
}
|
||
|
||
var Gp = GeneratorFunctionPrototype.prototype =
|
||
Generator.prototype = Object.create(IteratorPrototype);
|
||
GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
|
||
GeneratorFunctionPrototype.constructor = GeneratorFunction;
|
||
GeneratorFunctionPrototype[toStringTagSymbol] =
|
||
GeneratorFunction.displayName = "GeneratorFunction";
|
||
|
||
// Helper for defining the .next, .throw, and .return methods of the
|
||
// Iterator interface in terms of a single ._invoke method.
|
||
function defineIteratorMethods(prototype) {
|
||
["next", "throw", "return"].forEach(function(method) {
|
||
prototype[method] = function(arg) {
|
||
return this._invoke(method, arg);
|
||
};
|
||
});
|
||
}
|
||
|
||
exports.isGeneratorFunction = function(genFun) {
|
||
var ctor = typeof genFun === "function" && genFun.constructor;
|
||
return ctor
|
||
? ctor === GeneratorFunction ||
|
||
// For the native GeneratorFunction constructor, the best we can
|
||
// do is to check its .name property.
|
||
(ctor.displayName || ctor.name) === "GeneratorFunction"
|
||
: false;
|
||
};
|
||
|
||
exports.mark = function(genFun) {
|
||
if (Object.setPrototypeOf) {
|
||
Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
|
||
} else {
|
||
genFun.__proto__ = GeneratorFunctionPrototype;
|
||
if (!(toStringTagSymbol in genFun)) {
|
||
genFun[toStringTagSymbol] = "GeneratorFunction";
|
||
}
|
||
}
|
||
genFun.prototype = Object.create(Gp);
|
||
return genFun;
|
||
};
|
||
|
||
// Within the body of any async function, `await x` is transformed to
|
||
// `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
|
||
// `hasOwn.call(value, "__await")` to determine if the yielded value is
|
||
// meant to be awaited.
|
||
exports.awrap = function(arg) {
|
||
return { __await: arg };
|
||
};
|
||
|
||
function AsyncIterator(generator) {
|
||
function invoke(method, arg, resolve, reject) {
|
||
var record = tryCatch(generator[method], generator, arg);
|
||
if (record.type === "throw") {
|
||
reject(record.arg);
|
||
} else {
|
||
var result = record.arg;
|
||
var value = result.value;
|
||
if (value &&
|
||
typeof value === "object" &&
|
||
hasOwn.call(value, "__await")) {
|
||
return Promise.resolve(value.__await).then(function(value) {
|
||
invoke("next", value, resolve, reject);
|
||
}, function(err) {
|
||
invoke("throw", err, resolve, reject);
|
||
});
|
||
}
|
||
|
||
return Promise.resolve(value).then(function(unwrapped) {
|
||
// When a yielded Promise is resolved, its final value becomes
|
||
// the .value of the Promise<{value,done}> result for the
|
||
// current iteration.
|
||
result.value = unwrapped;
|
||
resolve(result);
|
||
}, function(error) {
|
||
// If a rejected Promise was yielded, throw the rejection back
|
||
// into the async generator function so it can be handled there.
|
||
return invoke("throw", error, resolve, reject);
|
||
});
|
||
}
|
||
}
|
||
|
||
var previousPromise;
|
||
|
||
function enqueue(method, arg) {
|
||
function callInvokeWithMethodAndArg() {
|
||
return new Promise(function(resolve, reject) {
|
||
invoke(method, arg, resolve, reject);
|
||
});
|
||
}
|
||
|
||
return previousPromise =
|
||
// If enqueue has been called before, then we want to wait until
|
||
// all previous Promises have been resolved before calling invoke,
|
||
// so that results are always delivered in the correct order. If
|
||
// enqueue has not been called before, then it is important to
|
||
// call invoke immediately, without waiting on a callback to fire,
|
||
// so that the async generator function has the opportunity to do
|
||
// any necessary setup in a predictable way. This predictability
|
||
// is why the Promise constructor synchronously invokes its
|
||
// executor callback, and why async functions synchronously
|
||
// execute code before the first await. Since we implement simple
|
||
// async functions in terms of async generators, it is especially
|
||
// important to get this right, even though it requires care.
|
||
previousPromise ? previousPromise.then(
|
||
callInvokeWithMethodAndArg,
|
||
// Avoid propagating failures to Promises returned by later
|
||
// invocations of the iterator.
|
||
callInvokeWithMethodAndArg
|
||
) : callInvokeWithMethodAndArg();
|
||
}
|
||
|
||
// Define the unified helper method that is used to implement .next,
|
||
// .throw, and .return (see defineIteratorMethods).
|
||
this._invoke = enqueue;
|
||
}
|
||
|
||
defineIteratorMethods(AsyncIterator.prototype);
|
||
AsyncIterator.prototype[asyncIteratorSymbol] = function () {
|
||
return this;
|
||
};
|
||
exports.AsyncIterator = AsyncIterator;
|
||
|
||
// Note that simple async functions are implemented on top of
|
||
// AsyncIterator objects; they just return a Promise for the value of
|
||
// the final result produced by the iterator.
|
||
exports.async = function(innerFn, outerFn, self, tryLocsList) {
|
||
var iter = new AsyncIterator(
|
||
wrap(innerFn, outerFn, self, tryLocsList)
|
||
);
|
||
|
||
return exports.isGeneratorFunction(outerFn)
|
||
? iter // If outerFn is a generator, return the full iterator.
|
||
: iter.next().then(function(result) {
|
||
return result.done ? result.value : iter.next();
|
||
});
|
||
};
|
||
|
||
function makeInvokeMethod(innerFn, self, context) {
|
||
var state = GenStateSuspendedStart;
|
||
|
||
return function invoke(method, arg) {
|
||
if (state === GenStateExecuting) {
|
||
throw new Error("Generator is already running");
|
||
}
|
||
|
||
if (state === GenStateCompleted) {
|
||
if (method === "throw") {
|
||
throw arg;
|
||
}
|
||
|
||
// Be forgiving, per 25.3.3.3.3 of the spec:
|
||
// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
|
||
return doneResult();
|
||
}
|
||
|
||
context.method = method;
|
||
context.arg = arg;
|
||
|
||
while (true) {
|
||
var delegate = context.delegate;
|
||
if (delegate) {
|
||
var delegateResult = maybeInvokeDelegate(delegate, context);
|
||
if (delegateResult) {
|
||
if (delegateResult === ContinueSentinel) continue;
|
||
return delegateResult;
|
||
}
|
||
}
|
||
|
||
if (context.method === "next") {
|
||
// Setting context._sent for legacy support of Babel's
|
||
// function.sent implementation.
|
||
context.sent = context._sent = context.arg;
|
||
|
||
} else if (context.method === "throw") {
|
||
if (state === GenStateSuspendedStart) {
|
||
state = GenStateCompleted;
|
||
throw context.arg;
|
||
}
|
||
|
||
context.dispatchException(context.arg);
|
||
|
||
} else if (context.method === "return") {
|
||
context.abrupt("return", context.arg);
|
||
}
|
||
|
||
state = GenStateExecuting;
|
||
|
||
var record = tryCatch(innerFn, self, context);
|
||
if (record.type === "normal") {
|
||
// If an exception is thrown from innerFn, we leave state ===
|
||
// GenStateExecuting and loop back for another invocation.
|
||
state = context.done
|
||
? GenStateCompleted
|
||
: GenStateSuspendedYield;
|
||
|
||
if (record.arg === ContinueSentinel) {
|
||
continue;
|
||
}
|
||
|
||
return {
|
||
value: record.arg,
|
||
done: context.done
|
||
};
|
||
|
||
} else if (record.type === "throw") {
|
||
state = GenStateCompleted;
|
||
// Dispatch the exception by looping back around to the
|
||
// context.dispatchException(context.arg) call above.
|
||
context.method = "throw";
|
||
context.arg = record.arg;
|
||
}
|
||
}
|
||
};
|
||
}
|
||
|
||
// Call delegate.iterator[context.method](context.arg) and handle the
|
||
// result, either by returning a { value, done } result from the
|
||
// delegate iterator, or by modifying context.method and context.arg,
|
||
// setting context.delegate to null, and returning the ContinueSentinel.
|
||
function maybeInvokeDelegate(delegate, context) {
|
||
var method = delegate.iterator[context.method];
|
||
if (method === undefined) {
|
||
// A .throw or .return when the delegate iterator has no .throw
|
||
// method always terminates the yield* loop.
|
||
context.delegate = null;
|
||
|
||
if (context.method === "throw") {
|
||
// Note: ["return"] must be used for ES3 parsing compatibility.
|
||
if (delegate.iterator["return"]) {
|
||
// If the delegate iterator has a return method, give it a
|
||
// chance to clean up.
|
||
context.method = "return";
|
||
context.arg = undefined;
|
||
maybeInvokeDelegate(delegate, context);
|
||
|
||
if (context.method === "throw") {
|
||
// If maybeInvokeDelegate(context) changed context.method from
|
||
// "return" to "throw", let that override the TypeError below.
|
||
return ContinueSentinel;
|
||
}
|
||
}
|
||
|
||
context.method = "throw";
|
||
context.arg = new TypeError(
|
||
"The iterator does not provide a 'throw' method");
|
||
}
|
||
|
||
return ContinueSentinel;
|
||
}
|
||
|
||
var record = tryCatch(method, delegate.iterator, context.arg);
|
||
|
||
if (record.type === "throw") {
|
||
context.method = "throw";
|
||
context.arg = record.arg;
|
||
context.delegate = null;
|
||
return ContinueSentinel;
|
||
}
|
||
|
||
var info = record.arg;
|
||
|
||
if (! info) {
|
||
context.method = "throw";
|
||
context.arg = new TypeError("iterator result is not an object");
|
||
context.delegate = null;
|
||
return ContinueSentinel;
|
||
}
|
||
|
||
if (info.done) {
|
||
// Assign the result of the finished delegate to the temporary
|
||
// variable specified by delegate.resultName (see delegateYield).
|
||
context[delegate.resultName] = info.value;
|
||
|
||
// Resume execution at the desired location (see delegateYield).
|
||
context.next = delegate.nextLoc;
|
||
|
||
// If context.method was "throw" but the delegate handled the
|
||
// exception, let the outer generator proceed normally. If
|
||
// context.method was "next", forget context.arg since it has been
|
||
// "consumed" by the delegate iterator. If context.method was
|
||
// "return", allow the original .return call to continue in the
|
||
// outer generator.
|
||
if (context.method !== "return") {
|
||
context.method = "next";
|
||
context.arg = undefined;
|
||
}
|
||
|
||
} else {
|
||
// Re-yield the result returned by the delegate method.
|
||
return info;
|
||
}
|
||
|
||
// The delegate iterator is finished, so forget it and continue with
|
||
// the outer generator.
|
||
context.delegate = null;
|
||
return ContinueSentinel;
|
||
}
|
||
|
||
// Define Generator.prototype.{next,throw,return} in terms of the
|
||
// unified ._invoke helper method.
|
||
defineIteratorMethods(Gp);
|
||
|
||
Gp[toStringTagSymbol] = "Generator";
|
||
|
||
// A Generator should always return itself as the iterator object when the
|
||
// @@iterator function is called on it. Some browsers' implementations of the
|
||
// iterator prototype chain incorrectly implement this, causing the Generator
|
||
// object to not be returned from this call. This ensures that doesn't happen.
|
||
// See https://github.com/facebook/regenerator/issues/274 for more details.
|
||
Gp[iteratorSymbol] = function() {
|
||
return this;
|
||
};
|
||
|
||
Gp.toString = function() {
|
||
return "[object Generator]";
|
||
};
|
||
|
||
function pushTryEntry(locs) {
|
||
var entry = { tryLoc: locs[0] };
|
||
|
||
if (1 in locs) {
|
||
entry.catchLoc = locs[1];
|
||
}
|
||
|
||
if (2 in locs) {
|
||
entry.finallyLoc = locs[2];
|
||
entry.afterLoc = locs[3];
|
||
}
|
||
|
||
this.tryEntries.push(entry);
|
||
}
|
||
|
||
function resetTryEntry(entry) {
|
||
var record = entry.completion || {};
|
||
record.type = "normal";
|
||
delete record.arg;
|
||
entry.completion = record;
|
||
}
|
||
|
||
function Context(tryLocsList) {
|
||
// The root entry object (effectively a try statement without a catch
|
||
// or a finally block) gives us a place to store values thrown from
|
||
// locations where there is no enclosing try statement.
|
||
this.tryEntries = [{ tryLoc: "root" }];
|
||
tryLocsList.forEach(pushTryEntry, this);
|
||
this.reset(true);
|
||
}
|
||
|
||
exports.keys = function(object) {
|
||
var keys = [];
|
||
for (var key in object) {
|
||
keys.push(key);
|
||
}
|
||
keys.reverse();
|
||
|
||
// Rather than returning an object with a next method, we keep
|
||
// things simple and return the next function itself.
|
||
return function next() {
|
||
while (keys.length) {
|
||
var key = keys.pop();
|
||
if (key in object) {
|
||
next.value = key;
|
||
next.done = false;
|
||
return next;
|
||
}
|
||
}
|
||
|
||
// To avoid creating an additional object, we just hang the .value
|
||
// and .done properties off the next function object itself. This
|
||
// also ensures that the minifier will not anonymize the function.
|
||
next.done = true;
|
||
return next;
|
||
};
|
||
};
|
||
|
||
function values(iterable) {
|
||
if (iterable) {
|
||
var iteratorMethod = iterable[iteratorSymbol];
|
||
if (iteratorMethod) {
|
||
return iteratorMethod.call(iterable);
|
||
}
|
||
|
||
if (typeof iterable.next === "function") {
|
||
return iterable;
|
||
}
|
||
|
||
if (!isNaN(iterable.length)) {
|
||
var i = -1, next = function next() {
|
||
while (++i < iterable.length) {
|
||
if (hasOwn.call(iterable, i)) {
|
||
next.value = iterable[i];
|
||
next.done = false;
|
||
return next;
|
||
}
|
||
}
|
||
|
||
next.value = undefined;
|
||
next.done = true;
|
||
|
||
return next;
|
||
};
|
||
|
||
return next.next = next;
|
||
}
|
||
}
|
||
|
||
// Return an iterator with no values.
|
||
return { next: doneResult };
|
||
}
|
||
exports.values = values;
|
||
|
||
function doneResult() {
|
||
return { value: undefined, done: true };
|
||
}
|
||
|
||
Context.prototype = {
|
||
constructor: Context,
|
||
|
||
reset: function(skipTempReset) {
|
||
this.prev = 0;
|
||
this.next = 0;
|
||
// Resetting context._sent for legacy support of Babel's
|
||
// function.sent implementation.
|
||
this.sent = this._sent = undefined;
|
||
this.done = false;
|
||
this.delegate = null;
|
||
|
||
this.method = "next";
|
||
this.arg = undefined;
|
||
|
||
this.tryEntries.forEach(resetTryEntry);
|
||
|
||
if (!skipTempReset) {
|
||
for (var name in this) {
|
||
// Not sure about the optimal order of these conditions:
|
||
if (name.charAt(0) === "t" &&
|
||
hasOwn.call(this, name) &&
|
||
!isNaN(+name.slice(1))) {
|
||
this[name] = undefined;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
stop: function() {
|
||
this.done = true;
|
||
|
||
var rootEntry = this.tryEntries[0];
|
||
var rootRecord = rootEntry.completion;
|
||
if (rootRecord.type === "throw") {
|
||
throw rootRecord.arg;
|
||
}
|
||
|
||
return this.rval;
|
||
},
|
||
|
||
dispatchException: function(exception) {
|
||
if (this.done) {
|
||
throw exception;
|
||
}
|
||
|
||
var context = this;
|
||
function handle(loc, caught) {
|
||
record.type = "throw";
|
||
record.arg = exception;
|
||
context.next = loc;
|
||
|
||
if (caught) {
|
||
// If the dispatched exception was caught by a catch block,
|
||
// then let that catch block handle the exception normally.
|
||
context.method = "next";
|
||
context.arg = undefined;
|
||
}
|
||
|
||
return !! caught;
|
||
}
|
||
|
||
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
||
var entry = this.tryEntries[i];
|
||
var record = entry.completion;
|
||
|
||
if (entry.tryLoc === "root") {
|
||
// Exception thrown outside of any try block that could handle
|
||
// it, so set the completion value of the entire function to
|
||
// throw the exception.
|
||
return handle("end");
|
||
}
|
||
|
||
if (entry.tryLoc <= this.prev) {
|
||
var hasCatch = hasOwn.call(entry, "catchLoc");
|
||
var hasFinally = hasOwn.call(entry, "finallyLoc");
|
||
|
||
if (hasCatch && hasFinally) {
|
||
if (this.prev < entry.catchLoc) {
|
||
return handle(entry.catchLoc, true);
|
||
} else if (this.prev < entry.finallyLoc) {
|
||
return handle(entry.finallyLoc);
|
||
}
|
||
|
||
} else if (hasCatch) {
|
||
if (this.prev < entry.catchLoc) {
|
||
return handle(entry.catchLoc, true);
|
||
}
|
||
|
||
} else if (hasFinally) {
|
||
if (this.prev < entry.finallyLoc) {
|
||
return handle(entry.finallyLoc);
|
||
}
|
||
|
||
} else {
|
||
throw new Error("try statement without catch or finally");
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
abrupt: function(type, arg) {
|
||
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
||
var entry = this.tryEntries[i];
|
||
if (entry.tryLoc <= this.prev &&
|
||
hasOwn.call(entry, "finallyLoc") &&
|
||
this.prev < entry.finallyLoc) {
|
||
var finallyEntry = entry;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (finallyEntry &&
|
||
(type === "break" ||
|
||
type === "continue") &&
|
||
finallyEntry.tryLoc <= arg &&
|
||
arg <= finallyEntry.finallyLoc) {
|
||
// Ignore the finally entry if control is not jumping to a
|
||
// location outside the try/catch block.
|
||
finallyEntry = null;
|
||
}
|
||
|
||
var record = finallyEntry ? finallyEntry.completion : {};
|
||
record.type = type;
|
||
record.arg = arg;
|
||
|
||
if (finallyEntry) {
|
||
this.method = "next";
|
||
this.next = finallyEntry.finallyLoc;
|
||
return ContinueSentinel;
|
||
}
|
||
|
||
return this.complete(record);
|
||
},
|
||
|
||
complete: function(record, afterLoc) {
|
||
if (record.type === "throw") {
|
||
throw record.arg;
|
||
}
|
||
|
||
if (record.type === "break" ||
|
||
record.type === "continue") {
|
||
this.next = record.arg;
|
||
} else if (record.type === "return") {
|
||
this.rval = this.arg = record.arg;
|
||
this.method = "return";
|
||
this.next = "end";
|
||
} else if (record.type === "normal" && afterLoc) {
|
||
this.next = afterLoc;
|
||
}
|
||
|
||
return ContinueSentinel;
|
||
},
|
||
|
||
finish: function(finallyLoc) {
|
||
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
||
var entry = this.tryEntries[i];
|
||
if (entry.finallyLoc === finallyLoc) {
|
||
this.complete(entry.completion, entry.afterLoc);
|
||
resetTryEntry(entry);
|
||
return ContinueSentinel;
|
||
}
|
||
}
|
||
},
|
||
|
||
"catch": function(tryLoc) {
|
||
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
||
var entry = this.tryEntries[i];
|
||
if (entry.tryLoc === tryLoc) {
|
||
var record = entry.completion;
|
||
if (record.type === "throw") {
|
||
var thrown = record.arg;
|
||
resetTryEntry(entry);
|
||
}
|
||
return thrown;
|
||
}
|
||
}
|
||
|
||
// The context.catch method must only be called with a location
|
||
// argument that corresponds to a known catch block.
|
||
throw new Error("illegal catch attempt");
|
||
},
|
||
|
||
delegateYield: function(iterable, resultName, nextLoc) {
|
||
this.delegate = {
|
||
iterator: values(iterable),
|
||
resultName: resultName,
|
||
nextLoc: nextLoc
|
||
};
|
||
|
||
if (this.method === "next") {
|
||
// Deliberately forget the last sent value so that we don't
|
||
// accidentally pass it on to the delegate.
|
||
this.arg = undefined;
|
||
}
|
||
|
||
return ContinueSentinel;
|
||
}
|
||
};
|
||
|
||
// Regardless of whether this script is executing as a CommonJS module
|
||
// or not, return the runtime object so that we can declare the variable
|
||
// regeneratorRuntime in the outer scope, which allows this module to be
|
||
// injected easily by `bin/regenerator --include-runtime script.js`.
|
||
return exports;
|
||
|
||
}(
|
||
// If this script is executing as a CommonJS module, use module.exports
|
||
// as the regeneratorRuntime namespace. Otherwise create a new empty
|
||
// object. Either way, the resulting object will be used to initialize
|
||
// the regeneratorRuntime variable at the top of this file.
|
||
true ? module.exports : undefined
|
||
));
|
||
|
||
try {
|
||
regeneratorRuntime = runtime;
|
||
} catch (accidentalStrictMode) {
|
||
// This module should not be running in strict mode, so the above
|
||
// assignment should always work unless something is misconfigured. Just
|
||
// in case runtime.js accidentally runs in strict mode, we can escape
|
||
// strict mode using a global Function call. This could conceivably fail
|
||
// if a Content Security Policy forbids using Function, but in that case
|
||
// the proper solution is to fix the accidental strict mode problem. If
|
||
// you've misconfigured your bundler to force strict mode and applied a
|
||
// CSP to forbid Function, and you're not willing to fix either of those
|
||
// problems, please detail your unique predicament in a GitHub issue.
|
||
Function("r", "regeneratorRuntime = r")(runtime);
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 49:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1
|
||
// https://github.com/bgrins/TinyColor
|
||
// Brian Grinstead, MIT License
|
||
|
||
(function(Math) {
|
||
|
||
var trimLeft = /^\s+/,
|
||
trimRight = /\s+$/,
|
||
tinyCounter = 0,
|
||
mathRound = Math.round,
|
||
mathMin = Math.min,
|
||
mathMax = Math.max,
|
||
mathRandom = Math.random;
|
||
|
||
function tinycolor (color, opts) {
|
||
|
||
color = (color) ? color : '';
|
||
opts = opts || { };
|
||
|
||
// If input is already a tinycolor, return itself
|
||
if (color instanceof tinycolor) {
|
||
return color;
|
||
}
|
||
// If we are called as a function, call using new instead
|
||
if (!(this instanceof tinycolor)) {
|
||
return new tinycolor(color, opts);
|
||
}
|
||
|
||
var rgb = inputToRGB(color);
|
||
this._originalInput = color,
|
||
this._r = rgb.r,
|
||
this._g = rgb.g,
|
||
this._b = rgb.b,
|
||
this._a = rgb.a,
|
||
this._roundA = mathRound(100*this._a) / 100,
|
||
this._format = opts.format || rgb.format;
|
||
this._gradientType = opts.gradientType;
|
||
|
||
// Don't let the range of [0,255] come back in [0,1].
|
||
// Potentially lose a little bit of precision here, but will fix issues where
|
||
// .5 gets interpreted as half of the total, instead of half of 1
|
||
// If it was supposed to be 128, this was already taken care of by `inputToRgb`
|
||
if (this._r < 1) { this._r = mathRound(this._r); }
|
||
if (this._g < 1) { this._g = mathRound(this._g); }
|
||
if (this._b < 1) { this._b = mathRound(this._b); }
|
||
|
||
this._ok = rgb.ok;
|
||
this._tc_id = tinyCounter++;
|
||
}
|
||
|
||
tinycolor.prototype = {
|
||
isDark: function() {
|
||
return this.getBrightness() < 128;
|
||
},
|
||
isLight: function() {
|
||
return !this.isDark();
|
||
},
|
||
isValid: function() {
|
||
return this._ok;
|
||
},
|
||
getOriginalInput: function() {
|
||
return this._originalInput;
|
||
},
|
||
getFormat: function() {
|
||
return this._format;
|
||
},
|
||
getAlpha: function() {
|
||
return this._a;
|
||
},
|
||
getBrightness: function() {
|
||
//http://www.w3.org/TR/AERT#color-contrast
|
||
var rgb = this.toRgb();
|
||
return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
|
||
},
|
||
getLuminance: function() {
|
||
//http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
|
||
var rgb = this.toRgb();
|
||
var RsRGB, GsRGB, BsRGB, R, G, B;
|
||
RsRGB = rgb.r/255;
|
||
GsRGB = rgb.g/255;
|
||
BsRGB = rgb.b/255;
|
||
|
||
if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}
|
||
if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}
|
||
if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}
|
||
return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);
|
||
},
|
||
setAlpha: function(value) {
|
||
this._a = boundAlpha(value);
|
||
this._roundA = mathRound(100*this._a) / 100;
|
||
return this;
|
||
},
|
||
toHsv: function() {
|
||
var hsv = rgbToHsv(this._r, this._g, this._b);
|
||
return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
|
||
},
|
||
toHsvString: function() {
|
||
var hsv = rgbToHsv(this._r, this._g, this._b);
|
||
var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
|
||
return (this._a == 1) ?
|
||
"hsv(" + h + ", " + s + "%, " + v + "%)" :
|
||
"hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
|
||
},
|
||
toHsl: function() {
|
||
var hsl = rgbToHsl(this._r, this._g, this._b);
|
||
return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
|
||
},
|
||
toHslString: function() {
|
||
var hsl = rgbToHsl(this._r, this._g, this._b);
|
||
var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
|
||
return (this._a == 1) ?
|
||
"hsl(" + h + ", " + s + "%, " + l + "%)" :
|
||
"hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
|
||
},
|
||
toHex: function(allow3Char) {
|
||
return rgbToHex(this._r, this._g, this._b, allow3Char);
|
||
},
|
||
toHexString: function(allow3Char) {
|
||
return '#' + this.toHex(allow3Char);
|
||
},
|
||
toHex8: function(allow4Char) {
|
||
return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);
|
||
},
|
||
toHex8String: function(allow4Char) {
|
||
return '#' + this.toHex8(allow4Char);
|
||
},
|
||
toRgb: function() {
|
||
return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
|
||
},
|
||
toRgbString: function() {
|
||
return (this._a == 1) ?
|
||
"rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
|
||
"rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
|
||
},
|
||
toPercentageRgb: function() {
|
||
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 };
|
||
},
|
||
toPercentageRgbString: function() {
|
||
return (this._a == 1) ?
|
||
"rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
|
||
"rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
|
||
},
|
||
toName: function() {
|
||
if (this._a === 0) {
|
||
return "transparent";
|
||
}
|
||
|
||
if (this._a < 1) {
|
||
return false;
|
||
}
|
||
|
||
return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
|
||
},
|
||
toFilter: function(secondColor) {
|
||
var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);
|
||
var secondHex8String = hex8String;
|
||
var gradientType = this._gradientType ? "GradientType = 1, " : "";
|
||
|
||
if (secondColor) {
|
||
var s = tinycolor(secondColor);
|
||
secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);
|
||
}
|
||
|
||
return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
|
||
},
|
||
toString: function(format) {
|
||
var formatSet = !!format;
|
||
format = format || this._format;
|
||
|
||
var formattedString = false;
|
||
var hasAlpha = this._a < 1 && this._a >= 0;
|
||
var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name");
|
||
|
||
if (needsAlphaFormat) {
|
||
// Special case for "transparent", all other non-alpha formats
|
||
// will return rgba when there is transparency.
|
||
if (format === "name" && this._a === 0) {
|
||
return this.toName();
|
||
}
|
||
return this.toRgbString();
|
||
}
|
||
if (format === "rgb") {
|
||
formattedString = this.toRgbString();
|
||
}
|
||
if (format === "prgb") {
|
||
formattedString = this.toPercentageRgbString();
|
||
}
|
||
if (format === "hex" || format === "hex6") {
|
||
formattedString = this.toHexString();
|
||
}
|
||
if (format === "hex3") {
|
||
formattedString = this.toHexString(true);
|
||
}
|
||
if (format === "hex4") {
|
||
formattedString = this.toHex8String(true);
|
||
}
|
||
if (format === "hex8") {
|
||
formattedString = this.toHex8String();
|
||
}
|
||
if (format === "name") {
|
||
formattedString = this.toName();
|
||
}
|
||
if (format === "hsl") {
|
||
formattedString = this.toHslString();
|
||
}
|
||
if (format === "hsv") {
|
||
formattedString = this.toHsvString();
|
||
}
|
||
|
||
return formattedString || this.toHexString();
|
||
},
|
||
clone: function() {
|
||
return tinycolor(this.toString());
|
||
},
|
||
|
||
_applyModification: function(fn, args) {
|
||
var color = fn.apply(null, [this].concat([].slice.call(args)));
|
||
this._r = color._r;
|
||
this._g = color._g;
|
||
this._b = color._b;
|
||
this.setAlpha(color._a);
|
||
return this;
|
||
},
|
||
lighten: function() {
|
||
return this._applyModification(lighten, arguments);
|
||
},
|
||
brighten: function() {
|
||
return this._applyModification(brighten, arguments);
|
||
},
|
||
darken: function() {
|
||
return this._applyModification(darken, arguments);
|
||
},
|
||
desaturate: function() {
|
||
return this._applyModification(desaturate, arguments);
|
||
},
|
||
saturate: function() {
|
||
return this._applyModification(saturate, arguments);
|
||
},
|
||
greyscale: function() {
|
||
return this._applyModification(greyscale, arguments);
|
||
},
|
||
spin: function() {
|
||
return this._applyModification(spin, arguments);
|
||
},
|
||
|
||
_applyCombination: function(fn, args) {
|
||
return fn.apply(null, [this].concat([].slice.call(args)));
|
||
},
|
||
analogous: function() {
|
||
return this._applyCombination(analogous, arguments);
|
||
},
|
||
complement: function() {
|
||
return this._applyCombination(complement, arguments);
|
||
},
|
||
monochromatic: function() {
|
||
return this._applyCombination(monochromatic, arguments);
|
||
},
|
||
splitcomplement: function() {
|
||
return this._applyCombination(splitcomplement, arguments);
|
||
},
|
||
triad: function() {
|
||
return this._applyCombination(triad, arguments);
|
||
},
|
||
tetrad: function() {
|
||
return this._applyCombination(tetrad, arguments);
|
||
}
|
||
};
|
||
|
||
// If input is an object, force 1 into "1.0" to handle ratios properly
|
||
// String input requires "1.0" as input, so 1 will be treated as 1
|
||
tinycolor.fromRatio = function(color, opts) {
|
||
if (typeof color == "object") {
|
||
var newColor = {};
|
||
for (var i in color) {
|
||
if (color.hasOwnProperty(i)) {
|
||
if (i === "a") {
|
||
newColor[i] = color[i];
|
||
}
|
||
else {
|
||
newColor[i] = convertToPercentage(color[i]);
|
||
}
|
||
}
|
||
}
|
||
color = newColor;
|
||
}
|
||
|
||
return tinycolor(color, opts);
|
||
};
|
||
|
||
// Given a string or object, convert that input to RGB
|
||
// Possible string inputs:
|
||
//
|
||
// "red"
|
||
// "#f00" or "f00"
|
||
// "#ff0000" or "ff0000"
|
||
// "#ff000000" or "ff000000"
|
||
// "rgb 255 0 0" or "rgb (255, 0, 0)"
|
||
// "rgb 1.0 0 0" or "rgb (1, 0, 0)"
|
||
// "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
|
||
// "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
|
||
// "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
|
||
// "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
|
||
// "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
|
||
//
|
||
function inputToRGB(color) {
|
||
|
||
var rgb = { r: 0, g: 0, b: 0 };
|
||
var a = 1;
|
||
var s = null;
|
||
var v = null;
|
||
var l = null;
|
||
var ok = false;
|
||
var format = false;
|
||
|
||
if (typeof color == "string") {
|
||
color = stringInputToObject(color);
|
||
}
|
||
|
||
if (typeof color == "object") {
|
||
if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
|
||
rgb = rgbToRgb(color.r, color.g, color.b);
|
||
ok = true;
|
||
format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
|
||
}
|
||
else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
|
||
s = convertToPercentage(color.s);
|
||
v = convertToPercentage(color.v);
|
||
rgb = hsvToRgb(color.h, s, v);
|
||
ok = true;
|
||
format = "hsv";
|
||
}
|
||
else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
|
||
s = convertToPercentage(color.s);
|
||
l = convertToPercentage(color.l);
|
||
rgb = hslToRgb(color.h, s, l);
|
||
ok = true;
|
||
format = "hsl";
|
||
}
|
||
|
||
if (color.hasOwnProperty("a")) {
|
||
a = color.a;
|
||
}
|
||
}
|
||
|
||
a = boundAlpha(a);
|
||
|
||
return {
|
||
ok: ok,
|
||
format: color.format || format,
|
||
r: mathMin(255, mathMax(rgb.r, 0)),
|
||
g: mathMin(255, mathMax(rgb.g, 0)),
|
||
b: mathMin(255, mathMax(rgb.b, 0)),
|
||
a: a
|
||
};
|
||
}
|
||
|
||
|
||
// Conversion Functions
|
||
// --------------------
|
||
|
||
// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
|
||
// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
|
||
|
||
// `rgbToRgb`
|
||
// Handle bounds / percentage checking to conform to CSS color spec
|
||
// <http://www.w3.org/TR/css3-color/>
|
||
// *Assumes:* r, g, b in [0, 255] or [0, 1]
|
||
// *Returns:* { r, g, b } in [0, 255]
|
||
function rgbToRgb(r, g, b){
|
||
return {
|
||
r: bound01(r, 255) * 255,
|
||
g: bound01(g, 255) * 255,
|
||
b: bound01(b, 255) * 255
|
||
};
|
||
}
|
||
|
||
// `rgbToHsl`
|
||
// Converts an RGB color value to HSL.
|
||
// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
|
||
// *Returns:* { h, s, l } in [0,1]
|
||
function rgbToHsl(r, g, b) {
|
||
|
||
r = bound01(r, 255);
|
||
g = bound01(g, 255);
|
||
b = bound01(b, 255);
|
||
|
||
var max = mathMax(r, g, b), min = mathMin(r, g, b);
|
||
var h, s, l = (max + min) / 2;
|
||
|
||
if(max == min) {
|
||
h = s = 0; // achromatic
|
||
}
|
||
else {
|
||
var d = max - min;
|
||
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
||
switch(max) {
|
||
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
|
||
case g: h = (b - r) / d + 2; break;
|
||
case b: h = (r - g) / d + 4; break;
|
||
}
|
||
|
||
h /= 6;
|
||
}
|
||
|
||
return { h: h, s: s, l: l };
|
||
}
|
||
|
||
// `hslToRgb`
|
||
// Converts an HSL color value to RGB.
|
||
// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
|
||
// *Returns:* { r, g, b } in the set [0, 255]
|
||
function hslToRgb(h, s, l) {
|
||
var r, g, b;
|
||
|
||
h = bound01(h, 360);
|
||
s = bound01(s, 100);
|
||
l = bound01(l, 100);
|
||
|
||
function hue2rgb(p, q, t) {
|
||
if(t < 0) t += 1;
|
||
if(t > 1) t -= 1;
|
||
if(t < 1/6) return p + (q - p) * 6 * t;
|
||
if(t < 1/2) return q;
|
||
if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
|
||
return p;
|
||
}
|
||
|
||
if(s === 0) {
|
||
r = g = b = l; // achromatic
|
||
}
|
||
else {
|
||
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
||
var p = 2 * l - q;
|
||
r = hue2rgb(p, q, h + 1/3);
|
||
g = hue2rgb(p, q, h);
|
||
b = hue2rgb(p, q, h - 1/3);
|
||
}
|
||
|
||
return { r: r * 255, g: g * 255, b: b * 255 };
|
||
}
|
||
|
||
// `rgbToHsv`
|
||
// Converts an RGB color value to HSV
|
||
// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
|
||
// *Returns:* { h, s, v } in [0,1]
|
||
function rgbToHsv(r, g, b) {
|
||
|
||
r = bound01(r, 255);
|
||
g = bound01(g, 255);
|
||
b = bound01(b, 255);
|
||
|
||
var max = mathMax(r, g, b), min = mathMin(r, g, b);
|
||
var h, s, v = max;
|
||
|
||
var d = max - min;
|
||
s = max === 0 ? 0 : d / max;
|
||
|
||
if(max == min) {
|
||
h = 0; // achromatic
|
||
}
|
||
else {
|
||
switch(max) {
|
||
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
|
||
case g: h = (b - r) / d + 2; break;
|
||
case b: h = (r - g) / d + 4; break;
|
||
}
|
||
h /= 6;
|
||
}
|
||
return { h: h, s: s, v: v };
|
||
}
|
||
|
||
// `hsvToRgb`
|
||
// Converts an HSV color value to RGB.
|
||
// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
|
||
// *Returns:* { r, g, b } in the set [0, 255]
|
||
function hsvToRgb(h, s, v) {
|
||
|
||
h = bound01(h, 360) * 6;
|
||
s = bound01(s, 100);
|
||
v = bound01(v, 100);
|
||
|
||
var i = Math.floor(h),
|
||
f = h - i,
|
||
p = v * (1 - s),
|
||
q = v * (1 - f * s),
|
||
t = v * (1 - (1 - f) * s),
|
||
mod = i % 6,
|
||
r = [v, q, p, p, t, v][mod],
|
||
g = [t, v, v, q, p, p][mod],
|
||
b = [p, p, t, v, v, q][mod];
|
||
|
||
return { r: r * 255, g: g * 255, b: b * 255 };
|
||
}
|
||
|
||
// `rgbToHex`
|
||
// Converts an RGB color to hex
|
||
// Assumes r, g, and b are contained in the set [0, 255]
|
||
// Returns a 3 or 6 character hex
|
||
function rgbToHex(r, g, b, allow3Char) {
|
||
|
||
var hex = [
|
||
pad2(mathRound(r).toString(16)),
|
||
pad2(mathRound(g).toString(16)),
|
||
pad2(mathRound(b).toString(16))
|
||
];
|
||
|
||
// Return a 3 character hex if possible
|
||
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)) {
|
||
return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
|
||
}
|
||
|
||
return hex.join("");
|
||
}
|
||
|
||
// `rgbaToHex`
|
||
// Converts an RGBA color plus alpha transparency to hex
|
||
// Assumes r, g, b are contained in the set [0, 255] and
|
||
// a in [0, 1]. Returns a 4 or 8 character rgba hex
|
||
function rgbaToHex(r, g, b, a, allow4Char) {
|
||
|
||
var hex = [
|
||
pad2(mathRound(r).toString(16)),
|
||
pad2(mathRound(g).toString(16)),
|
||
pad2(mathRound(b).toString(16)),
|
||
pad2(convertDecimalToHex(a))
|
||
];
|
||
|
||
// Return a 4 character hex if possible
|
||
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)) {
|
||
return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
|
||
}
|
||
|
||
return hex.join("");
|
||
}
|
||
|
||
// `rgbaToArgbHex`
|
||
// Converts an RGBA color to an ARGB Hex8 string
|
||
// Rarely used, but required for "toFilter()"
|
||
function rgbaToArgbHex(r, g, b, a) {
|
||
|
||
var hex = [
|
||
pad2(convertDecimalToHex(a)),
|
||
pad2(mathRound(r).toString(16)),
|
||
pad2(mathRound(g).toString(16)),
|
||
pad2(mathRound(b).toString(16))
|
||
];
|
||
|
||
return hex.join("");
|
||
}
|
||
|
||
// `equals`
|
||
// Can be called with any tinycolor input
|
||
tinycolor.equals = function (color1, color2) {
|
||
if (!color1 || !color2) { return false; }
|
||
return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
|
||
};
|
||
|
||
tinycolor.random = function() {
|
||
return tinycolor.fromRatio({
|
||
r: mathRandom(),
|
||
g: mathRandom(),
|
||
b: mathRandom()
|
||
});
|
||
};
|
||
|
||
|
||
// Modification Functions
|
||
// ----------------------
|
||
// Thanks to less.js for some of the basics here
|
||
// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
|
||
|
||
function desaturate(color, amount) {
|
||
amount = (amount === 0) ? 0 : (amount || 10);
|
||
var hsl = tinycolor(color).toHsl();
|
||
hsl.s -= amount / 100;
|
||
hsl.s = clamp01(hsl.s);
|
||
return tinycolor(hsl);
|
||
}
|
||
|
||
function saturate(color, amount) {
|
||
amount = (amount === 0) ? 0 : (amount || 10);
|
||
var hsl = tinycolor(color).toHsl();
|
||
hsl.s += amount / 100;
|
||
hsl.s = clamp01(hsl.s);
|
||
return tinycolor(hsl);
|
||
}
|
||
|
||
function greyscale(color) {
|
||
return tinycolor(color).desaturate(100);
|
||
}
|
||
|
||
function lighten (color, amount) {
|
||
amount = (amount === 0) ? 0 : (amount || 10);
|
||
var hsl = tinycolor(color).toHsl();
|
||
hsl.l += amount / 100;
|
||
hsl.l = clamp01(hsl.l);
|
||
return tinycolor(hsl);
|
||
}
|
||
|
||
function brighten(color, amount) {
|
||
amount = (amount === 0) ? 0 : (amount || 10);
|
||
var rgb = tinycolor(color).toRgb();
|
||
rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
|
||
rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
|
||
rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
|
||
return tinycolor(rgb);
|
||
}
|
||
|
||
function darken (color, amount) {
|
||
amount = (amount === 0) ? 0 : (amount || 10);
|
||
var hsl = tinycolor(color).toHsl();
|
||
hsl.l -= amount / 100;
|
||
hsl.l = clamp01(hsl.l);
|
||
return tinycolor(hsl);
|
||
}
|
||
|
||
// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
|
||
// Values outside of this range will be wrapped into this range.
|
||
function spin(color, amount) {
|
||
var hsl = tinycolor(color).toHsl();
|
||
var hue = (hsl.h + amount) % 360;
|
||
hsl.h = hue < 0 ? 360 + hue : hue;
|
||
return tinycolor(hsl);
|
||
}
|
||
|
||
// Combination Functions
|
||
// ---------------------
|
||
// Thanks to jQuery xColor for some of the ideas behind these
|
||
// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
|
||
|
||
function complement(color) {
|
||
var hsl = tinycolor(color).toHsl();
|
||
hsl.h = (hsl.h + 180) % 360;
|
||
return tinycolor(hsl);
|
||
}
|
||
|
||
function triad(color) {
|
||
var hsl = tinycolor(color).toHsl();
|
||
var h = hsl.h;
|
||
return [
|
||
tinycolor(color),
|
||
tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
|
||
tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
|
||
];
|
||
}
|
||
|
||
function tetrad(color) {
|
||
var hsl = tinycolor(color).toHsl();
|
||
var h = hsl.h;
|
||
return [
|
||
tinycolor(color),
|
||
tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
|
||
tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
|
||
tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
|
||
];
|
||
}
|
||
|
||
function splitcomplement(color) {
|
||
var hsl = tinycolor(color).toHsl();
|
||
var h = hsl.h;
|
||
return [
|
||
tinycolor(color),
|
||
tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
|
||
tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
|
||
];
|
||
}
|
||
|
||
function analogous(color, results, slices) {
|
||
results = results || 6;
|
||
slices = slices || 30;
|
||
|
||
var hsl = tinycolor(color).toHsl();
|
||
var part = 360 / slices;
|
||
var ret = [tinycolor(color)];
|
||
|
||
for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
|
||
hsl.h = (hsl.h + part) % 360;
|
||
ret.push(tinycolor(hsl));
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
function monochromatic(color, results) {
|
||
results = results || 6;
|
||
var hsv = tinycolor(color).toHsv();
|
||
var h = hsv.h, s = hsv.s, v = hsv.v;
|
||
var ret = [];
|
||
var modification = 1 / results;
|
||
|
||
while (results--) {
|
||
ret.push(tinycolor({ h: h, s: s, v: v}));
|
||
v = (v + modification) % 1;
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
// Utility Functions
|
||
// ---------------------
|
||
|
||
tinycolor.mix = function(color1, color2, amount) {
|
||
amount = (amount === 0) ? 0 : (amount || 50);
|
||
|
||
var rgb1 = tinycolor(color1).toRgb();
|
||
var rgb2 = tinycolor(color2).toRgb();
|
||
|
||
var p = amount / 100;
|
||
|
||
var rgba = {
|
||
r: ((rgb2.r - rgb1.r) * p) + rgb1.r,
|
||
g: ((rgb2.g - rgb1.g) * p) + rgb1.g,
|
||
b: ((rgb2.b - rgb1.b) * p) + rgb1.b,
|
||
a: ((rgb2.a - rgb1.a) * p) + rgb1.a
|
||
};
|
||
|
||
return tinycolor(rgba);
|
||
};
|
||
|
||
|
||
// Readability Functions
|
||
// ---------------------
|
||
// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)
|
||
|
||
// `contrast`
|
||
// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)
|
||
tinycolor.readability = function(color1, color2) {
|
||
var c1 = tinycolor(color1);
|
||
var c2 = tinycolor(color2);
|
||
return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);
|
||
};
|
||
|
||
// `isReadable`
|
||
// Ensure that foreground and background color combinations meet WCAG2 guidelines.
|
||
// The third argument is an optional Object.
|
||
// the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';
|
||
// the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.
|
||
// If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}.
|
||
|
||
// *Example*
|
||
// tinycolor.isReadable("#000", "#111") => false
|
||
// tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false
|
||
tinycolor.isReadable = function(color1, color2, wcag2) {
|
||
var readability = tinycolor.readability(color1, color2);
|
||
var wcag2Parms, out;
|
||
|
||
out = false;
|
||
|
||
wcag2Parms = validateWCAG2Parms(wcag2);
|
||
switch (wcag2Parms.level + wcag2Parms.size) {
|
||
case "AAsmall":
|
||
case "AAAlarge":
|
||
out = readability >= 4.5;
|
||
break;
|
||
case "AAlarge":
|
||
out = readability >= 3;
|
||
break;
|
||
case "AAAsmall":
|
||
out = readability >= 7;
|
||
break;
|
||
}
|
||
return out;
|
||
|
||
};
|
||
|
||
// `mostReadable`
|
||
// Given a base color and a list of possible foreground or background
|
||
// colors for that base, returns the most readable color.
|
||
// Optionally returns Black or White if the most readable color is unreadable.
|
||
// *Example*
|
||
// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255"
|
||
// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff"
|
||
// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3"
|
||
// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff"
|
||
tinycolor.mostReadable = function(baseColor, colorList, args) {
|
||
var bestColor = null;
|
||
var bestScore = 0;
|
||
var readability;
|
||
var includeFallbackColors, level, size ;
|
||
args = args || {};
|
||
includeFallbackColors = args.includeFallbackColors ;
|
||
level = args.level;
|
||
size = args.size;
|
||
|
||
for (var i= 0; i < colorList.length ; i++) {
|
||
readability = tinycolor.readability(baseColor, colorList[i]);
|
||
if (readability > bestScore) {
|
||
bestScore = readability;
|
||
bestColor = tinycolor(colorList[i]);
|
||
}
|
||
}
|
||
|
||
if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) {
|
||
return bestColor;
|
||
}
|
||
else {
|
||
args.includeFallbackColors=false;
|
||
return tinycolor.mostReadable(baseColor,["#fff", "#000"],args);
|
||
}
|
||
};
|
||
|
||
|
||
// Big List of Colors
|
||
// ------------------
|
||
// <http://www.w3.org/TR/css3-color/#svg-color>
|
||
var names = tinycolor.names = {
|
||
aliceblue: "f0f8ff",
|
||
antiquewhite: "faebd7",
|
||
aqua: "0ff",
|
||
aquamarine: "7fffd4",
|
||
azure: "f0ffff",
|
||
beige: "f5f5dc",
|
||
bisque: "ffe4c4",
|
||
black: "000",
|
||
blanchedalmond: "ffebcd",
|
||
blue: "00f",
|
||
blueviolet: "8a2be2",
|
||
brown: "a52a2a",
|
||
burlywood: "deb887",
|
||
burntsienna: "ea7e5d",
|
||
cadetblue: "5f9ea0",
|
||
chartreuse: "7fff00",
|
||
chocolate: "d2691e",
|
||
coral: "ff7f50",
|
||
cornflowerblue: "6495ed",
|
||
cornsilk: "fff8dc",
|
||
crimson: "dc143c",
|
||
cyan: "0ff",
|
||
darkblue: "00008b",
|
||
darkcyan: "008b8b",
|
||
darkgoldenrod: "b8860b",
|
||
darkgray: "a9a9a9",
|
||
darkgreen: "006400",
|
||
darkgrey: "a9a9a9",
|
||
darkkhaki: "bdb76b",
|
||
darkmagenta: "8b008b",
|
||
darkolivegreen: "556b2f",
|
||
darkorange: "ff8c00",
|
||
darkorchid: "9932cc",
|
||
darkred: "8b0000",
|
||
darksalmon: "e9967a",
|
||
darkseagreen: "8fbc8f",
|
||
darkslateblue: "483d8b",
|
||
darkslategray: "2f4f4f",
|
||
darkslategrey: "2f4f4f",
|
||
darkturquoise: "00ced1",
|
||
darkviolet: "9400d3",
|
||
deeppink: "ff1493",
|
||
deepskyblue: "00bfff",
|
||
dimgray: "696969",
|
||
dimgrey: "696969",
|
||
dodgerblue: "1e90ff",
|
||
firebrick: "b22222",
|
||
floralwhite: "fffaf0",
|
||
forestgreen: "228b22",
|
||
fuchsia: "f0f",
|
||
gainsboro: "dcdcdc",
|
||
ghostwhite: "f8f8ff",
|
||
gold: "ffd700",
|
||
goldenrod: "daa520",
|
||
gray: "808080",
|
||
green: "008000",
|
||
greenyellow: "adff2f",
|
||
grey: "808080",
|
||
honeydew: "f0fff0",
|
||
hotpink: "ff69b4",
|
||
indianred: "cd5c5c",
|
||
indigo: "4b0082",
|
||
ivory: "fffff0",
|
||
khaki: "f0e68c",
|
||
lavender: "e6e6fa",
|
||
lavenderblush: "fff0f5",
|
||
lawngreen: "7cfc00",
|
||
lemonchiffon: "fffacd",
|
||
lightblue: "add8e6",
|
||
lightcoral: "f08080",
|
||
lightcyan: "e0ffff",
|
||
lightgoldenrodyellow: "fafad2",
|
||
lightgray: "d3d3d3",
|
||
lightgreen: "90ee90",
|
||
lightgrey: "d3d3d3",
|
||
lightpink: "ffb6c1",
|
||
lightsalmon: "ffa07a",
|
||
lightseagreen: "20b2aa",
|
||
lightskyblue: "87cefa",
|
||
lightslategray: "789",
|
||
lightslategrey: "789",
|
||
lightsteelblue: "b0c4de",
|
||
lightyellow: "ffffe0",
|
||
lime: "0f0",
|
||
limegreen: "32cd32",
|
||
linen: "faf0e6",
|
||
magenta: "f0f",
|
||
maroon: "800000",
|
||
mediumaquamarine: "66cdaa",
|
||
mediumblue: "0000cd",
|
||
mediumorchid: "ba55d3",
|
||
mediumpurple: "9370db",
|
||
mediumseagreen: "3cb371",
|
||
mediumslateblue: "7b68ee",
|
||
mediumspringgreen: "00fa9a",
|
||
mediumturquoise: "48d1cc",
|
||
mediumvioletred: "c71585",
|
||
midnightblue: "191970",
|
||
mintcream: "f5fffa",
|
||
mistyrose: "ffe4e1",
|
||
moccasin: "ffe4b5",
|
||
navajowhite: "ffdead",
|
||
navy: "000080",
|
||
oldlace: "fdf5e6",
|
||
olive: "808000",
|
||
olivedrab: "6b8e23",
|
||
orange: "ffa500",
|
||
orangered: "ff4500",
|
||
orchid: "da70d6",
|
||
palegoldenrod: "eee8aa",
|
||
palegreen: "98fb98",
|
||
paleturquoise: "afeeee",
|
||
palevioletred: "db7093",
|
||
papayawhip: "ffefd5",
|
||
peachpuff: "ffdab9",
|
||
peru: "cd853f",
|
||
pink: "ffc0cb",
|
||
plum: "dda0dd",
|
||
powderblue: "b0e0e6",
|
||
purple: "800080",
|
||
rebeccapurple: "663399",
|
||
red: "f00",
|
||
rosybrown: "bc8f8f",
|
||
royalblue: "4169e1",
|
||
saddlebrown: "8b4513",
|
||
salmon: "fa8072",
|
||
sandybrown: "f4a460",
|
||
seagreen: "2e8b57",
|
||
seashell: "fff5ee",
|
||
sienna: "a0522d",
|
||
silver: "c0c0c0",
|
||
skyblue: "87ceeb",
|
||
slateblue: "6a5acd",
|
||
slategray: "708090",
|
||
slategrey: "708090",
|
||
snow: "fffafa",
|
||
springgreen: "00ff7f",
|
||
steelblue: "4682b4",
|
||
tan: "d2b48c",
|
||
teal: "008080",
|
||
thistle: "d8bfd8",
|
||
tomato: "ff6347",
|
||
turquoise: "40e0d0",
|
||
violet: "ee82ee",
|
||
wheat: "f5deb3",
|
||
white: "fff",
|
||
whitesmoke: "f5f5f5",
|
||
yellow: "ff0",
|
||
yellowgreen: "9acd32"
|
||
};
|
||
|
||
// Make it easy to access colors via `hexNames[hex]`
|
||
var hexNames = tinycolor.hexNames = flip(names);
|
||
|
||
|
||
// Utilities
|
||
// ---------
|
||
|
||
// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
|
||
function flip(o) {
|
||
var flipped = { };
|
||
for (var i in o) {
|
||
if (o.hasOwnProperty(i)) {
|
||
flipped[o[i]] = i;
|
||
}
|
||
}
|
||
return flipped;
|
||
}
|
||
|
||
// Return a valid alpha value [0,1] with all invalid values being set to 1
|
||
function boundAlpha(a) {
|
||
a = parseFloat(a);
|
||
|
||
if (isNaN(a) || a < 0 || a > 1) {
|
||
a = 1;
|
||
}
|
||
|
||
return a;
|
||
}
|
||
|
||
// Take input from [0, n] and return it as [0, 1]
|
||
function bound01(n, max) {
|
||
if (isOnePointZero(n)) { n = "100%"; }
|
||
|
||
var processPercent = isPercentage(n);
|
||
n = mathMin(max, mathMax(0, parseFloat(n)));
|
||
|
||
// Automatically convert percentage into number
|
||
if (processPercent) {
|
||
n = parseInt(n * max, 10) / 100;
|
||
}
|
||
|
||
// Handle floating point rounding errors
|
||
if ((Math.abs(n - max) < 0.000001)) {
|
||
return 1;
|
||
}
|
||
|
||
// Convert into [0, 1] range if it isn't already
|
||
return (n % max) / parseFloat(max);
|
||
}
|
||
|
||
// Force a number between 0 and 1
|
||
function clamp01(val) {
|
||
return mathMin(1, mathMax(0, val));
|
||
}
|
||
|
||
// Parse a base-16 hex value into a base-10 integer
|
||
function parseIntFromHex(val) {
|
||
return parseInt(val, 16);
|
||
}
|
||
|
||
// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
|
||
// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
|
||
function isOnePointZero(n) {
|
||
return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
|
||
}
|
||
|
||
// Check to see if string passed in is a percentage
|
||
function isPercentage(n) {
|
||
return typeof n === "string" && n.indexOf('%') != -1;
|
||
}
|
||
|
||
// Force a hex value to have 2 characters
|
||
function pad2(c) {
|
||
return c.length == 1 ? '0' + c : '' + c;
|
||
}
|
||
|
||
// Replace a decimal with it's percentage value
|
||
function convertToPercentage(n) {
|
||
if (n <= 1) {
|
||
n = (n * 100) + "%";
|
||
}
|
||
|
||
return n;
|
||
}
|
||
|
||
// Converts a decimal to a hex value
|
||
function convertDecimalToHex(d) {
|
||
return Math.round(parseFloat(d) * 255).toString(16);
|
||
}
|
||
// Converts a hex value to a decimal
|
||
function convertHexToDecimal(h) {
|
||
return (parseIntFromHex(h) / 255);
|
||
}
|
||
|
||
var matchers = (function() {
|
||
|
||
// <http://www.w3.org/TR/css3-values/#integers>
|
||
var CSS_INTEGER = "[-\\+]?\\d+%?";
|
||
|
||
// <http://www.w3.org/TR/css3-values/#number-value>
|
||
var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
|
||
|
||
// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.
|
||
var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
|
||
|
||
// Actual matching.
|
||
// Parentheses and commas are optional, but not required.
|
||
// Whitespace can take the place of commas or opening paren
|
||
var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
|
||
var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
|
||
|
||
return {
|
||
CSS_UNIT: new RegExp(CSS_UNIT),
|
||
rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
|
||
rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
|
||
hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
|
||
hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
|
||
hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
|
||
hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
|
||
hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
|
||
hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
|
||
hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
|
||
hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
|
||
};
|
||
})();
|
||
|
||
// `isValidCSSUnit`
|
||
// Take in a single string / number and check to see if it looks like a CSS unit
|
||
// (see `matchers` above for definition).
|
||
function isValidCSSUnit(color) {
|
||
return !!matchers.CSS_UNIT.exec(color);
|
||
}
|
||
|
||
// `stringInputToObject`
|
||
// Permissive string parsing. Take in a number of formats, and output an object
|
||
// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
|
||
function stringInputToObject(color) {
|
||
|
||
color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();
|
||
var named = false;
|
||
if (names[color]) {
|
||
color = names[color];
|
||
named = true;
|
||
}
|
||
else if (color == 'transparent') {
|
||
return { r: 0, g: 0, b: 0, a: 0, format: "name" };
|
||
}
|
||
|
||
// Try to match string input using regular expressions.
|
||
// Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
|
||
// Just return an object and let the conversion functions handle that.
|
||
// This way the result will be the same whether the tinycolor is initialized with string or object.
|
||
var match;
|
||
if ((match = matchers.rgb.exec(color))) {
|
||
return { r: match[1], g: match[2], b: match[3] };
|
||
}
|
||
if ((match = matchers.rgba.exec(color))) {
|
||
return { r: match[1], g: match[2], b: match[3], a: match[4] };
|
||
}
|
||
if ((match = matchers.hsl.exec(color))) {
|
||
return { h: match[1], s: match[2], l: match[3] };
|
||
}
|
||
if ((match = matchers.hsla.exec(color))) {
|
||
return { h: match[1], s: match[2], l: match[3], a: match[4] };
|
||
}
|
||
if ((match = matchers.hsv.exec(color))) {
|
||
return { h: match[1], s: match[2], v: match[3] };
|
||
}
|
||
if ((match = matchers.hsva.exec(color))) {
|
||
return { h: match[1], s: match[2], v: match[3], a: match[4] };
|
||
}
|
||
if ((match = matchers.hex8.exec(color))) {
|
||
return {
|
||
r: parseIntFromHex(match[1]),
|
||
g: parseIntFromHex(match[2]),
|
||
b: parseIntFromHex(match[3]),
|
||
a: convertHexToDecimal(match[4]),
|
||
format: named ? "name" : "hex8"
|
||
};
|
||
}
|
||
if ((match = matchers.hex6.exec(color))) {
|
||
return {
|
||
r: parseIntFromHex(match[1]),
|
||
g: parseIntFromHex(match[2]),
|
||
b: parseIntFromHex(match[3]),
|
||
format: named ? "name" : "hex"
|
||
};
|
||
}
|
||
if ((match = matchers.hex4.exec(color))) {
|
||
return {
|
||
r: parseIntFromHex(match[1] + '' + match[1]),
|
||
g: parseIntFromHex(match[2] + '' + match[2]),
|
||
b: parseIntFromHex(match[3] + '' + match[3]),
|
||
a: convertHexToDecimal(match[4] + '' + match[4]),
|
||
format: named ? "name" : "hex8"
|
||
};
|
||
}
|
||
if ((match = matchers.hex3.exec(color))) {
|
||
return {
|
||
r: parseIntFromHex(match[1] + '' + match[1]),
|
||
g: parseIntFromHex(match[2] + '' + match[2]),
|
||
b: parseIntFromHex(match[3] + '' + match[3]),
|
||
format: named ? "name" : "hex"
|
||
};
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
function validateWCAG2Parms(parms) {
|
||
// return valid WCAG2 parms for isReadable.
|
||
// If input parms are invalid, return {"level":"AA", "size":"small"}
|
||
var level, size;
|
||
parms = parms || {"level":"AA", "size":"small"};
|
||
level = (parms.level || "AA").toUpperCase();
|
||
size = (parms.size || "small").toLowerCase();
|
||
if (level !== "AA" && level !== "AAA") {
|
||
level = "AA";
|
||
}
|
||
if (size !== "small" && size !== "large") {
|
||
size = "small";
|
||
}
|
||
return {"level":level, "size":size};
|
||
}
|
||
|
||
// Node: Export function
|
||
if ( true && module.exports) {
|
||
module.exports = tinycolor;
|
||
}
|
||
// AMD/requirejs: Define the module
|
||
else if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {return tinycolor;}).call(exports, __webpack_require__, exports, module),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
}
|
||
// Browser: Expose to window
|
||
else {}
|
||
|
||
})(Math);
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 5:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _assertThisInitialized; });
|
||
function _assertThisInitialized(self) {
|
||
if (self === void 0) {
|
||
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
||
}
|
||
|
||
return self;
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 54:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["htmlEntities"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 64:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
exports.__esModule = true;
|
||
var TextareaAutosize_1 = __webpack_require__(132);
|
||
exports["default"] = TextareaAutosize_1["default"];
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 66:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, '__esModule', { value: true });
|
||
|
||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
||
|
||
var _extends = _interopDefault(__webpack_require__(136));
|
||
var _objectWithoutPropertiesLoose = _interopDefault(__webpack_require__(137));
|
||
var React = __webpack_require__(28);
|
||
var React__default = _interopDefault(React);
|
||
var _inheritsLoose = _interopDefault(__webpack_require__(138));
|
||
var _assertThisInitialized = _interopDefault(__webpack_require__(139));
|
||
|
||
var is = {
|
||
arr: Array.isArray,
|
||
obj: function obj(a) {
|
||
return Object.prototype.toString.call(a) === '[object Object]';
|
||
},
|
||
fun: function fun(a) {
|
||
return typeof a === 'function';
|
||
},
|
||
str: function str(a) {
|
||
return typeof a === 'string';
|
||
},
|
||
num: function num(a) {
|
||
return typeof a === 'number';
|
||
},
|
||
und: function und(a) {
|
||
return a === void 0;
|
||
},
|
||
nul: function nul(a) {
|
||
return a === null;
|
||
},
|
||
set: function set(a) {
|
||
return a instanceof Set;
|
||
},
|
||
map: function map(a) {
|
||
return a instanceof Map;
|
||
},
|
||
equ: function equ(a, b) {
|
||
if (typeof a !== typeof b) return false;
|
||
if (is.str(a) || is.num(a)) return a === b;
|
||
if (is.obj(a) && is.obj(b) && Object.keys(a).length + Object.keys(b).length === 0) return true;
|
||
var i;
|
||
|
||
for (i in a) {
|
||
if (!(i in b)) return false;
|
||
}
|
||
|
||
for (i in b) {
|
||
if (a[i] !== b[i]) return false;
|
||
}
|
||
|
||
return is.und(i) ? a === b : true;
|
||
}
|
||
};
|
||
function merge(target, lowercase) {
|
||
if (lowercase === void 0) {
|
||
lowercase = true;
|
||
}
|
||
|
||
return function (object) {
|
||
return (is.arr(object) ? object : Object.keys(object)).reduce(function (acc, element) {
|
||
var key = lowercase ? element[0].toLowerCase() + element.substring(1) : element;
|
||
acc[key] = target(key);
|
||
return acc;
|
||
}, target);
|
||
};
|
||
}
|
||
function useForceUpdate() {
|
||
var _useState = React.useState(false),
|
||
f = _useState[1];
|
||
|
||
var forceUpdate = React.useCallback(function () {
|
||
return f(function (v) {
|
||
return !v;
|
||
});
|
||
}, []);
|
||
return forceUpdate;
|
||
}
|
||
function withDefault(value, defaultValue) {
|
||
return is.und(value) || is.nul(value) ? defaultValue : value;
|
||
}
|
||
function toArray(a) {
|
||
return !is.und(a) ? is.arr(a) ? a : [a] : [];
|
||
}
|
||
function callProp(obj) {
|
||
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||
args[_key - 1] = arguments[_key];
|
||
}
|
||
|
||
return is.fun(obj) ? obj.apply(void 0, args) : obj;
|
||
}
|
||
|
||
function getForwardProps(props) {
|
||
var to = props.to,
|
||
from = props.from,
|
||
config = props.config,
|
||
onStart = props.onStart,
|
||
onRest = props.onRest,
|
||
onFrame = props.onFrame,
|
||
children = props.children,
|
||
reset = props.reset,
|
||
reverse = props.reverse,
|
||
force = props.force,
|
||
immediate = props.immediate,
|
||
delay = props.delay,
|
||
attach = props.attach,
|
||
destroyed = props.destroyed,
|
||
interpolateTo = props.interpolateTo,
|
||
ref = props.ref,
|
||
lazy = props.lazy,
|
||
forward = _objectWithoutPropertiesLoose(props, ["to", "from", "config", "onStart", "onRest", "onFrame", "children", "reset", "reverse", "force", "immediate", "delay", "attach", "destroyed", "interpolateTo", "ref", "lazy"]);
|
||
|
||
return forward;
|
||
}
|
||
|
||
function interpolateTo(props) {
|
||
var forward = getForwardProps(props);
|
||
if (is.und(forward)) return _extends({
|
||
to: forward
|
||
}, props);
|
||
var rest = Object.keys(props).reduce(function (a, k) {
|
||
var _extends2;
|
||
|
||
return !is.und(forward[k]) ? a : _extends({}, a, (_extends2 = {}, _extends2[k] = props[k], _extends2));
|
||
}, {});
|
||
return _extends({
|
||
to: forward
|
||
}, rest);
|
||
}
|
||
function handleRef(ref, forward) {
|
||
if (forward) {
|
||
// If it's a function, assume it's a ref callback
|
||
if (is.fun(forward)) forward(ref);else if (is.obj(forward)) {
|
||
forward.current = ref;
|
||
}
|
||
}
|
||
|
||
return ref;
|
||
}
|
||
|
||
var Animated =
|
||
/*#__PURE__*/
|
||
function () {
|
||
function Animated() {
|
||
this.payload = void 0;
|
||
this.children = [];
|
||
}
|
||
|
||
var _proto = Animated.prototype;
|
||
|
||
_proto.getAnimatedValue = function getAnimatedValue() {
|
||
return this.getValue();
|
||
};
|
||
|
||
_proto.getPayload = function getPayload() {
|
||
return this.payload || this;
|
||
};
|
||
|
||
_proto.attach = function attach() {};
|
||
|
||
_proto.detach = function detach() {};
|
||
|
||
_proto.getChildren = function getChildren() {
|
||
return this.children;
|
||
};
|
||
|
||
_proto.addChild = function addChild(child) {
|
||
if (this.children.length === 0) this.attach();
|
||
this.children.push(child);
|
||
};
|
||
|
||
_proto.removeChild = function removeChild(child) {
|
||
var index = this.children.indexOf(child);
|
||
this.children.splice(index, 1);
|
||
if (this.children.length === 0) this.detach();
|
||
};
|
||
|
||
return Animated;
|
||
}();
|
||
var AnimatedArray =
|
||
/*#__PURE__*/
|
||
function (_Animated) {
|
||
_inheritsLoose(AnimatedArray, _Animated);
|
||
|
||
function AnimatedArray() {
|
||
var _this;
|
||
|
||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
||
args[_key] = arguments[_key];
|
||
}
|
||
|
||
_this = _Animated.call.apply(_Animated, [this].concat(args)) || this;
|
||
_this.payload = [];
|
||
|
||
_this.attach = function () {
|
||
return _this.payload.forEach(function (p) {
|
||
return p instanceof Animated && p.addChild(_assertThisInitialized(_this));
|
||
});
|
||
};
|
||
|
||
_this.detach = function () {
|
||
return _this.payload.forEach(function (p) {
|
||
return p instanceof Animated && p.removeChild(_assertThisInitialized(_this));
|
||
});
|
||
};
|
||
|
||
return _this;
|
||
}
|
||
|
||
return AnimatedArray;
|
||
}(Animated);
|
||
var AnimatedObject =
|
||
/*#__PURE__*/
|
||
function (_Animated2) {
|
||
_inheritsLoose(AnimatedObject, _Animated2);
|
||
|
||
function AnimatedObject() {
|
||
var _this2;
|
||
|
||
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
||
args[_key3] = arguments[_key3];
|
||
}
|
||
|
||
_this2 = _Animated2.call.apply(_Animated2, [this].concat(args)) || this;
|
||
_this2.payload = {};
|
||
|
||
_this2.attach = function () {
|
||
return Object.values(_this2.payload).forEach(function (s) {
|
||
return s instanceof Animated && s.addChild(_assertThisInitialized(_this2));
|
||
});
|
||
};
|
||
|
||
_this2.detach = function () {
|
||
return Object.values(_this2.payload).forEach(function (s) {
|
||
return s instanceof Animated && s.removeChild(_assertThisInitialized(_this2));
|
||
});
|
||
};
|
||
|
||
return _this2;
|
||
}
|
||
|
||
var _proto2 = AnimatedObject.prototype;
|
||
|
||
_proto2.getValue = function getValue(animated) {
|
||
if (animated === void 0) {
|
||
animated = false;
|
||
}
|
||
|
||
var payload = {};
|
||
|
||
for (var _key4 in this.payload) {
|
||
var value = this.payload[_key4];
|
||
if (animated && !(value instanceof Animated)) continue;
|
||
payload[_key4] = value instanceof Animated ? value[animated ? 'getAnimatedValue' : 'getValue']() : value;
|
||
}
|
||
|
||
return payload;
|
||
};
|
||
|
||
_proto2.getAnimatedValue = function getAnimatedValue() {
|
||
return this.getValue(true);
|
||
};
|
||
|
||
return AnimatedObject;
|
||
}(Animated);
|
||
|
||
var applyAnimatedValues;
|
||
function injectApplyAnimatedValues(fn, transform) {
|
||
applyAnimatedValues = {
|
||
fn: fn,
|
||
transform: transform
|
||
};
|
||
}
|
||
var colorNames;
|
||
function injectColorNames(names) {
|
||
colorNames = names;
|
||
}
|
||
var requestFrame = function requestFrame(cb) {
|
||
return typeof window !== 'undefined' ? window.requestAnimationFrame(cb) : -1;
|
||
};
|
||
var cancelFrame = function cancelFrame(id) {
|
||
typeof window !== 'undefined' && window.cancelAnimationFrame(id);
|
||
};
|
||
function injectFrame(raf, caf) {
|
||
requestFrame = raf;
|
||
cancelFrame = caf;
|
||
}
|
||
var interpolation;
|
||
function injectStringInterpolator(fn) {
|
||
interpolation = fn;
|
||
}
|
||
var now = function now() {
|
||
return Date.now();
|
||
};
|
||
function injectNow(nowFn) {
|
||
now = nowFn;
|
||
}
|
||
var defaultElement;
|
||
function injectDefaultElement(el) {
|
||
defaultElement = el;
|
||
}
|
||
var animatedApi = function animatedApi(node) {
|
||
return node.current;
|
||
};
|
||
function injectAnimatedApi(fn) {
|
||
animatedApi = fn;
|
||
}
|
||
var createAnimatedStyle;
|
||
function injectCreateAnimatedStyle(factory) {
|
||
createAnimatedStyle = factory;
|
||
}
|
||
var manualFrameloop;
|
||
function injectManualFrameloop(callback) {
|
||
manualFrameloop = callback;
|
||
}
|
||
|
||
var Globals = /*#__PURE__*/Object.freeze({
|
||
get applyAnimatedValues () { return applyAnimatedValues; },
|
||
injectApplyAnimatedValues: injectApplyAnimatedValues,
|
||
get colorNames () { return colorNames; },
|
||
injectColorNames: injectColorNames,
|
||
get requestFrame () { return requestFrame; },
|
||
get cancelFrame () { return cancelFrame; },
|
||
injectFrame: injectFrame,
|
||
get interpolation () { return interpolation; },
|
||
injectStringInterpolator: injectStringInterpolator,
|
||
get now () { return now; },
|
||
injectNow: injectNow,
|
||
get defaultElement () { return defaultElement; },
|
||
injectDefaultElement: injectDefaultElement,
|
||
get animatedApi () { return animatedApi; },
|
||
injectAnimatedApi: injectAnimatedApi,
|
||
get createAnimatedStyle () { return createAnimatedStyle; },
|
||
injectCreateAnimatedStyle: injectCreateAnimatedStyle,
|
||
get manualFrameloop () { return manualFrameloop; },
|
||
injectManualFrameloop: injectManualFrameloop
|
||
});
|
||
|
||
/**
|
||
* Wraps the `style` property with `AnimatedStyle`.
|
||
*/
|
||
|
||
var AnimatedProps =
|
||
/*#__PURE__*/
|
||
function (_AnimatedObject) {
|
||
_inheritsLoose(AnimatedProps, _AnimatedObject);
|
||
|
||
function AnimatedProps(props, callback) {
|
||
var _this;
|
||
|
||
_this = _AnimatedObject.call(this) || this;
|
||
_this.update = void 0;
|
||
_this.payload = !props.style ? props : _extends({}, props, {
|
||
style: createAnimatedStyle(props.style)
|
||
});
|
||
_this.update = callback;
|
||
|
||
_this.attach();
|
||
|
||
return _this;
|
||
}
|
||
|
||
return AnimatedProps;
|
||
}(AnimatedObject);
|
||
|
||
var isFunctionComponent = function isFunctionComponent(val) {
|
||
return is.fun(val) && !(val.prototype instanceof React__default.Component);
|
||
};
|
||
|
||
var createAnimatedComponent = function createAnimatedComponent(Component) {
|
||
var AnimatedComponent = React.forwardRef(function (props, ref) {
|
||
var forceUpdate = useForceUpdate();
|
||
var mounted = React.useRef(true);
|
||
var propsAnimated = React.useRef(null);
|
||
var node = React.useRef(null);
|
||
var attachProps = React.useCallback(function (props) {
|
||
var oldPropsAnimated = propsAnimated.current;
|
||
|
||
var callback = function callback() {
|
||
var didUpdate = false;
|
||
|
||
if (node.current) {
|
||
didUpdate = applyAnimatedValues.fn(node.current, propsAnimated.current.getAnimatedValue());
|
||
}
|
||
|
||
if (!node.current || didUpdate === false) {
|
||
// If no referenced node has been found, or the update target didn't have a
|
||
// native-responder, then forceUpdate the animation ...
|
||
forceUpdate();
|
||
}
|
||
};
|
||
|
||
propsAnimated.current = new AnimatedProps(props, callback);
|
||
oldPropsAnimated && oldPropsAnimated.detach();
|
||
}, []);
|
||
React.useEffect(function () {
|
||
return function () {
|
||
mounted.current = false;
|
||
propsAnimated.current && propsAnimated.current.detach();
|
||
};
|
||
}, []);
|
||
React.useImperativeHandle(ref, function () {
|
||
return animatedApi(node, mounted, forceUpdate);
|
||
});
|
||
attachProps(props);
|
||
|
||
var _getValue = propsAnimated.current.getValue(),
|
||
scrollTop = _getValue.scrollTop,
|
||
scrollLeft = _getValue.scrollLeft,
|
||
animatedProps = _objectWithoutPropertiesLoose(_getValue, ["scrollTop", "scrollLeft"]); // Functions cannot have refs, see:
|
||
// See: https://github.com/react-spring/react-spring/issues/569
|
||
|
||
|
||
var refFn = isFunctionComponent(Component) ? undefined : function (childRef) {
|
||
return node.current = handleRef(childRef, ref);
|
||
};
|
||
return React__default.createElement(Component, _extends({}, animatedProps, {
|
||
ref: refFn
|
||
}));
|
||
});
|
||
return AnimatedComponent;
|
||
};
|
||
|
||
var active = false;
|
||
var controllers = new Set();
|
||
|
||
var update = function update() {
|
||
if (!active) return false;
|
||
var time = now();
|
||
|
||
for (var _iterator = controllers, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
||
var _ref;
|
||
|
||
if (_isArray) {
|
||
if (_i >= _iterator.length) break;
|
||
_ref = _iterator[_i++];
|
||
} else {
|
||
_i = _iterator.next();
|
||
if (_i.done) break;
|
||
_ref = _i.value;
|
||
}
|
||
|
||
var controller = _ref;
|
||
var isActive = false;
|
||
|
||
for (var configIdx = 0; configIdx < controller.configs.length; configIdx++) {
|
||
var config = controller.configs[configIdx];
|
||
var endOfAnimation = void 0,
|
||
lastTime = void 0;
|
||
|
||
for (var valIdx = 0; valIdx < config.animatedValues.length; valIdx++) {
|
||
var animation = config.animatedValues[valIdx]; // If an animation is done, skip, until all of them conclude
|
||
|
||
if (animation.done) continue;
|
||
var from = config.fromValues[valIdx];
|
||
var to = config.toValues[valIdx];
|
||
var position = animation.lastPosition;
|
||
var isAnimated = to instanceof Animated;
|
||
var velocity = Array.isArray(config.initialVelocity) ? config.initialVelocity[valIdx] : config.initialVelocity;
|
||
if (isAnimated) to = to.getValue(); // Conclude animation if it's either immediate, or from-values match end-state
|
||
|
||
if (config.immediate) {
|
||
animation.setValue(to);
|
||
animation.done = true;
|
||
continue;
|
||
} // Break animation when string values are involved
|
||
|
||
|
||
if (typeof from === 'string' || typeof to === 'string') {
|
||
animation.setValue(to);
|
||
animation.done = true;
|
||
continue;
|
||
}
|
||
|
||
if (config.duration !== void 0) {
|
||
/** Duration easing */
|
||
position = from + config.easing((time - animation.startTime) / config.duration) * (to - from);
|
||
endOfAnimation = time >= animation.startTime + config.duration;
|
||
} else if (config.decay) {
|
||
/** Decay easing */
|
||
position = from + velocity / (1 - 0.998) * (1 - Math.exp(-(1 - 0.998) * (time - animation.startTime)));
|
||
endOfAnimation = Math.abs(animation.lastPosition - position) < 0.1;
|
||
if (endOfAnimation) to = position;
|
||
} else {
|
||
/** Spring easing */
|
||
lastTime = animation.lastTime !== void 0 ? animation.lastTime : time;
|
||
velocity = animation.lastVelocity !== void 0 ? animation.lastVelocity : config.initialVelocity; // If we lost a lot of frames just jump to the end.
|
||
|
||
if (time > lastTime + 64) lastTime = time; // http://gafferongames.com/game-physics/fix-your-timestep/
|
||
|
||
var numSteps = Math.floor(time - lastTime);
|
||
|
||
for (var i = 0; i < numSteps; ++i) {
|
||
var force = -config.tension * (position - to);
|
||
var damping = -config.friction * velocity;
|
||
var acceleration = (force + damping) / config.mass;
|
||
velocity = velocity + acceleration * 1 / 1000;
|
||
position = position + velocity * 1 / 1000;
|
||
} // Conditions for stopping the spring animation
|
||
|
||
|
||
var isOvershooting = config.clamp && config.tension !== 0 ? from < to ? position > to : position < to : false;
|
||
var isVelocity = Math.abs(velocity) <= config.precision;
|
||
var isDisplacement = config.tension !== 0 ? Math.abs(to - position) <= config.precision : true;
|
||
endOfAnimation = isOvershooting || isVelocity && isDisplacement;
|
||
animation.lastVelocity = velocity;
|
||
animation.lastTime = time;
|
||
} // Trails aren't done until their parents conclude
|
||
|
||
|
||
if (isAnimated && !config.toValues[valIdx].done) endOfAnimation = false;
|
||
|
||
if (endOfAnimation) {
|
||
// Ensure that we end up with a round value
|
||
if (animation.value !== to) position = to;
|
||
animation.done = true;
|
||
} else isActive = true;
|
||
|
||
animation.setValue(position);
|
||
animation.lastPosition = position;
|
||
} // Keep track of updated values only when necessary
|
||
|
||
|
||
if (controller.props.onFrame) controller.values[config.name] = config.interpolation.getValue();
|
||
} // Update callbacks in the end of the frame
|
||
|
||
|
||
if (controller.props.onFrame) controller.props.onFrame(controller.values); // Either call onEnd or next frame
|
||
|
||
if (!isActive) {
|
||
controllers.delete(controller);
|
||
controller.stop(true);
|
||
}
|
||
} // Loop over as long as there are controllers ...
|
||
|
||
|
||
if (controllers.size) {
|
||
if (manualFrameloop) manualFrameloop();else requestFrame(update);
|
||
} else {
|
||
active = false;
|
||
}
|
||
|
||
return active;
|
||
};
|
||
|
||
var start = function start(controller) {
|
||
if (!controllers.has(controller)) controllers.add(controller);
|
||
|
||
if (!active) {
|
||
active = true;
|
||
if (manualFrameloop) requestFrame(manualFrameloop);else requestFrame(update);
|
||
}
|
||
};
|
||
|
||
var stop = function stop(controller) {
|
||
if (controllers.has(controller)) controllers.delete(controller);
|
||
};
|
||
|
||
function createInterpolator(range, output, extrapolate) {
|
||
if (typeof range === 'function') {
|
||
return range;
|
||
}
|
||
|
||
if (Array.isArray(range)) {
|
||
return createInterpolator({
|
||
range: range,
|
||
output: output,
|
||
extrapolate: extrapolate
|
||
});
|
||
}
|
||
|
||
if (interpolation && typeof range.output[0] === 'string') {
|
||
return interpolation(range);
|
||
}
|
||
|
||
var config = range;
|
||
var outputRange = config.output;
|
||
var inputRange = config.range || [0, 1];
|
||
var extrapolateLeft = config.extrapolateLeft || config.extrapolate || 'extend';
|
||
var extrapolateRight = config.extrapolateRight || config.extrapolate || 'extend';
|
||
|
||
var easing = config.easing || function (t) {
|
||
return t;
|
||
};
|
||
|
||
return function (input) {
|
||
var range = findRange(input, inputRange);
|
||
return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight, config.map);
|
||
};
|
||
}
|
||
|
||
function interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight, map) {
|
||
var result = map ? map(input) : input; // Extrapolate
|
||
|
||
if (result < inputMin) {
|
||
if (extrapolateLeft === 'identity') return result;else if (extrapolateLeft === 'clamp') result = inputMin;
|
||
}
|
||
|
||
if (result > inputMax) {
|
||
if (extrapolateRight === 'identity') return result;else if (extrapolateRight === 'clamp') result = inputMax;
|
||
}
|
||
|
||
if (outputMin === outputMax) return outputMin;
|
||
if (inputMin === inputMax) return input <= inputMin ? outputMin : outputMax; // Input Range
|
||
|
||
if (inputMin === -Infinity) result = -result;else if (inputMax === Infinity) result = result - inputMin;else result = (result - inputMin) / (inputMax - inputMin); // Easing
|
||
|
||
result = easing(result); // Output Range
|
||
|
||
if (outputMin === -Infinity) result = -result;else if (outputMax === Infinity) result = result + outputMin;else result = result * (outputMax - outputMin) + outputMin;
|
||
return result;
|
||
}
|
||
|
||
function findRange(input, inputRange) {
|
||
for (var i = 1; i < inputRange.length - 1; ++i) {
|
||
if (inputRange[i] >= input) break;
|
||
}
|
||
|
||
return i - 1;
|
||
}
|
||
|
||
var AnimatedInterpolation =
|
||
/*#__PURE__*/
|
||
function (_AnimatedArray) {
|
||
_inheritsLoose(AnimatedInterpolation, _AnimatedArray);
|
||
|
||
function AnimatedInterpolation(parents, range, output, extrapolate) {
|
||
var _this;
|
||
|
||
_this = _AnimatedArray.call(this) || this;
|
||
_this.calc = void 0;
|
||
_this.payload = parents instanceof AnimatedArray && !(parents instanceof AnimatedInterpolation) ? parents.getPayload() : Array.isArray(parents) ? parents : [parents];
|
||
_this.calc = createInterpolator(range, output, extrapolate);
|
||
return _this;
|
||
}
|
||
|
||
var _proto = AnimatedInterpolation.prototype;
|
||
|
||
_proto.getValue = function getValue() {
|
||
return this.calc.apply(this, this.payload.map(function (value) {
|
||
return value.getValue();
|
||
}));
|
||
};
|
||
|
||
_proto.updateConfig = function updateConfig(range, output, extrapolate) {
|
||
this.calc = createInterpolator(range, output, extrapolate);
|
||
};
|
||
|
||
_proto.interpolate = function interpolate(range, output, extrapolate) {
|
||
return new AnimatedInterpolation(this, range, output, extrapolate);
|
||
};
|
||
|
||
return AnimatedInterpolation;
|
||
}(AnimatedArray);
|
||
|
||
var interpolate$1 = function interpolate(parents, range, output) {
|
||
return parents && new AnimatedInterpolation(parents, range, output);
|
||
};
|
||
|
||
var config = {
|
||
default: {
|
||
tension: 170,
|
||
friction: 26
|
||
},
|
||
gentle: {
|
||
tension: 120,
|
||
friction: 14
|
||
},
|
||
wobbly: {
|
||
tension: 180,
|
||
friction: 12
|
||
},
|
||
stiff: {
|
||
tension: 210,
|
||
friction: 20
|
||
},
|
||
slow: {
|
||
tension: 280,
|
||
friction: 60
|
||
},
|
||
molasses: {
|
||
tension: 280,
|
||
friction: 120
|
||
}
|
||
};
|
||
|
||
/** API
|
||
* useChain(references, timeSteps, timeFrame)
|
||
*/
|
||
|
||
function useChain(refs, timeSteps, timeFrame) {
|
||
if (timeFrame === void 0) {
|
||
timeFrame = 1000;
|
||
}
|
||
|
||
var previous = React.useRef();
|
||
React.useEffect(function () {
|
||
if (is.equ(refs, previous.current)) refs.forEach(function (_ref) {
|
||
var current = _ref.current;
|
||
return current && current.start();
|
||
});else if (timeSteps) {
|
||
refs.forEach(function (_ref2, index) {
|
||
var current = _ref2.current;
|
||
|
||
if (current) {
|
||
var ctrls = current.controllers;
|
||
|
||
if (ctrls.length) {
|
||
var t = timeFrame * timeSteps[index];
|
||
ctrls.forEach(function (ctrl) {
|
||
ctrl.queue = ctrl.queue.map(function (e) {
|
||
return _extends({}, e, {
|
||
delay: e.delay + t
|
||
});
|
||
});
|
||
ctrl.start();
|
||
});
|
||
}
|
||
}
|
||
});
|
||
} else refs.reduce(function (q, _ref3, rI) {
|
||
var current = _ref3.current;
|
||
return q = q.then(function () {
|
||
return current.start();
|
||
});
|
||
}, Promise.resolve());
|
||
previous.current = refs;
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Animated works by building a directed acyclic graph of dependencies
|
||
* transparently when you render your Animated components.
|
||
*
|
||
* new Animated.Value(0)
|
||
* .interpolate() .interpolate() new Animated.Value(1)
|
||
* opacity translateY scale
|
||
* style transform
|
||
* View#234 style
|
||
* View#123
|
||
*
|
||
* A) Top Down phase
|
||
* When an AnimatedValue is updated, we recursively go down through this
|
||
* graph in order to find leaf nodes: the views that we flag as needing
|
||
* an update.
|
||
*
|
||
* B) Bottom Up phase
|
||
* When a view is flagged as needing an update, we recursively go back up
|
||
* in order to build the new value that it needs. The reason why we need
|
||
* this two-phases process is to deal with composite props such as
|
||
* transform which can receive values from multiple parents.
|
||
*/
|
||
function addAnimatedStyles(node, styles) {
|
||
if ('update' in node) {
|
||
styles.add(node);
|
||
} else {
|
||
node.getChildren().forEach(function (child) {
|
||
return addAnimatedStyles(child, styles);
|
||
});
|
||
}
|
||
}
|
||
|
||
var AnimatedValue =
|
||
/*#__PURE__*/
|
||
function (_Animated) {
|
||
_inheritsLoose(AnimatedValue, _Animated);
|
||
|
||
function AnimatedValue(_value) {
|
||
var _this;
|
||
|
||
_this = _Animated.call(this) || this;
|
||
_this.animatedStyles = new Set();
|
||
_this.value = void 0;
|
||
_this.startPosition = void 0;
|
||
_this.lastPosition = void 0;
|
||
_this.lastVelocity = void 0;
|
||
_this.startTime = void 0;
|
||
_this.lastTime = void 0;
|
||
_this.done = false;
|
||
|
||
_this.setValue = function (value, flush) {
|
||
if (flush === void 0) {
|
||
flush = true;
|
||
}
|
||
|
||
_this.value = value;
|
||
if (flush) _this.flush();
|
||
};
|
||
|
||
_this.value = _value;
|
||
_this.startPosition = _value;
|
||
_this.lastPosition = _value;
|
||
return _this;
|
||
}
|
||
|
||
var _proto = AnimatedValue.prototype;
|
||
|
||
_proto.flush = function flush() {
|
||
if (this.animatedStyles.size === 0) {
|
||
addAnimatedStyles(this, this.animatedStyles);
|
||
}
|
||
|
||
this.animatedStyles.forEach(function (animatedStyle) {
|
||
return animatedStyle.update();
|
||
});
|
||
};
|
||
|
||
_proto.clearStyles = function clearStyles() {
|
||
this.animatedStyles.clear();
|
||
};
|
||
|
||
_proto.getValue = function getValue() {
|
||
return this.value;
|
||
};
|
||
|
||
_proto.interpolate = function interpolate(range, output, extrapolate) {
|
||
return new AnimatedInterpolation(this, range, output, extrapolate);
|
||
};
|
||
|
||
return AnimatedValue;
|
||
}(Animated);
|
||
|
||
var AnimatedValueArray =
|
||
/*#__PURE__*/
|
||
function (_AnimatedArray) {
|
||
_inheritsLoose(AnimatedValueArray, _AnimatedArray);
|
||
|
||
function AnimatedValueArray(values) {
|
||
var _this;
|
||
|
||
_this = _AnimatedArray.call(this) || this;
|
||
_this.payload = values.map(function (n) {
|
||
return new AnimatedValue(n);
|
||
});
|
||
return _this;
|
||
}
|
||
|
||
var _proto = AnimatedValueArray.prototype;
|
||
|
||
_proto.setValue = function setValue(value, flush) {
|
||
var _this2 = this;
|
||
|
||
if (flush === void 0) {
|
||
flush = true;
|
||
}
|
||
|
||
if (Array.isArray(value)) {
|
||
if (value.length === this.payload.length) {
|
||
value.forEach(function (v, i) {
|
||
return _this2.payload[i].setValue(v, flush);
|
||
});
|
||
}
|
||
} else {
|
||
this.payload.forEach(function (p) {
|
||
return p.setValue(value, flush);
|
||
});
|
||
}
|
||
};
|
||
|
||
_proto.getValue = function getValue() {
|
||
return this.payload.map(function (v) {
|
||
return v.getValue();
|
||
});
|
||
};
|
||
|
||
_proto.interpolate = function interpolate(range, output) {
|
||
return new AnimatedInterpolation(this, range, output);
|
||
};
|
||
|
||
return AnimatedValueArray;
|
||
}(AnimatedArray);
|
||
|
||
var G = 0;
|
||
|
||
var Controller =
|
||
/*#__PURE__*/
|
||
function () {
|
||
function Controller() {
|
||
var _this = this;
|
||
|
||
this.id = void 0;
|
||
this.idle = true;
|
||
this.hasChanged = false;
|
||
this.guid = 0;
|
||
this.local = 0;
|
||
this.props = {};
|
||
this.merged = {};
|
||
this.animations = {};
|
||
this.interpolations = {};
|
||
this.values = {};
|
||
this.configs = [];
|
||
this.listeners = [];
|
||
this.queue = [];
|
||
this.localQueue = void 0;
|
||
|
||
this.getValues = function () {
|
||
return _this.interpolations;
|
||
};
|
||
|
||
this.id = G++;
|
||
}
|
||
/** update(props)
|
||
* This function filters input props and creates an array of tasks which are executed in .start()
|
||
* Each task is allowed to carry a delay, which means it can execute asnychroneously */
|
||
|
||
|
||
var _proto = Controller.prototype;
|
||
|
||
_proto.update = function update$$1(args) {
|
||
//this._id = n + this.id
|
||
if (!args) return this; // Extract delay and the to-prop from props
|
||
|
||
var _ref = interpolateTo(args),
|
||
_ref$delay = _ref.delay,
|
||
delay = _ref$delay === void 0 ? 0 : _ref$delay,
|
||
to = _ref.to,
|
||
props = _objectWithoutPropertiesLoose(_ref, ["delay", "to"]);
|
||
|
||
if (is.arr(to) || is.fun(to)) {
|
||
// If config is either a function or an array queue it up as is
|
||
this.queue.push(_extends({}, props, {
|
||
delay: delay,
|
||
to: to
|
||
}));
|
||
} else if (to) {
|
||
// Otherwise go through each key since it could be delayed individually
|
||
var ops = {};
|
||
Object.entries(to).forEach(function (_ref2) {
|
||
var _to;
|
||
|
||
var k = _ref2[0],
|
||
v = _ref2[1];
|
||
|
||
// Fetch delay and create an entry, consisting of the to-props, the delay, and basic props
|
||
var entry = _extends({
|
||
to: (_to = {}, _to[k] = v, _to),
|
||
delay: callProp(delay, k)
|
||
}, props);
|
||
|
||
var previous = ops[entry.delay] && ops[entry.delay].to;
|
||
ops[entry.delay] = _extends({}, ops[entry.delay], entry, {
|
||
to: _extends({}, previous, entry.to)
|
||
});
|
||
});
|
||
this.queue = Object.values(ops);
|
||
} // Sort queue, so that async calls go last
|
||
|
||
|
||
this.queue = this.queue.sort(function (a, b) {
|
||
return a.delay - b.delay;
|
||
}); // Diff the reduced props immediately (they'll contain the from-prop and some config)
|
||
|
||
this.diff(props);
|
||
return this;
|
||
}
|
||
/** start(onEnd)
|
||
* This function either executes a queue, if present, or starts the frameloop, which animates */
|
||
;
|
||
|
||
_proto.start = function start$$1(onEnd) {
|
||
var _this2 = this;
|
||
|
||
// If a queue is present we must excecute it
|
||
if (this.queue.length) {
|
||
this.idle = false; // Updates can interrupt trailing queues, in that case we just merge values
|
||
|
||
if (this.localQueue) {
|
||
this.localQueue.forEach(function (_ref3) {
|
||
var _ref3$from = _ref3.from,
|
||
from = _ref3$from === void 0 ? {} : _ref3$from,
|
||
_ref3$to = _ref3.to,
|
||
to = _ref3$to === void 0 ? {} : _ref3$to;
|
||
if (is.obj(from)) _this2.merged = _extends({}, from, _this2.merged);
|
||
if (is.obj(to)) _this2.merged = _extends({}, _this2.merged, to);
|
||
});
|
||
} // The guid helps us tracking frames, a new queue over an old one means an override
|
||
// We discard async calls in that caseÍ
|
||
|
||
|
||
var local = this.local = ++this.guid;
|
||
var queue = this.localQueue = this.queue;
|
||
this.queue = []; // Go through each entry and execute it
|
||
|
||
queue.forEach(function (_ref4, index) {
|
||
var delay = _ref4.delay,
|
||
props = _objectWithoutPropertiesLoose(_ref4, ["delay"]);
|
||
|
||
var cb = function cb(finished) {
|
||
if (index === queue.length - 1 && local === _this2.guid && finished) {
|
||
_this2.idle = true;
|
||
if (_this2.props.onRest) _this2.props.onRest(_this2.merged);
|
||
}
|
||
|
||
if (onEnd) onEnd();
|
||
}; // Entries can be delayed, ansyc or immediate
|
||
|
||
|
||
var async = is.arr(props.to) || is.fun(props.to);
|
||
|
||
if (delay) {
|
||
setTimeout(function () {
|
||
if (local === _this2.guid) {
|
||
if (async) _this2.runAsync(props, cb);else _this2.diff(props).start(cb);
|
||
}
|
||
}, delay);
|
||
} else if (async) _this2.runAsync(props, cb);else _this2.diff(props).start(cb);
|
||
});
|
||
} // Otherwise we kick of the frameloop
|
||
else {
|
||
if (is.fun(onEnd)) this.listeners.push(onEnd);
|
||
if (this.props.onStart) this.props.onStart();
|
||
|
||
start(this);
|
||
}
|
||
|
||
return this;
|
||
};
|
||
|
||
_proto.stop = function stop$$1(finished) {
|
||
this.listeners.forEach(function (onEnd) {
|
||
return onEnd(finished);
|
||
});
|
||
this.listeners = [];
|
||
return this;
|
||
}
|
||
/** Pause sets onEnd listeners free, but also removes the controller from the frameloop */
|
||
;
|
||
|
||
_proto.pause = function pause(finished) {
|
||
this.stop(true);
|
||
if (finished) stop(this);
|
||
return this;
|
||
};
|
||
|
||
_proto.runAsync = function runAsync(_ref5, onEnd) {
|
||
var _this3 = this;
|
||
|
||
var delay = _ref5.delay,
|
||
props = _objectWithoutPropertiesLoose(_ref5, ["delay"]);
|
||
|
||
var local = this.local; // If "to" is either a function or an array it will be processed async, therefor "to" should be empty right now
|
||
// If the view relies on certain values "from" has to be present
|
||
|
||
var queue = Promise.resolve(undefined);
|
||
|
||
if (is.arr(props.to)) {
|
||
var _loop = function _loop(i) {
|
||
var index = i;
|
||
|
||
var fresh = _extends({}, props, interpolateTo(props.to[index]));
|
||
|
||
if (is.arr(fresh.config)) fresh.config = fresh.config[index];
|
||
queue = queue.then(function () {
|
||
//this.stop()
|
||
if (local === _this3.guid) return new Promise(function (r) {
|
||
return _this3.diff(fresh).start(r);
|
||
});
|
||
});
|
||
};
|
||
|
||
for (var i = 0; i < props.to.length; i++) {
|
||
_loop(i);
|
||
}
|
||
} else if (is.fun(props.to)) {
|
||
var index = 0;
|
||
var last;
|
||
queue = queue.then(function () {
|
||
return props.to( // next(props)
|
||
function (p) {
|
||
var fresh = _extends({}, props, interpolateTo(p));
|
||
|
||
if (is.arr(fresh.config)) fresh.config = fresh.config[index];
|
||
index++; //this.stop()
|
||
|
||
if (local === _this3.guid) return last = new Promise(function (r) {
|
||
return _this3.diff(fresh).start(r);
|
||
});
|
||
return;
|
||
}, // cancel()
|
||
function (finished) {
|
||
if (finished === void 0) {
|
||
finished = true;
|
||
}
|
||
|
||
return _this3.stop(finished);
|
||
}).then(function () {
|
||
return last;
|
||
});
|
||
});
|
||
}
|
||
|
||
queue.then(onEnd);
|
||
};
|
||
|
||
_proto.diff = function diff(props) {
|
||
var _this4 = this;
|
||
|
||
this.props = _extends({}, this.props, props);
|
||
var _this$props = this.props,
|
||
_this$props$from = _this$props.from,
|
||
from = _this$props$from === void 0 ? {} : _this$props$from,
|
||
_this$props$to = _this$props.to,
|
||
to = _this$props$to === void 0 ? {} : _this$props$to,
|
||
_this$props$config = _this$props.config,
|
||
config = _this$props$config === void 0 ? {} : _this$props$config,
|
||
reverse = _this$props.reverse,
|
||
attach = _this$props.attach,
|
||
reset = _this$props.reset,
|
||
immediate = _this$props.immediate; // Reverse values when requested
|
||
|
||
if (reverse) {
|
||
var _ref6 = [to, from];
|
||
from = _ref6[0];
|
||
to = _ref6[1];
|
||
} // This will collect all props that were ever set, reset merged props when necessary
|
||
|
||
|
||
this.merged = _extends({}, from, this.merged, to);
|
||
this.hasChanged = false; // Attachment handling, trailed springs can "attach" themselves to a previous spring
|
||
|
||
var target = attach && attach(this); // Reduces input { name: value } pairs into animated values
|
||
|
||
this.animations = Object.entries(this.merged).reduce(function (acc, _ref7) {
|
||
var name = _ref7[0],
|
||
value = _ref7[1];
|
||
// Issue cached entries, except on reset
|
||
var entry = acc[name] || {}; // Figure out what the value is supposed to be
|
||
|
||
var isNumber = is.num(value);
|
||
var isString = is.str(value) && !value.startsWith('#') && !/\d/.test(value) && !colorNames[value];
|
||
var isArray = is.arr(value);
|
||
var isInterpolation = !isNumber && !isArray && !isString;
|
||
var fromValue = !is.und(from[name]) ? from[name] : value;
|
||
var toValue = isNumber || isArray ? value : isString ? value : 1;
|
||
var toConfig = callProp(config, name);
|
||
if (target) toValue = target.animations[name].parent;
|
||
var parent = entry.parent,
|
||
interpolation$$1 = entry.interpolation,
|
||
toValues = toArray(target ? toValue.getPayload() : toValue),
|
||
animatedValues;
|
||
var newValue = value;
|
||
if (isInterpolation) newValue = interpolation({
|
||
range: [0, 1],
|
||
output: [value, value]
|
||
})(1);
|
||
var currentValue = interpolation$$1 && interpolation$$1.getValue(); // Change detection flags
|
||
|
||
var isFirst = is.und(parent);
|
||
var isActive = !isFirst && entry.animatedValues.some(function (v) {
|
||
return !v.done;
|
||
});
|
||
var currentValueDiffersFromGoal = !is.equ(newValue, currentValue);
|
||
var hasNewGoal = !is.equ(newValue, entry.previous);
|
||
var hasNewConfig = !is.equ(toConfig, entry.config); // Change animation props when props indicate a new goal (new value differs from previous one)
|
||
// and current values differ from it. Config changes trigger a new update as well (though probably shouldn't?)
|
||
|
||
if (reset || hasNewGoal && currentValueDiffersFromGoal || hasNewConfig) {
|
||
var _extends2;
|
||
|
||
// Convert regular values into animated values, ALWAYS re-use if possible
|
||
if (isNumber || isString) parent = interpolation$$1 = entry.parent || new AnimatedValue(fromValue);else if (isArray) parent = interpolation$$1 = entry.parent || new AnimatedValueArray(fromValue);else if (isInterpolation) {
|
||
var prev = entry.interpolation && entry.interpolation.calc(entry.parent.value);
|
||
prev = prev !== void 0 && !reset ? prev : fromValue;
|
||
|
||
if (entry.parent) {
|
||
parent = entry.parent;
|
||
parent.setValue(0, false);
|
||
} else parent = new AnimatedValue(0);
|
||
|
||
var range = {
|
||
output: [prev, value]
|
||
};
|
||
|
||
if (entry.interpolation) {
|
||
interpolation$$1 = entry.interpolation;
|
||
entry.interpolation.updateConfig(range);
|
||
} else interpolation$$1 = parent.interpolate(range);
|
||
}
|
||
toValues = toArray(target ? toValue.getPayload() : toValue);
|
||
animatedValues = toArray(parent.getPayload());
|
||
if (reset && !isInterpolation) parent.setValue(fromValue, false);
|
||
_this4.hasChanged = true; // Reset animated values
|
||
|
||
animatedValues.forEach(function (value) {
|
||
value.startPosition = value.value;
|
||
value.lastPosition = value.value;
|
||
value.lastVelocity = isActive ? value.lastVelocity : undefined;
|
||
value.lastTime = isActive ? value.lastTime : undefined;
|
||
value.startTime = now();
|
||
value.done = false;
|
||
value.animatedStyles.clear();
|
||
}); // Set immediate values
|
||
|
||
if (callProp(immediate, name)) {
|
||
parent.setValue(isInterpolation ? toValue : value, false);
|
||
}
|
||
|
||
return _extends({}, acc, (_extends2 = {}, _extends2[name] = _extends({}, entry, {
|
||
name: name,
|
||
parent: parent,
|
||
interpolation: interpolation$$1,
|
||
animatedValues: animatedValues,
|
||
toValues: toValues,
|
||
previous: newValue,
|
||
config: toConfig,
|
||
fromValues: toArray(parent.getValue()),
|
||
immediate: callProp(immediate, name),
|
||
initialVelocity: withDefault(toConfig.velocity, 0),
|
||
clamp: withDefault(toConfig.clamp, false),
|
||
precision: withDefault(toConfig.precision, 0.01),
|
||
tension: withDefault(toConfig.tension, 170),
|
||
friction: withDefault(toConfig.friction, 26),
|
||
mass: withDefault(toConfig.mass, 1),
|
||
duration: toConfig.duration,
|
||
easing: withDefault(toConfig.easing, function (t) {
|
||
return t;
|
||
}),
|
||
decay: toConfig.decay
|
||
}), _extends2));
|
||
} else {
|
||
if (!currentValueDiffersFromGoal) {
|
||
var _extends3;
|
||
|
||
// So ... the current target value (newValue) appears to be different from the previous value,
|
||
// which normally constitutes an update, but the actual value (currentValue) matches the target!
|
||
// In order to resolve this without causing an animation update we silently flag the animation as done,
|
||
// which it technically is. Interpolations also needs a config update with their target set to 1.
|
||
if (isInterpolation) {
|
||
parent.setValue(1, false);
|
||
interpolation$$1.updateConfig({
|
||
output: [newValue, newValue]
|
||
});
|
||
}
|
||
|
||
parent.done = true;
|
||
_this4.hasChanged = true;
|
||
return _extends({}, acc, (_extends3 = {}, _extends3[name] = _extends({}, acc[name], {
|
||
previous: newValue
|
||
}), _extends3));
|
||
}
|
||
|
||
return acc;
|
||
}
|
||
}, this.animations);
|
||
|
||
if (this.hasChanged) {
|
||
// Make animations available to frameloop
|
||
this.configs = Object.values(this.animations);
|
||
this.values = {};
|
||
this.interpolations = {};
|
||
|
||
for (var key in this.animations) {
|
||
this.interpolations[key] = this.animations[key].interpolation;
|
||
this.values[key] = this.animations[key].interpolation.getValue();
|
||
}
|
||
}
|
||
|
||
return this;
|
||
};
|
||
|
||
_proto.destroy = function destroy() {
|
||
this.stop();
|
||
this.props = {};
|
||
this.merged = {};
|
||
this.animations = {};
|
||
this.interpolations = {};
|
||
this.values = {};
|
||
this.configs = [];
|
||
this.local = 0;
|
||
};
|
||
|
||
return Controller;
|
||
}();
|
||
|
||
/** API
|
||
* const props = useSprings(number, [{ ... }, { ... }, ...])
|
||
* const [props, set] = useSprings(number, (i, controller) => ({ ... }))
|
||
*/
|
||
|
||
var useSprings = function useSprings(length, props) {
|
||
var mounted = React.useRef(false);
|
||
var ctrl = React.useRef();
|
||
var isFn = is.fun(props); // The controller maintains the animation values, starts and stops animations
|
||
|
||
var _useMemo = React.useMemo(function () {
|
||
// Remove old controllers
|
||
if (ctrl.current) {
|
||
ctrl.current.map(function (c) {
|
||
return c.destroy();
|
||
});
|
||
ctrl.current = undefined;
|
||
}
|
||
|
||
var ref;
|
||
return [new Array(length).fill().map(function (_, i) {
|
||
var ctrl = new Controller();
|
||
var newProps = isFn ? callProp(props, i, ctrl) : props[i];
|
||
if (i === 0) ref = newProps.ref;
|
||
ctrl.update(newProps);
|
||
if (!ref) ctrl.start();
|
||
return ctrl;
|
||
}), ref];
|
||
}, [length]),
|
||
controllers = _useMemo[0],
|
||
ref = _useMemo[1];
|
||
|
||
ctrl.current = controllers; // The hooks reference api gets defined here ...
|
||
|
||
var api = React.useImperativeHandle(ref, function () {
|
||
return {
|
||
start: function start() {
|
||
return Promise.all(ctrl.current.map(function (c) {
|
||
return new Promise(function (r) {
|
||
return c.start(r);
|
||
});
|
||
}));
|
||
},
|
||
stop: function stop(finished) {
|
||
return ctrl.current.forEach(function (c) {
|
||
return c.stop(finished);
|
||
});
|
||
},
|
||
|
||
get controllers() {
|
||
return ctrl.current;
|
||
}
|
||
|
||
};
|
||
}); // This function updates the controllers
|
||
|
||
var updateCtrl = React.useMemo(function () {
|
||
return function (updateProps) {
|
||
return ctrl.current.map(function (c, i) {
|
||
c.update(isFn ? callProp(updateProps, i, c) : updateProps[i]);
|
||
if (!ref) c.start();
|
||
});
|
||
};
|
||
}, [length]); // Update controller if props aren't functional
|
||
|
||
React.useEffect(function () {
|
||
if (mounted.current) {
|
||
if (!isFn) updateCtrl(props);
|
||
} else if (!ref) ctrl.current.forEach(function (c) {
|
||
return c.start();
|
||
});
|
||
}); // Update mounted flag and destroy controller on unmount
|
||
|
||
React.useEffect(function () {
|
||
return mounted.current = true, function () {
|
||
return ctrl.current.forEach(function (c) {
|
||
return c.destroy();
|
||
});
|
||
};
|
||
}, []); // Return animated props, or, anim-props + the update-setter above
|
||
|
||
var propValues = ctrl.current.map(function (c) {
|
||
return c.getValues();
|
||
});
|
||
return isFn ? [propValues, updateCtrl, function (finished) {
|
||
return ctrl.current.forEach(function (c) {
|
||
return c.pause(finished);
|
||
});
|
||
}] : propValues;
|
||
};
|
||
|
||
/** API
|
||
* const props = useSpring({ ... })
|
||
* const [props, set] = useSpring(() => ({ ... }))
|
||
*/
|
||
|
||
var useSpring = function useSpring(props) {
|
||
var isFn = is.fun(props);
|
||
|
||
var _useSprings = useSprings(1, isFn ? props : [props]),
|
||
result = _useSprings[0],
|
||
set = _useSprings[1],
|
||
pause = _useSprings[2];
|
||
|
||
return isFn ? [result[0], set, pause] : result;
|
||
};
|
||
|
||
/** API
|
||
* const trails = useTrail(number, { ... })
|
||
* const [trails, set] = useTrail(number, () => ({ ... }))
|
||
*/
|
||
|
||
var useTrail = function useTrail(length, props) {
|
||
var mounted = React.useRef(false);
|
||
var isFn = is.fun(props);
|
||
var updateProps = callProp(props);
|
||
var instances = React.useRef();
|
||
|
||
var _useSprings = useSprings(length, function (i, ctrl) {
|
||
if (i === 0) instances.current = [];
|
||
instances.current.push(ctrl);
|
||
return _extends({}, updateProps, {
|
||
config: callProp(updateProps.config, i),
|
||
attach: i > 0 && function () {
|
||
return instances.current[i - 1];
|
||
}
|
||
});
|
||
}),
|
||
result = _useSprings[0],
|
||
set = _useSprings[1],
|
||
pause = _useSprings[2]; // Set up function to update controller
|
||
|
||
|
||
var updateCtrl = React.useMemo(function () {
|
||
return function (props) {
|
||
return set(function (i, ctrl) {
|
||
var last = props.reverse ? i === 0 : length - 1 === i;
|
||
var attachIdx = props.reverse ? i + 1 : i - 1;
|
||
var attachController = instances.current[attachIdx];
|
||
return _extends({}, props, {
|
||
config: callProp(props.config || updateProps.config, i),
|
||
attach: attachController && function () {
|
||
return attachController;
|
||
}
|
||
});
|
||
});
|
||
};
|
||
}, [length, updateProps.reverse]); // Update controller if props aren't functional
|
||
|
||
React.useEffect(function () {
|
||
return void (mounted.current && !isFn && updateCtrl(props));
|
||
}); // Update mounted flag and destroy controller on unmount
|
||
|
||
React.useEffect(function () {
|
||
return void (mounted.current = true);
|
||
}, []);
|
||
return isFn ? [result, updateCtrl, pause] : result;
|
||
};
|
||
|
||
/** API
|
||
* const transitions = useTransition(items, itemKeys, { ... })
|
||
* const [transitions, update] = useTransition(items, itemKeys, () => ({ ... }))
|
||
*/
|
||
|
||
var guid = 0;
|
||
var ENTER = 'enter';
|
||
var LEAVE = 'leave';
|
||
var UPDATE = 'update';
|
||
|
||
var mapKeys = function mapKeys(items, keys) {
|
||
return (typeof keys === 'function' ? items.map(keys) : toArray(keys)).map(String);
|
||
};
|
||
|
||
var get = function get(props) {
|
||
var items = props.items,
|
||
_props$keys = props.keys,
|
||
keys = _props$keys === void 0 ? function (item) {
|
||
return item;
|
||
} : _props$keys,
|
||
rest = _objectWithoutPropertiesLoose(props, ["items", "keys"]);
|
||
|
||
items = toArray(items !== void 0 ? items : null);
|
||
return _extends({
|
||
items: items,
|
||
keys: mapKeys(items, keys)
|
||
}, rest);
|
||
};
|
||
|
||
function useTransition(input, keyTransform, config) {
|
||
var props = _extends({
|
||
items: input,
|
||
keys: keyTransform || function (i) {
|
||
return i;
|
||
}
|
||
}, config);
|
||
|
||
var _get = get(props),
|
||
_get$lazy = _get.lazy,
|
||
lazy = _get$lazy === void 0 ? false : _get$lazy,
|
||
_get$unique = _get.unique,
|
||
_get$reset = _get.reset,
|
||
reset = _get$reset === void 0 ? false : _get$reset,
|
||
enter = _get.enter,
|
||
leave = _get.leave,
|
||
update = _get.update,
|
||
onDestroyed = _get.onDestroyed,
|
||
keys = _get.keys,
|
||
items = _get.items,
|
||
onFrame = _get.onFrame,
|
||
_onRest = _get.onRest,
|
||
onStart = _get.onStart,
|
||
ref = _get.ref,
|
||
extra = _objectWithoutPropertiesLoose(_get, ["lazy", "unique", "reset", "enter", "leave", "update", "onDestroyed", "keys", "items", "onFrame", "onRest", "onStart", "ref"]);
|
||
|
||
var forceUpdate = useForceUpdate();
|
||
var mounted = React.useRef(false);
|
||
var state = React.useRef({
|
||
mounted: false,
|
||
first: true,
|
||
deleted: [],
|
||
current: {},
|
||
transitions: [],
|
||
prevProps: {},
|
||
paused: !!props.ref,
|
||
instances: !mounted.current && new Map(),
|
||
forceUpdate: forceUpdate
|
||
});
|
||
React.useImperativeHandle(props.ref, function () {
|
||
return {
|
||
start: function start() {
|
||
return Promise.all(Array.from(state.current.instances).map(function (_ref) {
|
||
var c = _ref[1];
|
||
return new Promise(function (r) {
|
||
return c.start(r);
|
||
});
|
||
}));
|
||
},
|
||
stop: function stop(finished) {
|
||
return Array.from(state.current.instances).forEach(function (_ref2) {
|
||
var c = _ref2[1];
|
||
return c.stop(finished);
|
||
});
|
||
},
|
||
|
||
get controllers() {
|
||
return Array.from(state.current.instances).map(function (_ref3) {
|
||
var c = _ref3[1];
|
||
return c;
|
||
});
|
||
}
|
||
|
||
};
|
||
}); // Update state
|
||
|
||
state.current = diffItems(state.current, props);
|
||
|
||
if (state.current.changed) {
|
||
// Update state
|
||
state.current.transitions.forEach(function (transition) {
|
||
var slot = transition.slot,
|
||
from = transition.from,
|
||
to = transition.to,
|
||
config = transition.config,
|
||
trail = transition.trail,
|
||
key = transition.key,
|
||
item = transition.item;
|
||
if (!state.current.instances.has(key)) state.current.instances.set(key, new Controller()); // update the map object
|
||
|
||
var ctrl = state.current.instances.get(key);
|
||
|
||
var newProps = _extends({}, extra, {
|
||
to: to,
|
||
from: from,
|
||
config: config,
|
||
ref: ref,
|
||
onRest: function onRest(values) {
|
||
if (state.current.mounted) {
|
||
if (transition.destroyed) {
|
||
// If no ref is given delete destroyed items immediately
|
||
if (!ref && !lazy) cleanUp(state, key);
|
||
if (onDestroyed) onDestroyed(item);
|
||
} // A transition comes to rest once all its springs conclude
|
||
|
||
|
||
var curInstances = Array.from(state.current.instances);
|
||
var active = curInstances.some(function (_ref4) {
|
||
var c = _ref4[1];
|
||
return !c.idle;
|
||
});
|
||
if (!active && (ref || lazy) && state.current.deleted.length > 0) cleanUp(state);
|
||
if (_onRest) _onRest(item, slot, values);
|
||
}
|
||
},
|
||
onStart: onStart && function () {
|
||
return onStart(item, slot);
|
||
},
|
||
onFrame: onFrame && function (values) {
|
||
return onFrame(item, slot, values);
|
||
},
|
||
delay: trail,
|
||
reset: reset && slot === ENTER // Update controller
|
||
|
||
});
|
||
|
||
ctrl.update(newProps);
|
||
if (!state.current.paused) ctrl.start();
|
||
});
|
||
}
|
||
|
||
React.useEffect(function () {
|
||
state.current.mounted = mounted.current = true;
|
||
return function () {
|
||
state.current.mounted = mounted.current = false;
|
||
Array.from(state.current.instances).map(function (_ref5) {
|
||
var c = _ref5[1];
|
||
return c.destroy();
|
||
});
|
||
state.current.instances.clear();
|
||
};
|
||
}, []);
|
||
return state.current.transitions.map(function (_ref6) {
|
||
var item = _ref6.item,
|
||
slot = _ref6.slot,
|
||
key = _ref6.key;
|
||
return {
|
||
item: item,
|
||
key: key,
|
||
state: slot,
|
||
props: state.current.instances.get(key).getValues()
|
||
};
|
||
});
|
||
}
|
||
|
||
function cleanUp(state, filterKey) {
|
||
var deleted = state.current.deleted;
|
||
|
||
var _loop = function _loop() {
|
||
if (_isArray) {
|
||
if (_i >= _iterator.length) return "break";
|
||
_ref8 = _iterator[_i++];
|
||
} else {
|
||
_i = _iterator.next();
|
||
if (_i.done) return "break";
|
||
_ref8 = _i.value;
|
||
}
|
||
|
||
var _ref7 = _ref8;
|
||
var key = _ref7.key;
|
||
|
||
var filter = function filter(t) {
|
||
return t.key !== key;
|
||
};
|
||
|
||
if (is.und(filterKey) || filterKey === key) {
|
||
state.current.instances.delete(key);
|
||
state.current.transitions = state.current.transitions.filter(filter);
|
||
state.current.deleted = state.current.deleted.filter(filter);
|
||
}
|
||
};
|
||
|
||
for (var _iterator = deleted, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
||
var _ref8;
|
||
|
||
var _ret = _loop();
|
||
|
||
if (_ret === "break") break;
|
||
}
|
||
|
||
state.current.forceUpdate();
|
||
}
|
||
|
||
function diffItems(_ref9, props) {
|
||
var first = _ref9.first,
|
||
prevProps = _ref9.prevProps,
|
||
state = _objectWithoutPropertiesLoose(_ref9, ["first", "prevProps"]);
|
||
|
||
var _get2 = get(props),
|
||
items = _get2.items,
|
||
keys = _get2.keys,
|
||
initial = _get2.initial,
|
||
from = _get2.from,
|
||
enter = _get2.enter,
|
||
leave = _get2.leave,
|
||
update = _get2.update,
|
||
_get2$trail = _get2.trail,
|
||
trail = _get2$trail === void 0 ? 0 : _get2$trail,
|
||
unique = _get2.unique,
|
||
config = _get2.config,
|
||
_get2$order = _get2.order,
|
||
order = _get2$order === void 0 ? [ENTER, LEAVE, UPDATE] : _get2$order;
|
||
|
||
var _get3 = get(prevProps),
|
||
_keys = _get3.keys,
|
||
_items = _get3.items;
|
||
|
||
var current = _extends({}, state.current);
|
||
|
||
var deleted = [].concat(state.deleted); // Compare next keys with current keys
|
||
|
||
var currentKeys = Object.keys(current);
|
||
var currentSet = new Set(currentKeys);
|
||
var nextSet = new Set(keys);
|
||
var added = keys.filter(function (item) {
|
||
return !currentSet.has(item);
|
||
});
|
||
var removed = state.transitions.filter(function (item) {
|
||
return !item.destroyed && !nextSet.has(item.originalKey);
|
||
}).map(function (i) {
|
||
return i.originalKey;
|
||
});
|
||
var updated = keys.filter(function (item) {
|
||
return currentSet.has(item);
|
||
});
|
||
var delay = -trail;
|
||
|
||
while (order.length) {
|
||
var changeType = order.shift();
|
||
|
||
switch (changeType) {
|
||
case ENTER:
|
||
{
|
||
added.forEach(function (key, index) {
|
||
// In unique mode, remove fading out transitions if their key comes in again
|
||
if (unique && deleted.find(function (d) {
|
||
return d.originalKey === key;
|
||
})) deleted = deleted.filter(function (t) {
|
||
return t.originalKey !== key;
|
||
});
|
||
var keyIndex = keys.indexOf(key);
|
||
var item = items[keyIndex];
|
||
var slot = first && initial !== void 0 ? 'initial' : ENTER;
|
||
current[key] = {
|
||
slot: slot,
|
||
originalKey: key,
|
||
key: unique ? String(key) : guid++,
|
||
item: item,
|
||
trail: delay = delay + trail,
|
||
config: callProp(config, item, slot),
|
||
from: callProp(first ? initial !== void 0 ? initial || {} : from : from, item),
|
||
to: callProp(enter, item)
|
||
};
|
||
});
|
||
break;
|
||
}
|
||
|
||
case LEAVE:
|
||
{
|
||
removed.forEach(function (key) {
|
||
var keyIndex = _keys.indexOf(key);
|
||
|
||
var item = _items[keyIndex];
|
||
var slot = LEAVE;
|
||
deleted.unshift(_extends({}, current[key], {
|
||
slot: slot,
|
||
destroyed: true,
|
||
left: _keys[Math.max(0, keyIndex - 1)],
|
||
right: _keys[Math.min(_keys.length, keyIndex + 1)],
|
||
trail: delay = delay + trail,
|
||
config: callProp(config, item, slot),
|
||
to: callProp(leave, item)
|
||
}));
|
||
delete current[key];
|
||
});
|
||
break;
|
||
}
|
||
|
||
case UPDATE:
|
||
{
|
||
updated.forEach(function (key) {
|
||
var keyIndex = keys.indexOf(key);
|
||
var item = items[keyIndex];
|
||
var slot = UPDATE;
|
||
current[key] = _extends({}, current[key], {
|
||
item: item,
|
||
slot: slot,
|
||
trail: delay = delay + trail,
|
||
config: callProp(config, item, slot),
|
||
to: callProp(update, item)
|
||
});
|
||
});
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
var out = keys.map(function (key) {
|
||
return current[key];
|
||
}); // This tries to restore order for deleted items by finding their last known siblings
|
||
// only using the left sibling to keep order placement consistent for all deleted items
|
||
|
||
deleted.forEach(function (_ref10) {
|
||
var left = _ref10.left,
|
||
right = _ref10.right,
|
||
item = _objectWithoutPropertiesLoose(_ref10, ["left", "right"]);
|
||
|
||
var pos; // Was it the element on the left, if yes, move there ...
|
||
|
||
if ((pos = out.findIndex(function (t) {
|
||
return t.originalKey === left;
|
||
})) !== -1) pos += 1; // And if nothing else helps, move it to the start ¯\_(ツ)_/¯
|
||
|
||
pos = Math.max(0, pos);
|
||
out = [].concat(out.slice(0, pos), [item], out.slice(pos));
|
||
});
|
||
return _extends({}, state, {
|
||
changed: added.length || removed.length || updated.length,
|
||
first: first && added.length === 0,
|
||
transitions: out,
|
||
current: current,
|
||
deleted: deleted,
|
||
prevProps: props
|
||
});
|
||
}
|
||
|
||
var AnimatedStyle =
|
||
/*#__PURE__*/
|
||
function (_AnimatedObject) {
|
||
_inheritsLoose(AnimatedStyle, _AnimatedObject);
|
||
|
||
function AnimatedStyle(style) {
|
||
var _this;
|
||
|
||
if (style === void 0) {
|
||
style = {};
|
||
}
|
||
|
||
_this = _AnimatedObject.call(this) || this;
|
||
|
||
if (style.transform && !(style.transform instanceof Animated)) {
|
||
style = applyAnimatedValues.transform(style);
|
||
}
|
||
|
||
_this.payload = style;
|
||
return _this;
|
||
}
|
||
|
||
return AnimatedStyle;
|
||
}(AnimatedObject);
|
||
|
||
// http://www.w3.org/TR/css3-color/#svg-color
|
||
var colors = {
|
||
transparent: 0x00000000,
|
||
aliceblue: 0xf0f8ffff,
|
||
antiquewhite: 0xfaebd7ff,
|
||
aqua: 0x00ffffff,
|
||
aquamarine: 0x7fffd4ff,
|
||
azure: 0xf0ffffff,
|
||
beige: 0xf5f5dcff,
|
||
bisque: 0xffe4c4ff,
|
||
black: 0x000000ff,
|
||
blanchedalmond: 0xffebcdff,
|
||
blue: 0x0000ffff,
|
||
blueviolet: 0x8a2be2ff,
|
||
brown: 0xa52a2aff,
|
||
burlywood: 0xdeb887ff,
|
||
burntsienna: 0xea7e5dff,
|
||
cadetblue: 0x5f9ea0ff,
|
||
chartreuse: 0x7fff00ff,
|
||
chocolate: 0xd2691eff,
|
||
coral: 0xff7f50ff,
|
||
cornflowerblue: 0x6495edff,
|
||
cornsilk: 0xfff8dcff,
|
||
crimson: 0xdc143cff,
|
||
cyan: 0x00ffffff,
|
||
darkblue: 0x00008bff,
|
||
darkcyan: 0x008b8bff,
|
||
darkgoldenrod: 0xb8860bff,
|
||
darkgray: 0xa9a9a9ff,
|
||
darkgreen: 0x006400ff,
|
||
darkgrey: 0xa9a9a9ff,
|
||
darkkhaki: 0xbdb76bff,
|
||
darkmagenta: 0x8b008bff,
|
||
darkolivegreen: 0x556b2fff,
|
||
darkorange: 0xff8c00ff,
|
||
darkorchid: 0x9932ccff,
|
||
darkred: 0x8b0000ff,
|
||
darksalmon: 0xe9967aff,
|
||
darkseagreen: 0x8fbc8fff,
|
||
darkslateblue: 0x483d8bff,
|
||
darkslategray: 0x2f4f4fff,
|
||
darkslategrey: 0x2f4f4fff,
|
||
darkturquoise: 0x00ced1ff,
|
||
darkviolet: 0x9400d3ff,
|
||
deeppink: 0xff1493ff,
|
||
deepskyblue: 0x00bfffff,
|
||
dimgray: 0x696969ff,
|
||
dimgrey: 0x696969ff,
|
||
dodgerblue: 0x1e90ffff,
|
||
firebrick: 0xb22222ff,
|
||
floralwhite: 0xfffaf0ff,
|
||
forestgreen: 0x228b22ff,
|
||
fuchsia: 0xff00ffff,
|
||
gainsboro: 0xdcdcdcff,
|
||
ghostwhite: 0xf8f8ffff,
|
||
gold: 0xffd700ff,
|
||
goldenrod: 0xdaa520ff,
|
||
gray: 0x808080ff,
|
||
green: 0x008000ff,
|
||
greenyellow: 0xadff2fff,
|
||
grey: 0x808080ff,
|
||
honeydew: 0xf0fff0ff,
|
||
hotpink: 0xff69b4ff,
|
||
indianred: 0xcd5c5cff,
|
||
indigo: 0x4b0082ff,
|
||
ivory: 0xfffff0ff,
|
||
khaki: 0xf0e68cff,
|
||
lavender: 0xe6e6faff,
|
||
lavenderblush: 0xfff0f5ff,
|
||
lawngreen: 0x7cfc00ff,
|
||
lemonchiffon: 0xfffacdff,
|
||
lightblue: 0xadd8e6ff,
|
||
lightcoral: 0xf08080ff,
|
||
lightcyan: 0xe0ffffff,
|
||
lightgoldenrodyellow: 0xfafad2ff,
|
||
lightgray: 0xd3d3d3ff,
|
||
lightgreen: 0x90ee90ff,
|
||
lightgrey: 0xd3d3d3ff,
|
||
lightpink: 0xffb6c1ff,
|
||
lightsalmon: 0xffa07aff,
|
||
lightseagreen: 0x20b2aaff,
|
||
lightskyblue: 0x87cefaff,
|
||
lightslategray: 0x778899ff,
|
||
lightslategrey: 0x778899ff,
|
||
lightsteelblue: 0xb0c4deff,
|
||
lightyellow: 0xffffe0ff,
|
||
lime: 0x00ff00ff,
|
||
limegreen: 0x32cd32ff,
|
||
linen: 0xfaf0e6ff,
|
||
magenta: 0xff00ffff,
|
||
maroon: 0x800000ff,
|
||
mediumaquamarine: 0x66cdaaff,
|
||
mediumblue: 0x0000cdff,
|
||
mediumorchid: 0xba55d3ff,
|
||
mediumpurple: 0x9370dbff,
|
||
mediumseagreen: 0x3cb371ff,
|
||
mediumslateblue: 0x7b68eeff,
|
||
mediumspringgreen: 0x00fa9aff,
|
||
mediumturquoise: 0x48d1ccff,
|
||
mediumvioletred: 0xc71585ff,
|
||
midnightblue: 0x191970ff,
|
||
mintcream: 0xf5fffaff,
|
||
mistyrose: 0xffe4e1ff,
|
||
moccasin: 0xffe4b5ff,
|
||
navajowhite: 0xffdeadff,
|
||
navy: 0x000080ff,
|
||
oldlace: 0xfdf5e6ff,
|
||
olive: 0x808000ff,
|
||
olivedrab: 0x6b8e23ff,
|
||
orange: 0xffa500ff,
|
||
orangered: 0xff4500ff,
|
||
orchid: 0xda70d6ff,
|
||
palegoldenrod: 0xeee8aaff,
|
||
palegreen: 0x98fb98ff,
|
||
paleturquoise: 0xafeeeeff,
|
||
palevioletred: 0xdb7093ff,
|
||
papayawhip: 0xffefd5ff,
|
||
peachpuff: 0xffdab9ff,
|
||
peru: 0xcd853fff,
|
||
pink: 0xffc0cbff,
|
||
plum: 0xdda0ddff,
|
||
powderblue: 0xb0e0e6ff,
|
||
purple: 0x800080ff,
|
||
rebeccapurple: 0x663399ff,
|
||
red: 0xff0000ff,
|
||
rosybrown: 0xbc8f8fff,
|
||
royalblue: 0x4169e1ff,
|
||
saddlebrown: 0x8b4513ff,
|
||
salmon: 0xfa8072ff,
|
||
sandybrown: 0xf4a460ff,
|
||
seagreen: 0x2e8b57ff,
|
||
seashell: 0xfff5eeff,
|
||
sienna: 0xa0522dff,
|
||
silver: 0xc0c0c0ff,
|
||
skyblue: 0x87ceebff,
|
||
slateblue: 0x6a5acdff,
|
||
slategray: 0x708090ff,
|
||
slategrey: 0x708090ff,
|
||
snow: 0xfffafaff,
|
||
springgreen: 0x00ff7fff,
|
||
steelblue: 0x4682b4ff,
|
||
tan: 0xd2b48cff,
|
||
teal: 0x008080ff,
|
||
thistle: 0xd8bfd8ff,
|
||
tomato: 0xff6347ff,
|
||
turquoise: 0x40e0d0ff,
|
||
violet: 0xee82eeff,
|
||
wheat: 0xf5deb3ff,
|
||
white: 0xffffffff,
|
||
whitesmoke: 0xf5f5f5ff,
|
||
yellow: 0xffff00ff,
|
||
yellowgreen: 0x9acd32ff
|
||
};
|
||
|
||
// const INTEGER = '[-+]?\\d+';
|
||
var NUMBER = '[-+]?\\d*\\.?\\d+';
|
||
var PERCENTAGE = NUMBER + '%';
|
||
|
||
function call() {
|
||
for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {
|
||
parts[_key] = arguments[_key];
|
||
}
|
||
|
||
return '\\(\\s*(' + parts.join(')\\s*,\\s*(') + ')\\s*\\)';
|
||
}
|
||
|
||
var rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER));
|
||
var rgba = new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER));
|
||
var hsl = new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE));
|
||
var hsla = new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER));
|
||
var hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;
|
||
var hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;
|
||
var hex6 = /^#([0-9a-fA-F]{6})$/;
|
||
var hex8 = /^#([0-9a-fA-F]{8})$/;
|
||
|
||
/*
|
||
https://github.com/react-community/normalize-css-color
|
||
|
||
BSD 3-Clause License
|
||
|
||
Copyright (c) 2016, React Community
|
||
All rights reserved.
|
||
|
||
Redistribution and use in source and binary forms, with or without
|
||
modification, are permitted provided that the following conditions are met:
|
||
|
||
* Redistributions of source code must retain the above copyright notice, this
|
||
list of conditions and the following disclaimer.
|
||
|
||
* Redistributions in binary form must reproduce the above copyright notice,
|
||
this list of conditions and the following disclaimer in the documentation
|
||
and/or other materials provided with the distribution.
|
||
|
||
* Neither the name of the copyright holder nor the names of its
|
||
contributors may be used to endorse or promote products derived from
|
||
this software without specific prior written permission.
|
||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
*/
|
||
function normalizeColor(color) {
|
||
var match;
|
||
|
||
if (typeof color === 'number') {
|
||
return color >>> 0 === color && color >= 0 && color <= 0xffffffff ? color : null;
|
||
} // Ordered based on occurrences on Facebook codebase
|
||
|
||
|
||
if (match = hex6.exec(color)) return parseInt(match[1] + 'ff', 16) >>> 0;
|
||
if (colors.hasOwnProperty(color)) return colors[color];
|
||
|
||
if (match = rgb.exec(color)) {
|
||
return (parse255(match[1]) << 24 | // r
|
||
parse255(match[2]) << 16 | // g
|
||
parse255(match[3]) << 8 | // b
|
||
0x000000ff) >>> // a
|
||
0;
|
||
}
|
||
|
||
if (match = rgba.exec(color)) {
|
||
return (parse255(match[1]) << 24 | // r
|
||
parse255(match[2]) << 16 | // g
|
||
parse255(match[3]) << 8 | // b
|
||
parse1(match[4])) >>> // a
|
||
0;
|
||
}
|
||
|
||
if (match = hex3.exec(color)) {
|
||
return parseInt(match[1] + match[1] + // r
|
||
match[2] + match[2] + // g
|
||
match[3] + match[3] + // b
|
||
'ff', // a
|
||
16) >>> 0;
|
||
} // https://drafts.csswg.org/css-color-4/#hex-notation
|
||
|
||
|
||
if (match = hex8.exec(color)) return parseInt(match[1], 16) >>> 0;
|
||
|
||
if (match = hex4.exec(color)) {
|
||
return parseInt(match[1] + match[1] + // r
|
||
match[2] + match[2] + // g
|
||
match[3] + match[3] + // b
|
||
match[4] + match[4], // a
|
||
16) >>> 0;
|
||
}
|
||
|
||
if (match = hsl.exec(color)) {
|
||
return (hslToRgb(parse360(match[1]), // h
|
||
parsePercentage(match[2]), // s
|
||
parsePercentage(match[3]) // l
|
||
) | 0x000000ff) >>> // a
|
||
0;
|
||
}
|
||
|
||
if (match = hsla.exec(color)) {
|
||
return (hslToRgb(parse360(match[1]), // h
|
||
parsePercentage(match[2]), // s
|
||
parsePercentage(match[3]) // l
|
||
) | parse1(match[4])) >>> // a
|
||
0;
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
function hue2rgb(p, q, t) {
|
||
if (t < 0) t += 1;
|
||
if (t > 1) t -= 1;
|
||
if (t < 1 / 6) return p + (q - p) * 6 * t;
|
||
if (t < 1 / 2) return q;
|
||
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
|
||
return p;
|
||
}
|
||
|
||
function hslToRgb(h, s, l) {
|
||
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
||
var p = 2 * l - q;
|
||
var r = hue2rgb(p, q, h + 1 / 3);
|
||
var g = hue2rgb(p, q, h);
|
||
var b = hue2rgb(p, q, h - 1 / 3);
|
||
return Math.round(r * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b * 255) << 8;
|
||
}
|
||
|
||
function parse255(str) {
|
||
var int = parseInt(str, 10);
|
||
if (int < 0) return 0;
|
||
if (int > 255) return 255;
|
||
return int;
|
||
}
|
||
|
||
function parse360(str) {
|
||
var int = parseFloat(str);
|
||
return (int % 360 + 360) % 360 / 360;
|
||
}
|
||
|
||
function parse1(str) {
|
||
var num = parseFloat(str);
|
||
if (num < 0) return 0;
|
||
if (num > 1) return 255;
|
||
return Math.round(num * 255);
|
||
}
|
||
|
||
function parsePercentage(str) {
|
||
// parseFloat conveniently ignores the final %
|
||
var int = parseFloat(str);
|
||
if (int < 0) return 0;
|
||
if (int > 100) return 1;
|
||
return int / 100;
|
||
}
|
||
|
||
function colorToRgba(input) {
|
||
var int32Color = normalizeColor(input);
|
||
if (int32Color === null) return input;
|
||
int32Color = int32Color || 0;
|
||
var r = (int32Color & 0xff000000) >>> 24;
|
||
var g = (int32Color & 0x00ff0000) >>> 16;
|
||
var b = (int32Color & 0x0000ff00) >>> 8;
|
||
var a = (int32Color & 0x000000ff) / 255;
|
||
return "rgba(" + r + ", " + g + ", " + b + ", " + a + ")";
|
||
} // Problem: https://github.com/animatedjs/animated/pull/102
|
||
// Solution: https://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly/658662
|
||
|
||
|
||
var stringShapeRegex = /[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; // Covers rgb, rgba, hsl, hsla
|
||
// Taken from https://gist.github.com/olmokramer/82ccce673f86db7cda5e
|
||
|
||
var colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi; // Covers color names (transparent, blue, etc.)
|
||
|
||
var colorNamesRegex = new RegExp("(" + Object.keys(colors).join('|') + ")", 'g');
|
||
/**
|
||
* Supports string shapes by extracting numbers so new values can be computed,
|
||
* and recombines those values into new strings of the same shape. Supports
|
||
* things like:
|
||
*
|
||
* rgba(123, 42, 99, 0.36) // colors
|
||
* -45deg // values with units
|
||
* 0 2px 2px 0px rgba(0, 0, 0, 0.12) // box shadows
|
||
*/
|
||
|
||
var createStringInterpolator = function createStringInterpolator(config) {
|
||
// Replace colors with rgba
|
||
var outputRange = config.output.map(function (rangeValue) {
|
||
return rangeValue.replace(colorRegex, colorToRgba);
|
||
}).map(function (rangeValue) {
|
||
return rangeValue.replace(colorNamesRegex, colorToRgba);
|
||
});
|
||
var outputRanges = outputRange[0].match(stringShapeRegex).map(function () {
|
||
return [];
|
||
});
|
||
outputRange.forEach(function (value) {
|
||
value.match(stringShapeRegex).forEach(function (number, i) {
|
||
return outputRanges[i].push(+number);
|
||
});
|
||
});
|
||
var interpolations = outputRange[0].match(stringShapeRegex).map(function (_value, i) {
|
||
return createInterpolator(_extends({}, config, {
|
||
output: outputRanges[i]
|
||
}));
|
||
});
|
||
return function (input) {
|
||
var i = 0;
|
||
return outputRange[0] // 'rgba(0, 100, 200, 0)'
|
||
// ->
|
||
// 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...'
|
||
.replace(stringShapeRegex, function () {
|
||
return interpolations[i++](input);
|
||
}) // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to
|
||
// round the opacity (4th column).
|
||
.replace(/rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi, function (_, p1, p2, p3, p4) {
|
||
return "rgba(" + Math.round(p1) + ", " + Math.round(p2) + ", " + Math.round(p3) + ", " + p4 + ")";
|
||
});
|
||
};
|
||
};
|
||
|
||
var isUnitlessNumber = {
|
||
animationIterationCount: true,
|
||
borderImageOutset: true,
|
||
borderImageSlice: true,
|
||
borderImageWidth: true,
|
||
boxFlex: true,
|
||
boxFlexGroup: true,
|
||
boxOrdinalGroup: true,
|
||
columnCount: true,
|
||
columns: true,
|
||
flex: true,
|
||
flexGrow: true,
|
||
flexPositive: true,
|
||
flexShrink: true,
|
||
flexNegative: true,
|
||
flexOrder: true,
|
||
gridRow: true,
|
||
gridRowEnd: true,
|
||
gridRowSpan: true,
|
||
gridRowStart: true,
|
||
gridColumn: true,
|
||
gridColumnEnd: true,
|
||
gridColumnSpan: true,
|
||
gridColumnStart: true,
|
||
fontWeight: true,
|
||
lineClamp: true,
|
||
lineHeight: true,
|
||
opacity: true,
|
||
order: true,
|
||
orphans: true,
|
||
tabSize: true,
|
||
widows: true,
|
||
zIndex: true,
|
||
zoom: true,
|
||
// SVG-related properties
|
||
fillOpacity: true,
|
||
floodOpacity: true,
|
||
stopOpacity: true,
|
||
strokeDasharray: true,
|
||
strokeDashoffset: true,
|
||
strokeMiterlimit: true,
|
||
strokeOpacity: true,
|
||
strokeWidth: true
|
||
};
|
||
|
||
var prefixKey = function prefixKey(prefix, key) {
|
||
return prefix + key.charAt(0).toUpperCase() + key.substring(1);
|
||
};
|
||
|
||
var prefixes = ['Webkit', 'Ms', 'Moz', 'O'];
|
||
isUnitlessNumber = Object.keys(isUnitlessNumber).reduce(function (acc, prop) {
|
||
prefixes.forEach(function (prefix) {
|
||
return acc[prefixKey(prefix, prop)] = acc[prop];
|
||
});
|
||
return acc;
|
||
}, isUnitlessNumber);
|
||
|
||
function dangerousStyleValue(name, value, isCustomProperty) {
|
||
if (value == null || typeof value === 'boolean' || value === '') return '';
|
||
if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers
|
||
|
||
return ('' + value).trim();
|
||
}
|
||
|
||
var attributeCache = {};
|
||
injectCreateAnimatedStyle(function (style) {
|
||
return new AnimatedStyle(style);
|
||
});
|
||
injectDefaultElement('div');
|
||
injectStringInterpolator(createStringInterpolator);
|
||
injectColorNames(colors);
|
||
injectApplyAnimatedValues(function (instance, props) {
|
||
if (instance.nodeType && instance.setAttribute !== undefined) {
|
||
var style = props.style,
|
||
children = props.children,
|
||
scrollTop = props.scrollTop,
|
||
scrollLeft = props.scrollLeft,
|
||
attributes = _objectWithoutPropertiesLoose(props, ["style", "children", "scrollTop", "scrollLeft"]);
|
||
|
||
var filter = instance.nodeName === 'filter' || instance.parentNode && instance.parentNode.nodeName === 'filter';
|
||
if (scrollTop !== void 0) instance.scrollTop = scrollTop;
|
||
if (scrollLeft !== void 0) instance.scrollLeft = scrollLeft; // Set textContent, if children is an animatable value
|
||
|
||
if (children !== void 0) instance.textContent = children; // Set styles ...
|
||
|
||
for (var styleName in style) {
|
||
if (!style.hasOwnProperty(styleName)) continue;
|
||
var isCustomProperty = styleName.indexOf('--') === 0;
|
||
var styleValue = dangerousStyleValue(styleName, style[styleName], isCustomProperty);
|
||
if (styleName === 'float') styleName = 'cssFloat';
|
||
if (isCustomProperty) instance.style.setProperty(styleName, styleValue);else instance.style[styleName] = styleValue;
|
||
} // Set attributes ...
|
||
|
||
|
||
for (var name in attributes) {
|
||
// Attributes are written in dash case
|
||
var dashCase = filter ? name : attributeCache[name] || (attributeCache[name] = name.replace(/([A-Z])/g, function (n) {
|
||
return '-' + n.toLowerCase();
|
||
}));
|
||
if (typeof instance.getAttribute(dashCase) !== 'undefined') instance.setAttribute(dashCase, attributes[name]);
|
||
}
|
||
|
||
return;
|
||
} else return false;
|
||
}, function (style) {
|
||
return style;
|
||
});
|
||
|
||
var domElements = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG
|
||
'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];
|
||
// Extend animated with all the available THREE elements
|
||
var apply = merge(createAnimatedComponent, false);
|
||
var extendedAnimated = apply(domElements);
|
||
|
||
exports.apply = apply;
|
||
exports.config = config;
|
||
exports.update = update;
|
||
exports.animated = extendedAnimated;
|
||
exports.a = extendedAnimated;
|
||
exports.interpolate = interpolate$1;
|
||
exports.Globals = Globals;
|
||
exports.useSpring = useSpring;
|
||
exports.useTrail = useTrail;
|
||
exports.useTransition = useTransition;
|
||
exports.useChain = useChain;
|
||
exports.useSprings = useSprings;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 67:
|
||
/***/ (function(module, exports) {
|
||
|
||
var g;
|
||
|
||
// This works in non-strict mode
|
||
g = (function() {
|
||
return this;
|
||
})();
|
||
|
||
try {
|
||
// This works if eval is allowed (see CSP)
|
||
g = g || new Function("return this")();
|
||
} catch (e) {
|
||
// This works if the window reference is available
|
||
if (typeof window === "object") g = window;
|
||
}
|
||
|
||
// g can still be undefined, but nothing to do about it...
|
||
// We return undefined, instead of nothing here, so it's
|
||
// easier to handle this case. if(!global) { ...}
|
||
|
||
module.exports = g;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 7:
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _objectSpread; });
|
||
/* harmony import */ var _defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10);
|
||
|
||
function _objectSpread(target) {
|
||
for (var i = 1; i < arguments.length; i++) {
|
||
var source = arguments[i] != null ? arguments[i] : {};
|
||
var ownKeys = Object.keys(source);
|
||
|
||
if (typeof Object.getOwnPropertySymbols === 'function') {
|
||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
|
||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||
}));
|
||
}
|
||
|
||
ownKeys.forEach(function (key) {
|
||
Object(_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(target, key, source[key]);
|
||
});
|
||
}
|
||
|
||
return target;
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 71:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
module.exports = __webpack_require__(130);
|
||
|
||
/***/ }),
|
||
|
||
/***/ 76:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
function flattenIntoMap( map, effects ) {
|
||
var i;
|
||
if ( Array.isArray( effects ) ) {
|
||
for ( i = 0; i < effects.length; i++ ) {
|
||
flattenIntoMap( map, effects[ i ] );
|
||
}
|
||
} else {
|
||
for ( i in effects ) {
|
||
map[ i ] = ( map[ i ] || [] ).concat( effects[ i ] );
|
||
}
|
||
}
|
||
}
|
||
|
||
function refx( effects ) {
|
||
var map = {},
|
||
middleware;
|
||
|
||
flattenIntoMap( map, effects );
|
||
|
||
middleware = function( store ) {
|
||
return function( next ) {
|
||
return function( action ) {
|
||
var handlers = map[ action.type ],
|
||
result = next( action ),
|
||
i, handlerAction;
|
||
|
||
if ( handlers ) {
|
||
for ( i = 0; i < handlers.length; i++ ) {
|
||
handlerAction = handlers[ i ]( action, store );
|
||
if ( handlerAction ) {
|
||
store.dispatch( handlerAction );
|
||
}
|
||
}
|
||
}
|
||
|
||
return result;
|
||
};
|
||
};
|
||
};
|
||
|
||
middleware.effects = map;
|
||
|
||
return middleware;
|
||
}
|
||
|
||
module.exports = refx;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 8:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["compose"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 87:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
// Copyright Joyent, Inc. and other Node contributors.
|
||
//
|
||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||
// copy of this software and associated documentation files (the
|
||
// "Software"), to deal in the Software without restriction, including
|
||
// without limitation the rights to use, copy, modify, merge, publish,
|
||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||
// persons to whom the Software is furnished to do so, subject to the
|
||
// following conditions:
|
||
//
|
||
// The above copyright notice and this permission notice shall be included
|
||
// in all copies or substantial portions of the Software.
|
||
//
|
||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
||
|
||
|
||
var punycode = __webpack_require__(140);
|
||
var util = __webpack_require__(142);
|
||
|
||
exports.parse = urlParse;
|
||
exports.resolve = urlResolve;
|
||
exports.resolveObject = urlResolveObject;
|
||
exports.format = urlFormat;
|
||
|
||
exports.Url = Url;
|
||
|
||
function Url() {
|
||
this.protocol = null;
|
||
this.slashes = null;
|
||
this.auth = null;
|
||
this.host = null;
|
||
this.port = null;
|
||
this.hostname = null;
|
||
this.hash = null;
|
||
this.search = null;
|
||
this.query = null;
|
||
this.pathname = null;
|
||
this.path = null;
|
||
this.href = null;
|
||
}
|
||
|
||
// Reference: RFC 3986, RFC 1808, RFC 2396
|
||
|
||
// define these here so at least they only have to be
|
||
// compiled once on the first module load.
|
||
var protocolPattern = /^([a-z0-9.+-]+:)/i,
|
||
portPattern = /:[0-9]*$/,
|
||
|
||
// Special case for a simple path URL
|
||
simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
|
||
|
||
// RFC 2396: characters reserved for delimiting URLs.
|
||
// We actually just auto-escape these.
|
||
delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
|
||
|
||
// RFC 2396: characters not allowed for various reasons.
|
||
unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
|
||
|
||
// Allowed by RFCs, but cause of XSS attacks. Always escape these.
|
||
autoEscape = ['\''].concat(unwise),
|
||
// Characters that are never ever allowed in a hostname.
|
||
// Note that any invalid chars are also handled, but these
|
||
// are the ones that are *expected* to be seen, so we fast-path
|
||
// them.
|
||
nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
|
||
hostEndingChars = ['/', '?', '#'],
|
||
hostnameMaxLen = 255,
|
||
hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
|
||
hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
|
||
// protocols that can allow "unsafe" and "unwise" chars.
|
||
unsafeProtocol = {
|
||
'javascript': true,
|
||
'javascript:': true
|
||
},
|
||
// protocols that never have a hostname.
|
||
hostlessProtocol = {
|
||
'javascript': true,
|
||
'javascript:': true
|
||
},
|
||
// protocols that always contain a // bit.
|
||
slashedProtocol = {
|
||
'http': true,
|
||
'https': true,
|
||
'ftp': true,
|
||
'gopher': true,
|
||
'file': true,
|
||
'http:': true,
|
||
'https:': true,
|
||
'ftp:': true,
|
||
'gopher:': true,
|
||
'file:': true
|
||
},
|
||
querystring = __webpack_require__(143);
|
||
|
||
function urlParse(url, parseQueryString, slashesDenoteHost) {
|
||
if (url && util.isObject(url) && url instanceof Url) return url;
|
||
|
||
var u = new Url;
|
||
u.parse(url, parseQueryString, slashesDenoteHost);
|
||
return u;
|
||
}
|
||
|
||
Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
|
||
if (!util.isString(url)) {
|
||
throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
|
||
}
|
||
|
||
// Copy chrome, IE, opera backslash-handling behavior.
|
||
// Back slashes before the query string get converted to forward slashes
|
||
// See: https://code.google.com/p/chromium/issues/detail?id=25916
|
||
var queryIndex = url.indexOf('?'),
|
||
splitter =
|
||
(queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
|
||
uSplit = url.split(splitter),
|
||
slashRegex = /\\/g;
|
||
uSplit[0] = uSplit[0].replace(slashRegex, '/');
|
||
url = uSplit.join(splitter);
|
||
|
||
var rest = url;
|
||
|
||
// trim before proceeding.
|
||
// This is to support parse stuff like " http://foo.com \n"
|
||
rest = rest.trim();
|
||
|
||
if (!slashesDenoteHost && url.split('#').length === 1) {
|
||
// Try fast path regexp
|
||
var simplePath = simplePathPattern.exec(rest);
|
||
if (simplePath) {
|
||
this.path = rest;
|
||
this.href = rest;
|
||
this.pathname = simplePath[1];
|
||
if (simplePath[2]) {
|
||
this.search = simplePath[2];
|
||
if (parseQueryString) {
|
||
this.query = querystring.parse(this.search.substr(1));
|
||
} else {
|
||
this.query = this.search.substr(1);
|
||
}
|
||
} else if (parseQueryString) {
|
||
this.search = '';
|
||
this.query = {};
|
||
}
|
||
return this;
|
||
}
|
||
}
|
||
|
||
var proto = protocolPattern.exec(rest);
|
||
if (proto) {
|
||
proto = proto[0];
|
||
var lowerProto = proto.toLowerCase();
|
||
this.protocol = lowerProto;
|
||
rest = rest.substr(proto.length);
|
||
}
|
||
|
||
// figure out if it's got a host
|
||
// user@server is *always* interpreted as a hostname, and url
|
||
// resolution will treat //foo/bar as host=foo,path=bar because that's
|
||
// how the browser resolves relative URLs.
|
||
if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
|
||
var slashes = rest.substr(0, 2) === '//';
|
||
if (slashes && !(proto && hostlessProtocol[proto])) {
|
||
rest = rest.substr(2);
|
||
this.slashes = true;
|
||
}
|
||
}
|
||
|
||
if (!hostlessProtocol[proto] &&
|
||
(slashes || (proto && !slashedProtocol[proto]))) {
|
||
|
||
// there's a hostname.
|
||
// the first instance of /, ?, ;, or # ends the host.
|
||
//
|
||
// If there is an @ in the hostname, then non-host chars *are* allowed
|
||
// to the left of the last @ sign, unless some host-ending character
|
||
// comes *before* the @-sign.
|
||
// URLs are obnoxious.
|
||
//
|
||
// ex:
|
||
// http://a@b@c/ => user:a@b host:c
|
||
// http://a@b?@c => user:a host:c path:/?@c
|
||
|
||
// v0.12 TODO(isaacs): This is not quite how Chrome does things.
|
||
// Review our test case against browsers more comprehensively.
|
||
|
||
// find the first instance of any hostEndingChars
|
||
var hostEnd = -1;
|
||
for (var i = 0; i < hostEndingChars.length; i++) {
|
||
var hec = rest.indexOf(hostEndingChars[i]);
|
||
if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
|
||
hostEnd = hec;
|
||
}
|
||
|
||
// at this point, either we have an explicit point where the
|
||
// auth portion cannot go past, or the last @ char is the decider.
|
||
var auth, atSign;
|
||
if (hostEnd === -1) {
|
||
// atSign can be anywhere.
|
||
atSign = rest.lastIndexOf('@');
|
||
} else {
|
||
// atSign must be in auth portion.
|
||
// http://a@b/c@d => host:b auth:a path:/c@d
|
||
atSign = rest.lastIndexOf('@', hostEnd);
|
||
}
|
||
|
||
// Now we have a portion which is definitely the auth.
|
||
// Pull that off.
|
||
if (atSign !== -1) {
|
||
auth = rest.slice(0, atSign);
|
||
rest = rest.slice(atSign + 1);
|
||
this.auth = decodeURIComponent(auth);
|
||
}
|
||
|
||
// the host is the remaining to the left of the first non-host char
|
||
hostEnd = -1;
|
||
for (var i = 0; i < nonHostChars.length; i++) {
|
||
var hec = rest.indexOf(nonHostChars[i]);
|
||
if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
|
||
hostEnd = hec;
|
||
}
|
||
// if we still have not hit it, then the entire thing is a host.
|
||
if (hostEnd === -1)
|
||
hostEnd = rest.length;
|
||
|
||
this.host = rest.slice(0, hostEnd);
|
||
rest = rest.slice(hostEnd);
|
||
|
||
// pull out port.
|
||
this.parseHost();
|
||
|
||
// we've indicated that there is a hostname,
|
||
// so even if it's empty, it has to be present.
|
||
this.hostname = this.hostname || '';
|
||
|
||
// if hostname begins with [ and ends with ]
|
||
// assume that it's an IPv6 address.
|
||
var ipv6Hostname = this.hostname[0] === '[' &&
|
||
this.hostname[this.hostname.length - 1] === ']';
|
||
|
||
// validate a little.
|
||
if (!ipv6Hostname) {
|
||
var hostparts = this.hostname.split(/\./);
|
||
for (var i = 0, l = hostparts.length; i < l; i++) {
|
||
var part = hostparts[i];
|
||
if (!part) continue;
|
||
if (!part.match(hostnamePartPattern)) {
|
||
var newpart = '';
|
||
for (var j = 0, k = part.length; j < k; j++) {
|
||
if (part.charCodeAt(j) > 127) {
|
||
// we replace non-ASCII char with a temporary placeholder
|
||
// we need this to make sure size of hostname is not
|
||
// broken by replacing non-ASCII by nothing
|
||
newpart += 'x';
|
||
} else {
|
||
newpart += part[j];
|
||
}
|
||
}
|
||
// we test again with ASCII char only
|
||
if (!newpart.match(hostnamePartPattern)) {
|
||
var validParts = hostparts.slice(0, i);
|
||
var notHost = hostparts.slice(i + 1);
|
||
var bit = part.match(hostnamePartStart);
|
||
if (bit) {
|
||
validParts.push(bit[1]);
|
||
notHost.unshift(bit[2]);
|
||
}
|
||
if (notHost.length) {
|
||
rest = '/' + notHost.join('.') + rest;
|
||
}
|
||
this.hostname = validParts.join('.');
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (this.hostname.length > hostnameMaxLen) {
|
||
this.hostname = '';
|
||
} else {
|
||
// hostnames are always lower case.
|
||
this.hostname = this.hostname.toLowerCase();
|
||
}
|
||
|
||
if (!ipv6Hostname) {
|
||
// IDNA Support: Returns a punycoded representation of "domain".
|
||
// It only converts parts of the domain name that
|
||
// have non-ASCII characters, i.e. it doesn't matter if
|
||
// you call it with a domain that already is ASCII-only.
|
||
this.hostname = punycode.toASCII(this.hostname);
|
||
}
|
||
|
||
var p = this.port ? ':' + this.port : '';
|
||
var h = this.hostname || '';
|
||
this.host = h + p;
|
||
this.href += this.host;
|
||
|
||
// strip [ and ] from the hostname
|
||
// the host field still retains them, though
|
||
if (ipv6Hostname) {
|
||
this.hostname = this.hostname.substr(1, this.hostname.length - 2);
|
||
if (rest[0] !== '/') {
|
||
rest = '/' + rest;
|
||
}
|
||
}
|
||
}
|
||
|
||
// now rest is set to the post-host stuff.
|
||
// chop off any delim chars.
|
||
if (!unsafeProtocol[lowerProto]) {
|
||
|
||
// First, make 100% sure that any "autoEscape" chars get
|
||
// escaped, even if encodeURIComponent doesn't think they
|
||
// need to be.
|
||
for (var i = 0, l = autoEscape.length; i < l; i++) {
|
||
var ae = autoEscape[i];
|
||
if (rest.indexOf(ae) === -1)
|
||
continue;
|
||
var esc = encodeURIComponent(ae);
|
||
if (esc === ae) {
|
||
esc = escape(ae);
|
||
}
|
||
rest = rest.split(ae).join(esc);
|
||
}
|
||
}
|
||
|
||
|
||
// chop off from the tail first.
|
||
var hash = rest.indexOf('#');
|
||
if (hash !== -1) {
|
||
// got a fragment string.
|
||
this.hash = rest.substr(hash);
|
||
rest = rest.slice(0, hash);
|
||
}
|
||
var qm = rest.indexOf('?');
|
||
if (qm !== -1) {
|
||
this.search = rest.substr(qm);
|
||
this.query = rest.substr(qm + 1);
|
||
if (parseQueryString) {
|
||
this.query = querystring.parse(this.query);
|
||
}
|
||
rest = rest.slice(0, qm);
|
||
} else if (parseQueryString) {
|
||
// no query string, but parseQueryString still requested
|
||
this.search = '';
|
||
this.query = {};
|
||
}
|
||
if (rest) this.pathname = rest;
|
||
if (slashedProtocol[lowerProto] &&
|
||
this.hostname && !this.pathname) {
|
||
this.pathname = '/';
|
||
}
|
||
|
||
//to support http.request
|
||
if (this.pathname || this.search) {
|
||
var p = this.pathname || '';
|
||
var s = this.search || '';
|
||
this.path = p + s;
|
||
}
|
||
|
||
// finally, reconstruct the href based on what has been validated.
|
||
this.href = this.format();
|
||
return this;
|
||
};
|
||
|
||
// format a parsed object into a url string
|
||
function urlFormat(obj) {
|
||
// ensure it's an object, and not a string url.
|
||
// If it's an obj, this is a no-op.
|
||
// this way, you can call url_format() on strings
|
||
// to clean up potentially wonky urls.
|
||
if (util.isString(obj)) obj = urlParse(obj);
|
||
if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
|
||
return obj.format();
|
||
}
|
||
|
||
Url.prototype.format = function() {
|
||
var auth = this.auth || '';
|
||
if (auth) {
|
||
auth = encodeURIComponent(auth);
|
||
auth = auth.replace(/%3A/i, ':');
|
||
auth += '@';
|
||
}
|
||
|
||
var protocol = this.protocol || '',
|
||
pathname = this.pathname || '',
|
||
hash = this.hash || '',
|
||
host = false,
|
||
query = '';
|
||
|
||
if (this.host) {
|
||
host = auth + this.host;
|
||
} else if (this.hostname) {
|
||
host = auth + (this.hostname.indexOf(':') === -1 ?
|
||
this.hostname :
|
||
'[' + this.hostname + ']');
|
||
if (this.port) {
|
||
host += ':' + this.port;
|
||
}
|
||
}
|
||
|
||
if (this.query &&
|
||
util.isObject(this.query) &&
|
||
Object.keys(this.query).length) {
|
||
query = querystring.stringify(this.query);
|
||
}
|
||
|
||
var search = this.search || (query && ('?' + query)) || '';
|
||
|
||
if (protocol && protocol.substr(-1) !== ':') protocol += ':';
|
||
|
||
// only the slashedProtocols get the //. Not mailto:, xmpp:, etc.
|
||
// unless they had them to begin with.
|
||
if (this.slashes ||
|
||
(!protocol || slashedProtocol[protocol]) && host !== false) {
|
||
host = '//' + (host || '');
|
||
if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
|
||
} else if (!host) {
|
||
host = '';
|
||
}
|
||
|
||
if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
|
||
if (search && search.charAt(0) !== '?') search = '?' + search;
|
||
|
||
pathname = pathname.replace(/[?#]/g, function(match) {
|
||
return encodeURIComponent(match);
|
||
});
|
||
search = search.replace('#', '%23');
|
||
|
||
return protocol + host + pathname + search + hash;
|
||
};
|
||
|
||
function urlResolve(source, relative) {
|
||
return urlParse(source, false, true).resolve(relative);
|
||
}
|
||
|
||
Url.prototype.resolve = function(relative) {
|
||
return this.resolveObject(urlParse(relative, false, true)).format();
|
||
};
|
||
|
||
function urlResolveObject(source, relative) {
|
||
if (!source) return relative;
|
||
return urlParse(source, false, true).resolveObject(relative);
|
||
}
|
||
|
||
Url.prototype.resolveObject = function(relative) {
|
||
if (util.isString(relative)) {
|
||
var rel = new Url();
|
||
rel.parse(relative, false, true);
|
||
relative = rel;
|
||
}
|
||
|
||
var result = new Url();
|
||
var tkeys = Object.keys(this);
|
||
for (var tk = 0; tk < tkeys.length; tk++) {
|
||
var tkey = tkeys[tk];
|
||
result[tkey] = this[tkey];
|
||
}
|
||
|
||
// hash is always overridden, no matter what.
|
||
// even href="" will remove it.
|
||
result.hash = relative.hash;
|
||
|
||
// if the relative url is empty, then there's nothing left to do here.
|
||
if (relative.href === '') {
|
||
result.href = result.format();
|
||
return result;
|
||
}
|
||
|
||
// hrefs like //foo/bar always cut to the protocol.
|
||
if (relative.slashes && !relative.protocol) {
|
||
// take everything except the protocol from relative
|
||
var rkeys = Object.keys(relative);
|
||
for (var rk = 0; rk < rkeys.length; rk++) {
|
||
var rkey = rkeys[rk];
|
||
if (rkey !== 'protocol')
|
||
result[rkey] = relative[rkey];
|
||
}
|
||
|
||
//urlParse appends trailing / to urls like http://www.example.com
|
||
if (slashedProtocol[result.protocol] &&
|
||
result.hostname && !result.pathname) {
|
||
result.path = result.pathname = '/';
|
||
}
|
||
|
||
result.href = result.format();
|
||
return result;
|
||
}
|
||
|
||
if (relative.protocol && relative.protocol !== result.protocol) {
|
||
// if it's a known url protocol, then changing
|
||
// the protocol does weird things
|
||
// first, if it's not file:, then we MUST have a host,
|
||
// and if there was a path
|
||
// to begin with, then we MUST have a path.
|
||
// if it is file:, then the host is dropped,
|
||
// because that's known to be hostless.
|
||
// anything else is assumed to be absolute.
|
||
if (!slashedProtocol[relative.protocol]) {
|
||
var keys = Object.keys(relative);
|
||
for (var v = 0; v < keys.length; v++) {
|
||
var k = keys[v];
|
||
result[k] = relative[k];
|
||
}
|
||
result.href = result.format();
|
||
return result;
|
||
}
|
||
|
||
result.protocol = relative.protocol;
|
||
if (!relative.host && !hostlessProtocol[relative.protocol]) {
|
||
var relPath = (relative.pathname || '').split('/');
|
||
while (relPath.length && !(relative.host = relPath.shift()));
|
||
if (!relative.host) relative.host = '';
|
||
if (!relative.hostname) relative.hostname = '';
|
||
if (relPath[0] !== '') relPath.unshift('');
|
||
if (relPath.length < 2) relPath.unshift('');
|
||
result.pathname = relPath.join('/');
|
||
} else {
|
||
result.pathname = relative.pathname;
|
||
}
|
||
result.search = relative.search;
|
||
result.query = relative.query;
|
||
result.host = relative.host || '';
|
||
result.auth = relative.auth;
|
||
result.hostname = relative.hostname || relative.host;
|
||
result.port = relative.port;
|
||
// to support http.request
|
||
if (result.pathname || result.search) {
|
||
var p = result.pathname || '';
|
||
var s = result.search || '';
|
||
result.path = p + s;
|
||
}
|
||
result.slashes = result.slashes || relative.slashes;
|
||
result.href = result.format();
|
||
return result;
|
||
}
|
||
|
||
var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
|
||
isRelAbs = (
|
||
relative.host ||
|
||
relative.pathname && relative.pathname.charAt(0) === '/'
|
||
),
|
||
mustEndAbs = (isRelAbs || isSourceAbs ||
|
||
(result.host && relative.pathname)),
|
||
removeAllDots = mustEndAbs,
|
||
srcPath = result.pathname && result.pathname.split('/') || [],
|
||
relPath = relative.pathname && relative.pathname.split('/') || [],
|
||
psychotic = result.protocol && !slashedProtocol[result.protocol];
|
||
|
||
// if the url is a non-slashed url, then relative
|
||
// links like ../.. should be able
|
||
// to crawl up to the hostname, as well. This is strange.
|
||
// result.protocol has already been set by now.
|
||
// Later on, put the first path part into the host field.
|
||
if (psychotic) {
|
||
result.hostname = '';
|
||
result.port = null;
|
||
if (result.host) {
|
||
if (srcPath[0] === '') srcPath[0] = result.host;
|
||
else srcPath.unshift(result.host);
|
||
}
|
||
result.host = '';
|
||
if (relative.protocol) {
|
||
relative.hostname = null;
|
||
relative.port = null;
|
||
if (relative.host) {
|
||
if (relPath[0] === '') relPath[0] = relative.host;
|
||
else relPath.unshift(relative.host);
|
||
}
|
||
relative.host = null;
|
||
}
|
||
mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
|
||
}
|
||
|
||
if (isRelAbs) {
|
||
// it's absolute.
|
||
result.host = (relative.host || relative.host === '') ?
|
||
relative.host : result.host;
|
||
result.hostname = (relative.hostname || relative.hostname === '') ?
|
||
relative.hostname : result.hostname;
|
||
result.search = relative.search;
|
||
result.query = relative.query;
|
||
srcPath = relPath;
|
||
// fall through to the dot-handling below.
|
||
} else if (relPath.length) {
|
||
// it's relative
|
||
// throw away the existing file, and take the new path instead.
|
||
if (!srcPath) srcPath = [];
|
||
srcPath.pop();
|
||
srcPath = srcPath.concat(relPath);
|
||
result.search = relative.search;
|
||
result.query = relative.query;
|
||
} else if (!util.isNullOrUndefined(relative.search)) {
|
||
// just pull out the search.
|
||
// like href='?foo'.
|
||
// Put this after the other two cases because it simplifies the booleans
|
||
if (psychotic) {
|
||
result.hostname = result.host = srcPath.shift();
|
||
//occationaly the auth can get stuck only in host
|
||
//this especially happens in cases like
|
||
//url.resolveObject('mailto:local1@domain1', 'local2@domain2')
|
||
var authInHost = result.host && result.host.indexOf('@') > 0 ?
|
||
result.host.split('@') : false;
|
||
if (authInHost) {
|
||
result.auth = authInHost.shift();
|
||
result.host = result.hostname = authInHost.shift();
|
||
}
|
||
}
|
||
result.search = relative.search;
|
||
result.query = relative.query;
|
||
//to support http.request
|
||
if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
|
||
result.path = (result.pathname ? result.pathname : '') +
|
||
(result.search ? result.search : '');
|
||
}
|
||
result.href = result.format();
|
||
return result;
|
||
}
|
||
|
||
if (!srcPath.length) {
|
||
// no path at all. easy.
|
||
// we've already handled the other stuff above.
|
||
result.pathname = null;
|
||
//to support http.request
|
||
if (result.search) {
|
||
result.path = '/' + result.search;
|
||
} else {
|
||
result.path = null;
|
||
}
|
||
result.href = result.format();
|
||
return result;
|
||
}
|
||
|
||
// if a url ENDs in . or .., then it must get a trailing slash.
|
||
// however, if it ends in anything else non-slashy,
|
||
// then it must NOT get a trailing slash.
|
||
var last = srcPath.slice(-1)[0];
|
||
var hasTrailingSlash = (
|
||
(result.host || relative.host || srcPath.length > 1) &&
|
||
(last === '.' || last === '..') || last === '');
|
||
|
||
// strip single dots, resolve double dots to parent dir
|
||
// if the path tries to go above the root, `up` ends up > 0
|
||
var up = 0;
|
||
for (var i = srcPath.length; i >= 0; i--) {
|
||
last = srcPath[i];
|
||
if (last === '.') {
|
||
srcPath.splice(i, 1);
|
||
} else if (last === '..') {
|
||
srcPath.splice(i, 1);
|
||
up++;
|
||
} else if (up) {
|
||
srcPath.splice(i, 1);
|
||
up--;
|
||
}
|
||
}
|
||
|
||
// if the path is allowed to go above the root, restore leading ..s
|
||
if (!mustEndAbs && !removeAllDots) {
|
||
for (; up--; up) {
|
||
srcPath.unshift('..');
|
||
}
|
||
}
|
||
|
||
if (mustEndAbs && srcPath[0] !== '' &&
|
||
(!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
|
||
srcPath.unshift('');
|
||
}
|
||
|
||
if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
|
||
srcPath.push('');
|
||
}
|
||
|
||
var isAbsolute = srcPath[0] === '' ||
|
||
(srcPath[0] && srcPath[0].charAt(0) === '/');
|
||
|
||
// put the host back
|
||
if (psychotic) {
|
||
result.hostname = result.host = isAbsolute ? '' :
|
||
srcPath.length ? srcPath.shift() : '';
|
||
//occationaly the auth can get stuck only in host
|
||
//this especially happens in cases like
|
||
//url.resolveObject('mailto:local1@domain1', 'local2@domain2')
|
||
var authInHost = result.host && result.host.indexOf('@') > 0 ?
|
||
result.host.split('@') : false;
|
||
if (authInHost) {
|
||
result.auth = authInHost.shift();
|
||
result.host = result.hostname = authInHost.shift();
|
||
}
|
||
}
|
||
|
||
mustEndAbs = mustEndAbs || (result.host && srcPath.length);
|
||
|
||
if (mustEndAbs && !isAbsolute) {
|
||
srcPath.unshift('');
|
||
}
|
||
|
||
if (!srcPath.length) {
|
||
result.pathname = null;
|
||
result.path = null;
|
||
} else {
|
||
result.pathname = srcPath.join('/');
|
||
}
|
||
|
||
//to support request.http
|
||
if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
|
||
result.path = (result.pathname ? result.pathname : '') +
|
||
(result.search ? result.search : '');
|
||
}
|
||
result.auth = relative.auth || result.auth;
|
||
result.slashes = result.slashes || relative.slashes;
|
||
result.href = result.format();
|
||
return result;
|
||
};
|
||
|
||
Url.prototype.parseHost = function() {
|
||
var host = this.host;
|
||
var port = portPattern.exec(host);
|
||
if (port) {
|
||
port = port[0];
|
||
if (port !== ':') {
|
||
this.port = port.substr(1);
|
||
}
|
||
host = host.substr(0, host.length - port.length);
|
||
}
|
||
if (host) this.hostname = host;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 9:
|
||
/***/ (function(module, exports) {
|
||
|
||
(function() { module.exports = this["wp"]["blocks"]; }());
|
||
|
||
/***/ }),
|
||
|
||
/***/ 94:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* Copyright (c) 2013-present, Facebook, Inc.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/
|
||
|
||
|
||
|
||
var ReactPropTypesSecret = __webpack_require__(95);
|
||
|
||
function emptyFunction() {}
|
||
function emptyFunctionWithReset() {}
|
||
emptyFunctionWithReset.resetWarningCache = emptyFunction;
|
||
|
||
module.exports = function() {
|
||
function shim(props, propName, componentName, location, propFullName, secret) {
|
||
if (secret === ReactPropTypesSecret) {
|
||
// It is still safe when called from React.
|
||
return;
|
||
}
|
||
var err = new Error(
|
||
'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
|
||
'Use PropTypes.checkPropTypes() to call them. ' +
|
||
'Read more at http://fb.me/use-check-prop-types'
|
||
);
|
||
err.name = 'Invariant Violation';
|
||
throw err;
|
||
};
|
||
shim.isRequired = shim;
|
||
function getShim() {
|
||
return shim;
|
||
};
|
||
// Important!
|
||
// Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
|
||
var ReactPropTypes = {
|
||
array: shim,
|
||
bool: shim,
|
||
func: shim,
|
||
number: shim,
|
||
object: shim,
|
||
string: shim,
|
||
symbol: shim,
|
||
|
||
any: shim,
|
||
arrayOf: getShim,
|
||
element: shim,
|
||
elementType: shim,
|
||
instanceOf: getShim,
|
||
node: shim,
|
||
objectOf: getShim,
|
||
oneOf: getShim,
|
||
oneOfType: getShim,
|
||
shape: getShim,
|
||
exact: getShim,
|
||
|
||
checkPropTypes: emptyFunctionWithReset,
|
||
resetWarningCache: emptyFunction
|
||
};
|
||
|
||
ReactPropTypes.PropTypes = ReactPropTypes;
|
||
|
||
return ReactPropTypes;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 95:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* Copyright (c) 2013-present, Facebook, Inc.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/
|
||
|
||
|
||
|
||
var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
|
||
|
||
module.exports = ReactPropTypesSecret;
|
||
|
||
|
||
/***/ })
|
||
|
||
/******/ }); |