3236 lines
119 KiB
JavaScript
3236 lines
119 KiB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
|
||
if(typeof exports === 'object' && typeof module === 'object')
|
||
module.exports = factory(require("quill"));
|
||
else if(typeof define === 'function' && define.amd)
|
||
define(["quill"], factory);
|
||
else if(typeof exports === 'object')
|
||
exports["quillBetterTable"] = factory(require("quill"));
|
||
else
|
||
root["quillBetterTable"] = factory(root["Quill"]);
|
||
})(window, function(__WEBPACK_EXTERNAL_MODULE__0__) {
|
||
return /******/ (function(modules) { // webpackBootstrap
|
||
/******/ function hotDisposeChunk(chunkId) {
|
||
/******/ delete installedChunks[chunkId];
|
||
/******/ }
|
||
/******/ var parentHotUpdateCallback = window["webpackHotUpdatequillBetterTable"];
|
||
/******/ window["webpackHotUpdatequillBetterTable"] = // eslint-disable-next-line no-unused-vars
|
||
/******/ function webpackHotUpdateCallback(chunkId, moreModules) {
|
||
/******/ hotAddUpdateChunk(chunkId, moreModules);
|
||
/******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
|
||
/******/ } ;
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotDownloadUpdateChunk(chunkId) {
|
||
/******/ var script = document.createElement("script");
|
||
/******/ script.charset = "utf-8";
|
||
/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
|
||
/******/ if (null) script.crossOrigin = null;
|
||
/******/ document.head.appendChild(script);
|
||
/******/ }
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotDownloadManifest(requestTimeout) {
|
||
/******/ requestTimeout = requestTimeout || 10000;
|
||
/******/ return new Promise(function(resolve, reject) {
|
||
/******/ if (typeof XMLHttpRequest === "undefined") {
|
||
/******/ return reject(new Error("No browser support"));
|
||
/******/ }
|
||
/******/ try {
|
||
/******/ var request = new XMLHttpRequest();
|
||
/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
|
||
/******/ request.open("GET", requestPath, true);
|
||
/******/ request.timeout = requestTimeout;
|
||
/******/ request.send(null);
|
||
/******/ } catch (err) {
|
||
/******/ return reject(err);
|
||
/******/ }
|
||
/******/ request.onreadystatechange = function() {
|
||
/******/ if (request.readyState !== 4) return;
|
||
/******/ if (request.status === 0) {
|
||
/******/ // timeout
|
||
/******/ reject(
|
||
/******/ new Error("Manifest request to " + requestPath + " timed out.")
|
||
/******/ );
|
||
/******/ } else if (request.status === 404) {
|
||
/******/ // no update available
|
||
/******/ resolve();
|
||
/******/ } else if (request.status !== 200 && request.status !== 304) {
|
||
/******/ // other failure
|
||
/******/ reject(new Error("Manifest request to " + requestPath + " failed."));
|
||
/******/ } else {
|
||
/******/ // success
|
||
/******/ try {
|
||
/******/ var update = JSON.parse(request.responseText);
|
||
/******/ } catch (e) {
|
||
/******/ reject(e);
|
||
/******/ return;
|
||
/******/ }
|
||
/******/ resolve(update);
|
||
/******/ }
|
||
/******/ };
|
||
/******/ });
|
||
/******/ }
|
||
/******/
|
||
/******/ var hotApplyOnUpdate = true;
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ var hotCurrentHash = "ced44c7892a78034ffe4";
|
||
/******/ var hotRequestTimeout = 10000;
|
||
/******/ var hotCurrentModuleData = {};
|
||
/******/ var hotCurrentChildModule;
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ var hotCurrentParents = [];
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ var hotCurrentParentsTemp = [];
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotCreateRequire(moduleId) {
|
||
/******/ var me = installedModules[moduleId];
|
||
/******/ if (!me) return __webpack_require__;
|
||
/******/ var fn = function(request) {
|
||
/******/ if (me.hot.active) {
|
||
/******/ if (installedModules[request]) {
|
||
/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
|
||
/******/ installedModules[request].parents.push(moduleId);
|
||
/******/ }
|
||
/******/ } else {
|
||
/******/ hotCurrentParents = [moduleId];
|
||
/******/ hotCurrentChildModule = request;
|
||
/******/ }
|
||
/******/ if (me.children.indexOf(request) === -1) {
|
||
/******/ me.children.push(request);
|
||
/******/ }
|
||
/******/ } else {
|
||
/******/ console.warn(
|
||
/******/ "[HMR] unexpected require(" +
|
||
/******/ request +
|
||
/******/ ") from disposed module " +
|
||
/******/ moduleId
|
||
/******/ );
|
||
/******/ hotCurrentParents = [];
|
||
/******/ }
|
||
/******/ return __webpack_require__(request);
|
||
/******/ };
|
||
/******/ var ObjectFactory = function ObjectFactory(name) {
|
||
/******/ return {
|
||
/******/ configurable: true,
|
||
/******/ enumerable: true,
|
||
/******/ get: function() {
|
||
/******/ return __webpack_require__[name];
|
||
/******/ },
|
||
/******/ set: function(value) {
|
||
/******/ __webpack_require__[name] = value;
|
||
/******/ }
|
||
/******/ };
|
||
/******/ };
|
||
/******/ for (var name in __webpack_require__) {
|
||
/******/ if (
|
||
/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
|
||
/******/ name !== "e" &&
|
||
/******/ name !== "t"
|
||
/******/ ) {
|
||
/******/ Object.defineProperty(fn, name, ObjectFactory(name));
|
||
/******/ }
|
||
/******/ }
|
||
/******/ fn.e = function(chunkId) {
|
||
/******/ if (hotStatus === "ready") hotSetStatus("prepare");
|
||
/******/ hotChunksLoading++;
|
||
/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
|
||
/******/ finishChunkLoading();
|
||
/******/ throw err;
|
||
/******/ });
|
||
/******/
|
||
/******/ function finishChunkLoading() {
|
||
/******/ hotChunksLoading--;
|
||
/******/ if (hotStatus === "prepare") {
|
||
/******/ if (!hotWaitingFilesMap[chunkId]) {
|
||
/******/ hotEnsureUpdateChunk(chunkId);
|
||
/******/ }
|
||
/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
|
||
/******/ hotUpdateDownloaded();
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ };
|
||
/******/ fn.t = function(value, mode) {
|
||
/******/ if (mode & 1) value = fn(value);
|
||
/******/ return __webpack_require__.t(value, mode & ~1);
|
||
/******/ };
|
||
/******/ return fn;
|
||
/******/ }
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotCreateModule(moduleId) {
|
||
/******/ var hot = {
|
||
/******/ // private stuff
|
||
/******/ _acceptedDependencies: {},
|
||
/******/ _declinedDependencies: {},
|
||
/******/ _selfAccepted: false,
|
||
/******/ _selfDeclined: false,
|
||
/******/ _disposeHandlers: [],
|
||
/******/ _main: hotCurrentChildModule !== moduleId,
|
||
/******/
|
||
/******/ // Module API
|
||
/******/ active: true,
|
||
/******/ accept: function(dep, callback) {
|
||
/******/ if (dep === undefined) hot._selfAccepted = true;
|
||
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
|
||
/******/ else if (typeof dep === "object")
|
||
/******/ for (var i = 0; i < dep.length; i++)
|
||
/******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
|
||
/******/ else hot._acceptedDependencies[dep] = callback || function() {};
|
||
/******/ },
|
||
/******/ decline: function(dep) {
|
||
/******/ if (dep === undefined) hot._selfDeclined = true;
|
||
/******/ else if (typeof dep === "object")
|
||
/******/ for (var i = 0; i < dep.length; i++)
|
||
/******/ hot._declinedDependencies[dep[i]] = true;
|
||
/******/ else hot._declinedDependencies[dep] = true;
|
||
/******/ },
|
||
/******/ dispose: function(callback) {
|
||
/******/ hot._disposeHandlers.push(callback);
|
||
/******/ },
|
||
/******/ addDisposeHandler: function(callback) {
|
||
/******/ hot._disposeHandlers.push(callback);
|
||
/******/ },
|
||
/******/ removeDisposeHandler: function(callback) {
|
||
/******/ var idx = hot._disposeHandlers.indexOf(callback);
|
||
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
|
||
/******/ },
|
||
/******/
|
||
/******/ // Management API
|
||
/******/ check: hotCheck,
|
||
/******/ apply: hotApply,
|
||
/******/ status: function(l) {
|
||
/******/ if (!l) return hotStatus;
|
||
/******/ hotStatusHandlers.push(l);
|
||
/******/ },
|
||
/******/ addStatusHandler: function(l) {
|
||
/******/ hotStatusHandlers.push(l);
|
||
/******/ },
|
||
/******/ removeStatusHandler: function(l) {
|
||
/******/ var idx = hotStatusHandlers.indexOf(l);
|
||
/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
|
||
/******/ },
|
||
/******/
|
||
/******/ //inherit from previous dispose call
|
||
/******/ data: hotCurrentModuleData[moduleId]
|
||
/******/ };
|
||
/******/ hotCurrentChildModule = undefined;
|
||
/******/ return hot;
|
||
/******/ }
|
||
/******/
|
||
/******/ var hotStatusHandlers = [];
|
||
/******/ var hotStatus = "idle";
|
||
/******/
|
||
/******/ function hotSetStatus(newStatus) {
|
||
/******/ hotStatus = newStatus;
|
||
/******/ for (var i = 0; i < hotStatusHandlers.length; i++)
|
||
/******/ hotStatusHandlers[i].call(null, newStatus);
|
||
/******/ }
|
||
/******/
|
||
/******/ // while downloading
|
||
/******/ var hotWaitingFiles = 0;
|
||
/******/ var hotChunksLoading = 0;
|
||
/******/ var hotWaitingFilesMap = {};
|
||
/******/ var hotRequestedFilesMap = {};
|
||
/******/ var hotAvailableFilesMap = {};
|
||
/******/ var hotDeferred;
|
||
/******/
|
||
/******/ // The update info
|
||
/******/ var hotUpdate, hotUpdateNewHash;
|
||
/******/
|
||
/******/ function toModuleId(id) {
|
||
/******/ var isNumber = +id + "" === id;
|
||
/******/ return isNumber ? +id : id;
|
||
/******/ }
|
||
/******/
|
||
/******/ function hotCheck(apply) {
|
||
/******/ if (hotStatus !== "idle") {
|
||
/******/ throw new Error("check() is only allowed in idle status");
|
||
/******/ }
|
||
/******/ hotApplyOnUpdate = apply;
|
||
/******/ hotSetStatus("check");
|
||
/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
|
||
/******/ if (!update) {
|
||
/******/ hotSetStatus("idle");
|
||
/******/ return null;
|
||
/******/ }
|
||
/******/ hotRequestedFilesMap = {};
|
||
/******/ hotWaitingFilesMap = {};
|
||
/******/ hotAvailableFilesMap = update.c;
|
||
/******/ hotUpdateNewHash = update.h;
|
||
/******/
|
||
/******/ hotSetStatus("prepare");
|
||
/******/ var promise = new Promise(function(resolve, reject) {
|
||
/******/ hotDeferred = {
|
||
/******/ resolve: resolve,
|
||
/******/ reject: reject
|
||
/******/ };
|
||
/******/ });
|
||
/******/ hotUpdate = {};
|
||
/******/ var chunkId = 2;
|
||
/******/ // eslint-disable-next-line no-lone-blocks
|
||
/******/ {
|
||
/******/ /*globals chunkId */
|
||
/******/ hotEnsureUpdateChunk(chunkId);
|
||
/******/ }
|
||
/******/ if (
|
||
/******/ hotStatus === "prepare" &&
|
||
/******/ hotChunksLoading === 0 &&
|
||
/******/ hotWaitingFiles === 0
|
||
/******/ ) {
|
||
/******/ hotUpdateDownloaded();
|
||
/******/ }
|
||
/******/ return promise;
|
||
/******/ });
|
||
/******/ }
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotAddUpdateChunk(chunkId, moreModules) {
|
||
/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
|
||
/******/ return;
|
||
/******/ hotRequestedFilesMap[chunkId] = false;
|
||
/******/ for (var moduleId in moreModules) {
|
||
/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
|
||
/******/ hotUpdate[moduleId] = moreModules[moduleId];
|
||
/******/ }
|
||
/******/ }
|
||
/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
|
||
/******/ hotUpdateDownloaded();
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ function hotEnsureUpdateChunk(chunkId) {
|
||
/******/ if (!hotAvailableFilesMap[chunkId]) {
|
||
/******/ hotWaitingFilesMap[chunkId] = true;
|
||
/******/ } else {
|
||
/******/ hotRequestedFilesMap[chunkId] = true;
|
||
/******/ hotWaitingFiles++;
|
||
/******/ hotDownloadUpdateChunk(chunkId);
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ function hotUpdateDownloaded() {
|
||
/******/ hotSetStatus("ready");
|
||
/******/ var deferred = hotDeferred;
|
||
/******/ hotDeferred = null;
|
||
/******/ if (!deferred) return;
|
||
/******/ if (hotApplyOnUpdate) {
|
||
/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
|
||
/******/ // avoid triggering uncaught exception warning in Chrome.
|
||
/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
|
||
/******/ Promise.resolve()
|
||
/******/ .then(function() {
|
||
/******/ return hotApply(hotApplyOnUpdate);
|
||
/******/ })
|
||
/******/ .then(
|
||
/******/ function(result) {
|
||
/******/ deferred.resolve(result);
|
||
/******/ },
|
||
/******/ function(err) {
|
||
/******/ deferred.reject(err);
|
||
/******/ }
|
||
/******/ );
|
||
/******/ } else {
|
||
/******/ var outdatedModules = [];
|
||
/******/ for (var id in hotUpdate) {
|
||
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
|
||
/******/ outdatedModules.push(toModuleId(id));
|
||
/******/ }
|
||
/******/ }
|
||
/******/ deferred.resolve(outdatedModules);
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ function hotApply(options) {
|
||
/******/ if (hotStatus !== "ready")
|
||
/******/ throw new Error("apply() is only allowed in ready status");
|
||
/******/ options = options || {};
|
||
/******/
|
||
/******/ var cb;
|
||
/******/ var i;
|
||
/******/ var j;
|
||
/******/ var module;
|
||
/******/ var moduleId;
|
||
/******/
|
||
/******/ function getAffectedStuff(updateModuleId) {
|
||
/******/ var outdatedModules = [updateModuleId];
|
||
/******/ var outdatedDependencies = {};
|
||
/******/
|
||
/******/ var queue = outdatedModules.map(function(id) {
|
||
/******/ return {
|
||
/******/ chain: [id],
|
||
/******/ id: id
|
||
/******/ };
|
||
/******/ });
|
||
/******/ while (queue.length > 0) {
|
||
/******/ var queueItem = queue.pop();
|
||
/******/ var moduleId = queueItem.id;
|
||
/******/ var chain = queueItem.chain;
|
||
/******/ module = installedModules[moduleId];
|
||
/******/ if (!module || module.hot._selfAccepted) continue;
|
||
/******/ if (module.hot._selfDeclined) {
|
||
/******/ return {
|
||
/******/ type: "self-declined",
|
||
/******/ chain: chain,
|
||
/******/ moduleId: moduleId
|
||
/******/ };
|
||
/******/ }
|
||
/******/ if (module.hot._main) {
|
||
/******/ return {
|
||
/******/ type: "unaccepted",
|
||
/******/ chain: chain,
|
||
/******/ moduleId: moduleId
|
||
/******/ };
|
||
/******/ }
|
||
/******/ for (var i = 0; i < module.parents.length; i++) {
|
||
/******/ var parentId = module.parents[i];
|
||
/******/ var parent = installedModules[parentId];
|
||
/******/ if (!parent) continue;
|
||
/******/ if (parent.hot._declinedDependencies[moduleId]) {
|
||
/******/ return {
|
||
/******/ type: "declined",
|
||
/******/ chain: chain.concat([parentId]),
|
||
/******/ moduleId: moduleId,
|
||
/******/ parentId: parentId
|
||
/******/ };
|
||
/******/ }
|
||
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
|
||
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
|
||
/******/ if (!outdatedDependencies[parentId])
|
||
/******/ outdatedDependencies[parentId] = [];
|
||
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
|
||
/******/ continue;
|
||
/******/ }
|
||
/******/ delete outdatedDependencies[parentId];
|
||
/******/ outdatedModules.push(parentId);
|
||
/******/ queue.push({
|
||
/******/ chain: chain.concat([parentId]),
|
||
/******/ id: parentId
|
||
/******/ });
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ return {
|
||
/******/ type: "accepted",
|
||
/******/ moduleId: updateModuleId,
|
||
/******/ outdatedModules: outdatedModules,
|
||
/******/ outdatedDependencies: outdatedDependencies
|
||
/******/ };
|
||
/******/ }
|
||
/******/
|
||
/******/ function addAllToSet(a, b) {
|
||
/******/ for (var i = 0; i < b.length; i++) {
|
||
/******/ var item = b[i];
|
||
/******/ if (a.indexOf(item) === -1) a.push(item);
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // at begin all updates modules are outdated
|
||
/******/ // the "outdated" status can propagate to parents if they don't accept the children
|
||
/******/ var outdatedDependencies = {};
|
||
/******/ var outdatedModules = [];
|
||
/******/ var appliedUpdate = {};
|
||
/******/
|
||
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
|
||
/******/ console.warn(
|
||
/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
|
||
/******/ );
|
||
/******/ };
|
||
/******/
|
||
/******/ for (var id in hotUpdate) {
|
||
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
|
||
/******/ moduleId = toModuleId(id);
|
||
/******/ /** @type {TODO} */
|
||
/******/ var result;
|
||
/******/ if (hotUpdate[id]) {
|
||
/******/ result = getAffectedStuff(moduleId);
|
||
/******/ } else {
|
||
/******/ result = {
|
||
/******/ type: "disposed",
|
||
/******/ moduleId: id
|
||
/******/ };
|
||
/******/ }
|
||
/******/ /** @type {Error|false} */
|
||
/******/ var abortError = false;
|
||
/******/ var doApply = false;
|
||
/******/ var doDispose = false;
|
||
/******/ var chainInfo = "";
|
||
/******/ if (result.chain) {
|
||
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
|
||
/******/ }
|
||
/******/ switch (result.type) {
|
||
/******/ case "self-declined":
|
||
/******/ if (options.onDeclined) options.onDeclined(result);
|
||
/******/ if (!options.ignoreDeclined)
|
||
/******/ abortError = new Error(
|
||
/******/ "Aborted because of self decline: " +
|
||
/******/ result.moduleId +
|
||
/******/ chainInfo
|
||
/******/ );
|
||
/******/ break;
|
||
/******/ case "declined":
|
||
/******/ if (options.onDeclined) options.onDeclined(result);
|
||
/******/ if (!options.ignoreDeclined)
|
||
/******/ abortError = new Error(
|
||
/******/ "Aborted because of declined dependency: " +
|
||
/******/ result.moduleId +
|
||
/******/ " in " +
|
||
/******/ result.parentId +
|
||
/******/ chainInfo
|
||
/******/ );
|
||
/******/ break;
|
||
/******/ case "unaccepted":
|
||
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
|
||
/******/ if (!options.ignoreUnaccepted)
|
||
/******/ abortError = new Error(
|
||
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
|
||
/******/ );
|
||
/******/ break;
|
||
/******/ case "accepted":
|
||
/******/ if (options.onAccepted) options.onAccepted(result);
|
||
/******/ doApply = true;
|
||
/******/ break;
|
||
/******/ case "disposed":
|
||
/******/ if (options.onDisposed) options.onDisposed(result);
|
||
/******/ doDispose = true;
|
||
/******/ break;
|
||
/******/ default:
|
||
/******/ throw new Error("Unexception type " + result.type);
|
||
/******/ }
|
||
/******/ if (abortError) {
|
||
/******/ hotSetStatus("abort");
|
||
/******/ return Promise.reject(abortError);
|
||
/******/ }
|
||
/******/ if (doApply) {
|
||
/******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
|
||
/******/ addAllToSet(outdatedModules, result.outdatedModules);
|
||
/******/ for (moduleId in result.outdatedDependencies) {
|
||
/******/ if (
|
||
/******/ Object.prototype.hasOwnProperty.call(
|
||
/******/ result.outdatedDependencies,
|
||
/******/ moduleId
|
||
/******/ )
|
||
/******/ ) {
|
||
/******/ if (!outdatedDependencies[moduleId])
|
||
/******/ outdatedDependencies[moduleId] = [];
|
||
/******/ addAllToSet(
|
||
/******/ outdatedDependencies[moduleId],
|
||
/******/ result.outdatedDependencies[moduleId]
|
||
/******/ );
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ if (doDispose) {
|
||
/******/ addAllToSet(outdatedModules, [result.moduleId]);
|
||
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // Store self accepted outdated modules to require them later by the module system
|
||
/******/ var outdatedSelfAcceptedModules = [];
|
||
/******/ for (i = 0; i < outdatedModules.length; i++) {
|
||
/******/ moduleId = outdatedModules[i];
|
||
/******/ if (
|
||
/******/ installedModules[moduleId] &&
|
||
/******/ installedModules[moduleId].hot._selfAccepted &&
|
||
/******/ // removed self-accepted modules should not be required
|
||
/******/ appliedUpdate[moduleId] !== warnUnexpectedRequire
|
||
/******/ ) {
|
||
/******/ outdatedSelfAcceptedModules.push({
|
||
/******/ module: moduleId,
|
||
/******/ errorHandler: installedModules[moduleId].hot._selfAccepted
|
||
/******/ });
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // Now in "dispose" phase
|
||
/******/ hotSetStatus("dispose");
|
||
/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
|
||
/******/ if (hotAvailableFilesMap[chunkId] === false) {
|
||
/******/ hotDisposeChunk(chunkId);
|
||
/******/ }
|
||
/******/ });
|
||
/******/
|
||
/******/ var idx;
|
||
/******/ var queue = outdatedModules.slice();
|
||
/******/ while (queue.length > 0) {
|
||
/******/ moduleId = queue.pop();
|
||
/******/ module = installedModules[moduleId];
|
||
/******/ if (!module) continue;
|
||
/******/
|
||
/******/ var data = {};
|
||
/******/
|
||
/******/ // Call dispose handlers
|
||
/******/ var disposeHandlers = module.hot._disposeHandlers;
|
||
/******/ for (j = 0; j < disposeHandlers.length; j++) {
|
||
/******/ cb = disposeHandlers[j];
|
||
/******/ cb(data);
|
||
/******/ }
|
||
/******/ hotCurrentModuleData[moduleId] = data;
|
||
/******/
|
||
/******/ // disable module (this disables requires from this module)
|
||
/******/ module.hot.active = false;
|
||
/******/
|
||
/******/ // remove module from cache
|
||
/******/ delete installedModules[moduleId];
|
||
/******/
|
||
/******/ // when disposing there is no need to call dispose handler
|
||
/******/ delete outdatedDependencies[moduleId];
|
||
/******/
|
||
/******/ // remove "parents" references from all children
|
||
/******/ for (j = 0; j < module.children.length; j++) {
|
||
/******/ var child = installedModules[module.children[j]];
|
||
/******/ if (!child) continue;
|
||
/******/ idx = child.parents.indexOf(moduleId);
|
||
/******/ if (idx >= 0) {
|
||
/******/ child.parents.splice(idx, 1);
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // remove outdated dependency from module children
|
||
/******/ var dependency;
|
||
/******/ var moduleOutdatedDependencies;
|
||
/******/ for (moduleId in outdatedDependencies) {
|
||
/******/ if (
|
||
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
|
||
/******/ ) {
|
||
/******/ module = installedModules[moduleId];
|
||
/******/ if (module) {
|
||
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
|
||
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
|
||
/******/ dependency = moduleOutdatedDependencies[j];
|
||
/******/ idx = module.children.indexOf(dependency);
|
||
/******/ if (idx >= 0) module.children.splice(idx, 1);
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // Now in "apply" phase
|
||
/******/ hotSetStatus("apply");
|
||
/******/
|
||
/******/ hotCurrentHash = hotUpdateNewHash;
|
||
/******/
|
||
/******/ // insert new code
|
||
/******/ for (moduleId in appliedUpdate) {
|
||
/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
|
||
/******/ modules[moduleId] = appliedUpdate[moduleId];
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // call accept handlers
|
||
/******/ var error = null;
|
||
/******/ for (moduleId in outdatedDependencies) {
|
||
/******/ if (
|
||
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
|
||
/******/ ) {
|
||
/******/ module = installedModules[moduleId];
|
||
/******/ if (module) {
|
||
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
|
||
/******/ var callbacks = [];
|
||
/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
|
||
/******/ dependency = moduleOutdatedDependencies[i];
|
||
/******/ cb = module.hot._acceptedDependencies[dependency];
|
||
/******/ if (cb) {
|
||
/******/ if (callbacks.indexOf(cb) !== -1) continue;
|
||
/******/ callbacks.push(cb);
|
||
/******/ }
|
||
/******/ }
|
||
/******/ for (i = 0; i < callbacks.length; i++) {
|
||
/******/ cb = callbacks[i];
|
||
/******/ try {
|
||
/******/ cb(moduleOutdatedDependencies);
|
||
/******/ } catch (err) {
|
||
/******/ if (options.onErrored) {
|
||
/******/ options.onErrored({
|
||
/******/ type: "accept-errored",
|
||
/******/ moduleId: moduleId,
|
||
/******/ dependencyId: moduleOutdatedDependencies[i],
|
||
/******/ error: err
|
||
/******/ });
|
||
/******/ }
|
||
/******/ if (!options.ignoreErrored) {
|
||
/******/ if (!error) error = err;
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // Load self accepted modules
|
||
/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
|
||
/******/ var item = outdatedSelfAcceptedModules[i];
|
||
/******/ moduleId = item.module;
|
||
/******/ hotCurrentParents = [moduleId];
|
||
/******/ try {
|
||
/******/ __webpack_require__(moduleId);
|
||
/******/ } catch (err) {
|
||
/******/ if (typeof item.errorHandler === "function") {
|
||
/******/ try {
|
||
/******/ item.errorHandler(err);
|
||
/******/ } catch (err2) {
|
||
/******/ if (options.onErrored) {
|
||
/******/ options.onErrored({
|
||
/******/ type: "self-accept-error-handler-errored",
|
||
/******/ moduleId: moduleId,
|
||
/******/ error: err2,
|
||
/******/ originalError: err
|
||
/******/ });
|
||
/******/ }
|
||
/******/ if (!options.ignoreErrored) {
|
||
/******/ if (!error) error = err2;
|
||
/******/ }
|
||
/******/ if (!error) error = err;
|
||
/******/ }
|
||
/******/ } else {
|
||
/******/ if (options.onErrored) {
|
||
/******/ options.onErrored({
|
||
/******/ type: "self-accept-errored",
|
||
/******/ moduleId: moduleId,
|
||
/******/ error: err
|
||
/******/ });
|
||
/******/ }
|
||
/******/ if (!options.ignoreErrored) {
|
||
/******/ if (!error) error = err;
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // handle errors in accept handlers and self accepted module load
|
||
/******/ if (error) {
|
||
/******/ hotSetStatus("fail");
|
||
/******/ return Promise.reject(error);
|
||
/******/ }
|
||
/******/
|
||
/******/ hotSetStatus("idle");
|
||
/******/ return new Promise(function(resolve) {
|
||
/******/ resolve(outdatedModules);
|
||
/******/ });
|
||
/******/ }
|
||
/******/
|
||
/******/ // 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: {},
|
||
/******/ hot: hotCreateModule(moduleId),
|
||
/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
|
||
/******/ children: []
|
||
/******/ };
|
||
/******/
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
|
||
/******/
|
||
/******/ // 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 = "";
|
||
/******/
|
||
/******/ // __webpack_hash__
|
||
/******/ __webpack_require__.h = function() { return hotCurrentHash; };
|
||
/******/
|
||
/******/
|
||
/******/ // Load entry module and return exports
|
||
/******/ return hotCreateRequire(12)(__webpack_require__.s = 12);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ([
|
||
/* 0 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
|
||
|
||
/***/ }),
|
||
/* 1 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M73.142857 336.64h526.628572v43.885714H73.142857zM73.142857 643.657143h526.628572v43.885714H73.142857zM336.457143 117.028571h43.885714v789.942858h-43.885714zM204.8 73.142857h614.4a131.657143 131.657143 0 0 1 131.657143 131.657143v614.4a131.657143 131.657143 0 0 1-131.657143 131.657143H204.8A131.657143 131.657143 0 0 1 73.142857 819.2V204.8A131.84 131.84 0 0 1 204.8 73.142857z m0 43.885714a87.771429 87.771429 0 0 0-87.771429 87.771429v614.4a87.771429 87.771429 0 0 0 87.771429 87.771429h614.4a87.771429 87.771429 0 0 0 87.771429-87.771429V204.8a87.771429 87.771429 0 0 0-87.771429-87.771429zM819.2 73.142857h-219.428571v877.714286h219.428571a131.657143 131.657143 0 0 0 131.657143-131.657143V204.8A131.84 131.84 0 0 0 819.2 73.142857z m44.068571 460.982857h-65.828571v65.828572H753.371429v-65.828572h-65.828572V490.057143h65.828572v-65.828572h44.068571v65.828572h65.828571z\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 2 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20.00px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M380.342857 336.457143h526.811429v43.885714H380.342857z m0 307.2h526.811429v43.885714H380.342857zM643.657143 117.028571h43.885714v789.942858h-43.885714zM204.8 73.142857h614.582857A131.474286 131.474286 0 0 1 950.857143 204.8v614.4a131.657143 131.657143 0 0 1-131.657143 131.657143H204.8A131.657143 131.657143 0 0 1 73.142857 819.2V204.8A131.657143 131.657143 0 0 1 204.8 73.142857z m0 43.885714a87.588571 87.588571 0 0 0-87.588571 87.771429v614.4a87.588571 87.588571 0 0 0 87.588571 87.771429h614.582857a87.771429 87.771429 0 0 0 87.771429-87.771429V204.8a87.771429 87.771429 0 0 0-87.771429-87.771429zM204.8 73.142857A131.657143 131.657143 0 0 0 73.142857 204.8v614.4a131.657143 131.657143 0 0 0 131.657143 131.657143h219.428571V73.142857z m131.84 460.8h-65.828571v65.828572h-43.885715v-65.828572h-65.828571v-43.885714h65.828571v-65.828572h43.885715v65.828572h65.828571z\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 3 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20.00px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M73.142857 599.771429h877.714286v43.885714H73.142857zM336.457143 380.342857h43.885714v526.628572h-43.885714z m307.2 0h43.885714v526.628572h-43.885714zM204.8 73.142857h614.4a131.657143 131.657143 0 0 1 131.657143 131.657143v614.4a131.657143 131.657143 0 0 1-131.657143 131.657143H204.8A131.657143 131.657143 0 0 1 73.142857 819.2V204.8A131.657143 131.657143 0 0 1 204.8 73.142857z m0 43.885714a87.771429 87.771429 0 0 0-87.771429 87.771429v614.4a87.588571 87.588571 0 0 0 87.771429 87.771429h614.4a87.588571 87.588571 0 0 0 87.771429-87.771429V204.8a87.771429 87.771429 0 0 0-87.771429-87.771429zM819.2 73.142857H204.8A131.657143 131.657143 0 0 0 73.142857 204.8v219.428571h877.714286v-219.428571A131.657143 131.657143 0 0 0 819.2 73.142857z m-219.428571 197.485714h-65.828572v65.828572h-43.885714v-65.828572h-65.828572v-43.885714h65.828572V160.914286h43.885714v65.828571h65.828572z\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 4 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20.00px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M204.8 73.142857h614.4a131.657143 131.657143 0 0 1 131.657143 131.657143v614.4a131.657143 131.657143 0 0 1-131.657143 131.657143H204.8A131.657143 131.657143 0 0 1 73.142857 819.2V204.8A131.84 131.84 0 0 1 204.8 73.142857z m0 43.885714a87.771429 87.771429 0 0 0-87.771429 87.771429v614.4a87.771429 87.771429 0 0 0 87.771429 87.771429h614.4a87.771429 87.771429 0 0 0 87.771429-87.771429V204.8a87.771429 87.771429 0 0 0-87.771429-87.771429zM73.142857 336.457143h877.714286v44.068571H73.142857zM336.64 117.028571h43.885714v526.628572h-43.885714z m307.017143 0h44.068571v526.628572H643.657143zM73.142857 599.771429v219.428571a131.657143 131.657143 0 0 0 131.657143 131.657143h614.4a131.657143 131.657143 0 0 0 131.657143-131.657143v-219.428571z m526.628572 197.485714h-65.645715v65.828571H490.057143v-65.828571h-65.828572v-43.885714h65.828572v-65.828572h44.068571v65.828572h65.645715z\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 5 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20.00px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M925.99596 99.038384c-25.470707-25.6-60.121212-39.822222-96.323233-39.822222H194.19798c-36.072727 0-70.723232 14.351515-96.323233 39.822222-25.6 25.6-39.822222 60.121212-39.822222 96.323232v635.474748c0 36.072727 14.351515 70.723232 39.822222 96.323232C123.474747 952.759596 158.125253 967.111111 194.19798 967.111111h635.474747c36.072727 0 70.723232-14.351515 96.323233-39.951515 25.6-25.6 39.951515-60.121212 39.951515-96.323232V195.361616c0-36.072727-14.351515-70.723232-39.951515-96.323232z m-277.850505 5.559596v226.909091H375.725253V104.59798h272.420202zM103.434343 195.361616c0-24.048485 9.567677-47.191919 26.634344-64.129293 17.066667-17.066667 40.080808-26.634343 64.129293-26.634343h136.145454v226.909091H103.434343V195.361616z m90.763637 726.367677c-24.048485 0-47.191919-9.567677-64.129293-26.634344-17.066667-17.066667-26.634343-40.080808-26.634344-64.129292V649.309091h226.909091v272.420202H194.19798z m181.527273 0V649.309091h272.290909v272.420202H375.725253z m544.711111-90.892929c0 24.048485-9.567677 47.191919-26.634344 64.129293-17.066667 17.066667-40.080808 26.634343-64.129293 26.634343H693.527273V649.309091h226.909091v181.527273zM693.527273 331.507071V104.59798h136.145454c24.048485 0 47.191919 9.567677 64.129293 26.634343 17.066667 17.066667 26.634343 40.080808 26.634344 64.129293v136.145455H693.527273z\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 6 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20.00px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M336.457143 73.142857h43.885714v877.714286h-43.885714z m307.382857 0h43.702857v877.714286h-43.702857z m-438.857143 0h614.4A131.657143 131.657143 0 0 1 950.857143 204.8v614.4a131.474286 131.474286 0 0 1-131.474286 131.657143h-614.4A131.657143 131.657143 0 0 1 73.142857 819.2V204.8A131.84 131.84 0 0 1 204.982857 73.142857z m0 43.885714a87.588571 87.588571 0 0 0-87.771428 87.771429v614.4a87.588571 87.588571 0 0 0 87.771428 87.771429h614.4a87.771429 87.771429 0 0 0 87.771429-87.771429V204.8a87.771429 87.771429 0 0 0-87.771429-87.771429zM73.142857 336.457143h877.714286v307.2H73.142857z m292.571429 43.885714v219.428572h292.571428v-219.428572z\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 7 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20.00px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M925.996 99.038c-25.47-25.6-60.121-39.822-96.323-39.822H194.198c-75.12 0.13-136.016 61.026-136.145 136.146v635.345c0 36.073 14.351 70.723 39.822 96.323 25.6 25.73 60.25 40.081 96.323 40.081h635.475c36.072 0 70.723-14.351 96.323-39.951 25.6-25.6 39.951-60.122 39.951-96.324V195.362c0-36.073-14.351-70.724-39.951-96.324z m-365.77 494.287L512 545.228l-48.226 48.097-32.194-31.935 48.355-48.226-48.226-48.097 32.194-32.194L512 480.97l48.097-48.097 32.194 32.194-48.097 48.097 48.226 48.226-32.194 31.935zM103.434 195.362c0-24.049 9.568-47.192 26.635-64.13 17.066-17.066 40.08-26.634 64.129-26.634h136.145v226.91H103.434V195.361z m0 181.656h226.91V649.31h-226.91V377.02z m90.764 544.84c-24.049 0-47.192-9.567-64.13-26.634-17.066-17.066-26.634-40.08-26.634-64.258V694.69h226.91v227.168H194.197z m726.238-90.763c0 24.048-9.438 47.192-26.505 64.259-17.066 17.066-40.21 26.634-64.258 26.505H693.527V694.69h226.91v136.404z m0-181.786H693.527V377.02h226.91v272.29zM693.527 331.507V104.598h136.146c24.048 0 47.192 9.438 64.258 26.505 17.067 17.067 26.635 40.21 26.505 64.259v136.145H693.527z\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 8 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20.00px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M925.99596 99.038384c-25.470707-25.6-60.121212-39.822222-96.323233-39.822222H194.19798c-36.072727 0-70.723232 14.351515-96.323233 39.822222-25.6 25.6-39.822222 60.121212-39.822222 96.323232v635.474748c0 36.072727 14.351515 70.723232 39.822222 96.323232C123.474747 952.759596 158.125253 967.111111 194.19798 967.111111h635.474747c36.072727 0 70.723232-14.351515 96.323233-39.951515 25.6-25.6 39.951515-60.121212 39.951515-96.323232V195.361616c0-36.072727-14.351515-70.723232-39.951515-96.323232z m-550.270707 5.559596h272.290909v227.167677H375.725253V104.59798z m56.242424 360.468687l31.935353-32.19394 48.09697 48.226263 48.09697-48.226263 32.193939 32.19394-48.09697 48.096969 48.226263 48.226263-32.193939 31.935354-48.226263-48.09697-48.226263 48.09697-31.935353-31.935354 48.226262-48.226263-48.096969-48.096969zM103.434343 195.361616c0-24.048485 9.567677-47.191919 26.634344-64.129293 17.066667-17.066667 40.080808-26.634343 64.129293-26.634343h136.145454v227.167677H103.434343V195.361616z m817.002021 635.733333c0 24.048485-9.567677 47.191919-26.634344 64.258586-17.066667 17.066667-40.080808 26.634343-64.129293 26.634344H194.19798c-24.048485 0-47.191919-9.567677-64.258586-26.634344C112.872727 878.157576 103.434343 855.014141 103.434343 830.836364V694.690909h226.909091v226.909091h45.381819V694.690909h272.290909v226.909091h45.381818V694.690909h226.909091v136.40404z m0-499.329292H693.527273V104.59798h136.145454c24.048485 0 47.191919 9.567677 64.129293 26.634343 17.066667 17.066667 26.634343 40.080808 26.634344 64.129293v136.404041z\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 9 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<?xml version=\"1.0\" standalone=\"no\"?><!doctype html><svg class=icon width=20px height=20.00px viewBox=\"0 0 1024 1024\" version=1.1 xmlns=http://www.w3.org/2000/svg><path fill=#595959 d=\"M764.42168889 830.5152c0 30.23530667-24.61013333 54.84430222-54.84316444 54.84430222H314.42147555c-30.23416889 0-54.84316445-24.61013333-54.84316444-54.84430222V248.32796445h504.84337778v582.18723555zM369.26577778 149.89084445c0-6.32832 4.92202667-11.25034667 11.25034667-11.25034667H644.18702222c6.32832 0 11.25034667 4.92202667 11.25034667 11.25034667v33.04675555H369.26577778V149.89084445z m559.68768 33.04675555H720.82773333V149.89084445c0-42.1888-34.45191111-76.64071111-76.64071111-76.64071112H380.51612445c-42.1888 0-76.64071111 34.45191111-76.64071112 76.64071112v33.04675555h-208.82773333c-18.28181333 0-33.04789333 14.76608-33.04789333 33.04675555s14.76608 33.04675555 33.04675555 33.04675556h98.43825778v581.48408889c0 66.79779555 54.14001778 120.93781333 120.93667555 120.93781333h395.1570489c66.79665778 0 120.93667555-54.14001778 120.93667555-120.93781333V248.32796445h98.43825778c18.28067555 0 33.04675555-14.76494222 33.04675555-33.04675556s-14.76608-32.34360889-33.04675555-32.34360889zM512 786.21923555c18.28181333 0 33.04675555-14.76608 33.04675555-33.04789333v-351.56195555c0-18.28181333-14.76494222-33.04675555-33.04675555-33.04675556s-33.04675555 14.76494222-33.04675555 33.04675556v351.56195555c0 18.28181333 14.76494222 33.04789333 33.04675555 33.04789333m-153.98456889 0c18.28181333 0 33.04675555-14.76608 33.04675556-33.04789333v-351.56195555c0-18.28181333-14.76494222-33.04675555-33.04675556-33.04675556s-33.04675555 14.76494222-33.04675556 33.04675556v351.56195555c0.70314667 18.28181333 15.46922667 33.04789333 33.04675556 33.04789333m307.96913778 0c18.28067555 0 33.04675555-14.76608 33.04675556-33.04789333v-351.56195555c0-18.28181333-14.76608-33.04675555-33.04675556-33.04675556s-33.04675555 14.76494222-33.04675556 33.04675556v351.56195555c0 18.28181333 14.76494222 33.04789333 33.04675556 33.04789333\"/></svg>";
|
||
|
||
/***/ }),
|
||
/* 10 */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
|
||
// EXTERNAL MODULE: external {"commonjs":"quill","commonjs2":"quill","amd":"quill","root":"Quill"}
|
||
var external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_ = __webpack_require__(0);
|
||
var external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_);
|
||
|
||
// CONCATENATED MODULE: ./src/utils/index.js
|
||
function css(domNode, rules) {
|
||
if (typeof rules === 'object') {
|
||
for (let prop in rules) {
|
||
domNode.style[prop] = rules[prop];
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* getRelativeRect
|
||
* @param {Object} targetRect rect data for target element
|
||
* @param {Element} container container element
|
||
* @return {Object} an object with rect data
|
||
*/
|
||
|
||
function getRelativeRect(targetRect, container) {
|
||
let containerRect = container.getBoundingClientRect();
|
||
return {
|
||
x: targetRect.x - containerRect.x - container.scrollLeft,
|
||
y: targetRect.y - containerRect.y - container.scrollTop,
|
||
x1: targetRect.x - containerRect.x - container.scrollLeft + targetRect.width,
|
||
y1: targetRect.y - containerRect.y - container.scrollTop + targetRect.height,
|
||
width: targetRect.width,
|
||
height: targetRect.height
|
||
};
|
||
}
|
||
/**
|
||
* _omit
|
||
* @param {Object} obj target Object
|
||
* @param {Array} uselessKeys keys of removed properties
|
||
* @return {Object} new Object without useless properties
|
||
*/
|
||
|
||
function _omit(obj, uselessKeys) {
|
||
return obj && Object.keys(obj).reduce((acc, key) => {
|
||
return uselessKeys.includes(key) ? acc : Object.assign({}, acc, {
|
||
[key]: obj[key]
|
||
});
|
||
}, {});
|
||
}
|
||
/**
|
||
* getEventComposedPath
|
||
* compatibility fixed for Event.path/Event.composedPath
|
||
* Event.path is only for chrome/opera
|
||
* Event.composedPath is for Safari, FF
|
||
* Neither for Micro Edge
|
||
* @param {Event} evt
|
||
* @return {Array} an array of event.path
|
||
*/
|
||
|
||
function getEventComposedPath(evt) {
|
||
let path; // chrome, opera, safari, firefox
|
||
|
||
path = evt.path || evt.composedPath && evt.composedPath(); // other: edge
|
||
|
||
if (path == undefined && evt.target) {
|
||
path = [];
|
||
let target = evt.target;
|
||
path.push(target);
|
||
|
||
while (target && target.parentNode) {
|
||
target = target.parentNode;
|
||
path.push(target);
|
||
}
|
||
}
|
||
|
||
return path;
|
||
}
|
||
function convertToHex(rgb) {
|
||
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; // if rgb
|
||
|
||
if (/^(rgb|RGB)/.test(rgb)) {
|
||
var color = rgb.toString().match(/\d+/g);
|
||
var hex = "#";
|
||
|
||
for (var i = 0; i < 3; i++) {
|
||
hex += ("0" + Number(color[i]).toString(16)).slice(-2);
|
||
}
|
||
|
||
return hex;
|
||
} else if (reg.test(rgb)) {
|
||
var aNum = rgb.replace(/#/, "").split("");
|
||
|
||
if (aNum.length === 6) {
|
||
return rgb;
|
||
} else if (aNum.length === 3) {
|
||
var numHex = "#";
|
||
|
||
for (var i = 0; i < aNum.length; i += 1) {
|
||
numHex += aNum[i] + aNum[i];
|
||
}
|
||
|
||
return numHex;
|
||
}
|
||
}
|
||
|
||
return rgb;
|
||
}
|
||
// CONCATENATED MODULE: ./src/modules/table-column-tool.js
|
||
|
||
|
||
const COL_TOOL_HEIGHT = 12;
|
||
const COL_TOOL_CELL_HEIGHT = 12;
|
||
const ROW_TOOL_WIDTH = 12;
|
||
const CELL_MIN_WIDTH = 50;
|
||
const PRIMARY_COLOR = '#35A7ED';
|
||
class table_column_tool_TableColumnTool {
|
||
constructor(table, quill, options) {
|
||
if (!table) return null;
|
||
this.table = table;
|
||
this.quill = quill;
|
||
this.options = options;
|
||
this.domNode = null;
|
||
this.initColTool();
|
||
}
|
||
|
||
initColTool() {
|
||
const parent = this.quill.root.parentNode;
|
||
const tableRect = this.table.getBoundingClientRect();
|
||
const containerRect = parent.getBoundingClientRect();
|
||
const tableViewRect = this.table.parentNode.getBoundingClientRect();
|
||
this.domNode = document.createElement('div');
|
||
this.domNode.classList.add('qlbt-col-tool');
|
||
this.updateToolCells();
|
||
parent.appendChild(this.domNode);
|
||
css(this.domNode, {
|
||
width: "".concat(tableViewRect.width, "px"),
|
||
height: "".concat(COL_TOOL_HEIGHT, "px"),
|
||
left: "".concat(tableViewRect.left - containerRect.left + parent.scrollLeft, "px"),
|
||
top: "".concat(tableViewRect.top - containerRect.top + parent.scrollTop - COL_TOOL_HEIGHT - 5, "px")
|
||
});
|
||
}
|
||
|
||
createToolCell() {
|
||
const toolCell = document.createElement('div');
|
||
toolCell.classList.add('qlbt-col-tool-cell');
|
||
const resizeHolder = document.createElement('div');
|
||
resizeHolder.classList.add('qlbt-col-tool-cell-holder');
|
||
css(toolCell, {
|
||
'height': "".concat(COL_TOOL_CELL_HEIGHT, "px")
|
||
});
|
||
toolCell.appendChild(resizeHolder);
|
||
return toolCell;
|
||
}
|
||
|
||
updateToolCells() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
const CellsInFirstRow = tableContainer.children.tail.children.head.children;
|
||
const tableCols = tableContainer.colGroup().children;
|
||
const cellsNumber = computeCellsNumber(CellsInFirstRow);
|
||
let existCells = Array.from(this.domNode.querySelectorAll('.qlbt-col-tool-cell'));
|
||
|
||
for (let index = 0; index < Math.max(cellsNumber, existCells.length); index++) {
|
||
let col = tableCols.at(index);
|
||
let colWidth = col && parseInt(col.formats()[col.statics.blotName].width, 10); // if cell already exist
|
||
|
||
let toolCell = null;
|
||
|
||
if (!existCells[index]) {
|
||
toolCell = this.createToolCell();
|
||
this.domNode.appendChild(toolCell);
|
||
this.addColCellHolderHandler(toolCell); // set tool cell min-width
|
||
|
||
css(toolCell, {
|
||
'min-width': "".concat(colWidth, "px")
|
||
});
|
||
} else if (existCells[index] && index >= cellsNumber) {
|
||
existCells[index].remove();
|
||
} else {
|
||
toolCell = existCells[index]; // set tool cell min-width
|
||
|
||
css(toolCell, {
|
||
'min-width': "".concat(colWidth, "px")
|
||
});
|
||
}
|
||
}
|
||
}
|
||
|
||
destroy() {
|
||
this.domNode.remove();
|
||
return null;
|
||
}
|
||
|
||
addColCellHolderHandler(cell) {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
const $holder = cell.querySelector(".qlbt-col-tool-cell-holder");
|
||
let dragging = false;
|
||
let x0 = 0;
|
||
let x = 0;
|
||
let delta = 0;
|
||
let width0 = 0; // helpLine relation varrible
|
||
|
||
let tableRect = {};
|
||
let cellRect = {};
|
||
let $helpLine = null;
|
||
|
||
const handleDrag = e => {
|
||
e.preventDefault();
|
||
|
||
if (dragging) {
|
||
x = e.clientX;
|
||
|
||
if (width0 + x - x0 >= CELL_MIN_WIDTH) {
|
||
delta = x - x0;
|
||
} else {
|
||
delta = CELL_MIN_WIDTH - width0;
|
||
}
|
||
|
||
css($helpLine, {
|
||
'left': "".concat(cellRect.left + cellRect.width - 1 + delta, "px")
|
||
});
|
||
}
|
||
};
|
||
|
||
const handleMouseup = e => {
|
||
e.preventDefault();
|
||
const existCells = Array.from(this.domNode.querySelectorAll('.qlbt-col-tool-cell'));
|
||
const colIndex = existCells.indexOf(cell);
|
||
const colBlot = tableContainer.colGroup().children.at(colIndex);
|
||
|
||
if (dragging) {
|
||
colBlot.format('width', width0 + delta);
|
||
css(cell, {
|
||
'min-width': "".concat(width0 + delta, "px")
|
||
});
|
||
x0 = 0;
|
||
x = 0;
|
||
delta = 0;
|
||
width0 = 0;
|
||
dragging = false;
|
||
$holder.classList.remove('dragging');
|
||
}
|
||
|
||
document.removeEventListener('mousemove', handleDrag, false);
|
||
document.removeEventListener('mouseup', handleMouseup, false);
|
||
tableRect = {};
|
||
cellRect = {};
|
||
$helpLine.remove();
|
||
$helpLine = null;
|
||
tableContainer.updateTableWidth();
|
||
const tableSelection = this.quill.getModule('better-table').tableSelection;
|
||
tableSelection && tableSelection.clearSelection();
|
||
};
|
||
|
||
const handleMousedown = e => {
|
||
document.addEventListener('mousemove', handleDrag, false);
|
||
document.addEventListener('mouseup', handleMouseup, false);
|
||
tableRect = this.table.getBoundingClientRect();
|
||
cellRect = cell.getBoundingClientRect();
|
||
$helpLine = document.createElement('div');
|
||
css($helpLine, {
|
||
position: 'fixed',
|
||
top: "".concat(cellRect.top, "px"),
|
||
left: "".concat(cellRect.left + cellRect.width - 1, "px"),
|
||
zIndex: '100',
|
||
height: "".concat(tableRect.height + COL_TOOL_HEIGHT + 4, "px"),
|
||
width: '1px',
|
||
backgroundColor: PRIMARY_COLOR
|
||
});
|
||
document.body.appendChild($helpLine);
|
||
dragging = true;
|
||
x0 = e.clientX;
|
||
width0 = cellRect.width;
|
||
$holder.classList.add('dragging');
|
||
};
|
||
|
||
$holder.addEventListener('mousedown', handleMousedown, false);
|
||
}
|
||
|
||
colToolCells() {
|
||
return Array.from(this.domNode.querySelectorAll('.qlbt-col-tool-cell'));
|
||
}
|
||
|
||
}
|
||
|
||
function computeCellsNumber(CellsInFirstRow) {
|
||
return CellsInFirstRow.reduce((sum, cell) => {
|
||
const cellColspan = cell.formats().colspan;
|
||
sum = sum + parseInt(cellColspan, 10);
|
||
return sum;
|
||
}, 0);
|
||
}
|
||
// CONCATENATED MODULE: ./src/formats/header.js
|
||
|
||
|
||
const Block = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.import("blots/block");
|
||
|
||
class header_Header extends Block {
|
||
static create(value) {
|
||
if (typeof value === 'string') {
|
||
value = {
|
||
value
|
||
};
|
||
}
|
||
|
||
const node = super.create(value.value);
|
||
CELL_IDENTITY_KEYS.forEach(key => {
|
||
if (value[key]) node.setAttribute("data-".concat(key), value[key]);
|
||
});
|
||
CELL_ATTRIBUTES.forEach(key => {
|
||
if (value[key]) node.setAttribute("data-".concat(key), value[key]);
|
||
});
|
||
return node;
|
||
}
|
||
|
||
static formats(domNode) {
|
||
const formats = {};
|
||
formats.value = this.tagName.indexOf(domNode.tagName) + 1;
|
||
return CELL_ATTRIBUTES.concat(CELL_IDENTITY_KEYS).reduce((formats, attribute) => {
|
||
if (domNode.hasAttribute("data-".concat(attribute))) {
|
||
formats[attribute] = domNode.getAttribute("data-".concat(attribute)) || undefined;
|
||
}
|
||
|
||
return formats;
|
||
}, formats);
|
||
}
|
||
|
||
format(name, value) {
|
||
const {
|
||
row,
|
||
cell,
|
||
rowspan,
|
||
colspan
|
||
} = header_Header.formats(this.domNode);
|
||
|
||
if (name === header_Header.blotName) {
|
||
if (value) {
|
||
super.format(name, {
|
||
value,
|
||
row,
|
||
cell,
|
||
rowspan,
|
||
colspan
|
||
});
|
||
} else {
|
||
if (row) {
|
||
this.replaceWith(TableCellLine.blotName, {
|
||
row,
|
||
cell,
|
||
rowspan,
|
||
colspan
|
||
});
|
||
} else {
|
||
super.format(name, value);
|
||
}
|
||
}
|
||
} else {
|
||
super.format(name, value);
|
||
}
|
||
}
|
||
|
||
optimize(context) {
|
||
const {
|
||
row,
|
||
rowspan,
|
||
colspan
|
||
} = header_Header.formats(this.domNode);
|
||
|
||
if (row && !(this.parent instanceof TableCell)) {
|
||
this.wrap(TableCell.blotName, {
|
||
row,
|
||
colspan,
|
||
rowspan
|
||
});
|
||
} // ShadowBlot optimize
|
||
|
||
|
||
this.enforceAllowedChildren();
|
||
|
||
if (this.uiNode != null && this.uiNode !== this.domNode.firstChild) {
|
||
this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);
|
||
}
|
||
|
||
if (this.children.length === 0) {
|
||
if (this.statics.defaultChild != null) {
|
||
const child = this.scroll.create(this.statics.defaultChild.blotName);
|
||
this.appendChild(child); // TODO double check if necessary
|
||
// child.optimize(context);
|
||
} else {
|
||
this.remove();
|
||
}
|
||
} // Block optimize
|
||
|
||
|
||
this.cache = {};
|
||
}
|
||
|
||
}
|
||
|
||
header_Header.blotName = 'header';
|
||
header_Header.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];
|
||
/* harmony default export */ var header = (header_Header);
|
||
// CONCATENATED MODULE: ./src/formats/table.js
|
||
|
||
|
||
|
||
const Break = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.import("blots/break");
|
||
const table_Block = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.import("blots/block");
|
||
const Container = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.import("blots/container");
|
||
const COL_ATTRIBUTES = ["width"];
|
||
const COL_DEFAULT = {
|
||
width: 100
|
||
};
|
||
const CELL_IDENTITY_KEYS = ["row", "cell"];
|
||
const CELL_ATTRIBUTES = ["rowspan", "colspan"];
|
||
const CELL_DEFAULT = {
|
||
rowspan: 1,
|
||
colspan: 1
|
||
};
|
||
const ERROR_LIMIT = 5;
|
||
|
||
class TableCellLine extends table_Block {
|
||
static create(value) {
|
||
const node = super.create(value);
|
||
CELL_IDENTITY_KEYS.forEach(key => {
|
||
let identityMaker = key === 'row' ? table_rowId : table_cellId;
|
||
node.setAttribute("data-".concat(key), value[key] || identityMaker());
|
||
});
|
||
CELL_ATTRIBUTES.forEach(attrName => {
|
||
node.setAttribute("data-".concat(attrName), value[attrName] || CELL_DEFAULT[attrName]);
|
||
});
|
||
|
||
if (value['cell-bg']) {
|
||
node.setAttribute('data-cell-bg', value['cell-bg']);
|
||
}
|
||
|
||
return node;
|
||
}
|
||
|
||
static formats(domNode) {
|
||
const formats = {};
|
||
return CELL_ATTRIBUTES.concat(CELL_IDENTITY_KEYS).concat(['cell-bg']).reduce((formats, attribute) => {
|
||
if (domNode.hasAttribute("data-".concat(attribute))) {
|
||
formats[attribute] = domNode.getAttribute("data-".concat(attribute)) || undefined;
|
||
}
|
||
|
||
return formats;
|
||
}, formats);
|
||
}
|
||
|
||
format(name, value) {
|
||
if (CELL_ATTRIBUTES.concat(CELL_IDENTITY_KEYS).indexOf(name) > -1) {
|
||
if (value) {
|
||
this.domNode.setAttribute("data-".concat(name), value);
|
||
} else {
|
||
this.domNode.removeAttribute("data-".concat(name));
|
||
}
|
||
} else if (name === 'cell-bg') {
|
||
if (value) {
|
||
this.domNode.setAttribute('data-cell-bg', value);
|
||
} else {
|
||
this.domNode.removeAttribute('data-cell-bg');
|
||
}
|
||
} else if (name === 'header') {
|
||
if (!value) return;
|
||
const {
|
||
row,
|
||
cell,
|
||
rowspan,
|
||
colspan
|
||
} = TableCellLine.formats(this.domNode);
|
||
super.format(name, {
|
||
value,
|
||
row,
|
||
cell,
|
||
rowspan,
|
||
colspan
|
||
});
|
||
} else {
|
||
super.format(name, value);
|
||
}
|
||
}
|
||
|
||
optimize(context) {
|
||
// cover shadowBlot's wrap call, pass params parentBlot initialize
|
||
// needed
|
||
const rowId = this.domNode.getAttribute('data-row');
|
||
const rowspan = this.domNode.getAttribute('data-rowspan');
|
||
const colspan = this.domNode.getAttribute('data-colspan');
|
||
const cellBg = this.domNode.getAttribute('data-cell-bg');
|
||
|
||
if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {
|
||
this.wrap(this.statics.requiredContainer.blotName, {
|
||
row: rowId,
|
||
colspan,
|
||
rowspan,
|
||
'cell-bg': cellBg
|
||
});
|
||
}
|
||
|
||
super.optimize(context);
|
||
}
|
||
|
||
tableCell() {
|
||
return this.parent;
|
||
}
|
||
|
||
}
|
||
|
||
TableCellLine.blotName = "table-cell-line";
|
||
TableCellLine.className = "qlbt-cell-line";
|
||
TableCellLine.tagName = "P";
|
||
|
||
class TableCell extends Container {
|
||
checkMerge() {
|
||
if (super.checkMerge() && this.next.children.head != null) {
|
||
const thisHead = this.children.head.formats()[this.children.head.statics.blotName];
|
||
const thisTail = this.children.tail.formats()[this.children.tail.statics.blotName];
|
||
const nextHead = this.next.children.head.formats()[this.next.children.head.statics.blotName];
|
||
const nextTail = this.next.children.tail.formats()[this.next.children.tail.statics.blotName];
|
||
return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
static create(value) {
|
||
const node = super.create(value);
|
||
node.setAttribute("data-row", value.row);
|
||
CELL_ATTRIBUTES.forEach(attrName => {
|
||
if (value[attrName]) {
|
||
node.setAttribute(attrName, value[attrName]);
|
||
}
|
||
});
|
||
|
||
if (value['cell-bg']) {
|
||
node.setAttribute('data-cell-bg', value['cell-bg']);
|
||
node.style.backgroundColor = value['cell-bg'];
|
||
}
|
||
|
||
return node;
|
||
}
|
||
|
||
static formats(domNode) {
|
||
const formats = {};
|
||
|
||
if (domNode.hasAttribute("data-row")) {
|
||
formats["row"] = domNode.getAttribute("data-row");
|
||
}
|
||
|
||
if (domNode.hasAttribute("data-cell-bg")) {
|
||
formats["cell-bg"] = domNode.getAttribute("data-cell-bg");
|
||
}
|
||
|
||
return CELL_ATTRIBUTES.reduce((formats, attribute) => {
|
||
if (domNode.hasAttribute(attribute)) {
|
||
formats[attribute] = domNode.getAttribute(attribute);
|
||
}
|
||
|
||
return formats;
|
||
}, formats);
|
||
}
|
||
|
||
cellOffset() {
|
||
if (this.parent) {
|
||
return this.parent.children.indexOf(this);
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
formats() {
|
||
const formats = {};
|
||
|
||
if (this.domNode.hasAttribute("data-row")) {
|
||
formats["row"] = this.domNode.getAttribute("data-row");
|
||
}
|
||
|
||
if (this.domNode.hasAttribute("data-cell-bg")) {
|
||
formats["cell-bg"] = this.domNode.getAttribute("data-cell-bg");
|
||
}
|
||
|
||
return CELL_ATTRIBUTES.reduce((formats, attribute) => {
|
||
if (this.domNode.hasAttribute(attribute)) {
|
||
formats[attribute] = this.domNode.getAttribute(attribute);
|
||
}
|
||
|
||
return formats;
|
||
}, formats);
|
||
}
|
||
|
||
toggleAttribute(name, value) {
|
||
if (value) {
|
||
this.domNode.setAttribute(name, value);
|
||
} else {
|
||
this.domNode.removeAttribute(name);
|
||
}
|
||
}
|
||
|
||
formatChildren(name, value) {
|
||
this.children.forEach(child => {
|
||
child.format(name, value);
|
||
});
|
||
}
|
||
|
||
format(name, value) {
|
||
if (CELL_ATTRIBUTES.indexOf(name) > -1) {
|
||
this.toggleAttribute(name, value);
|
||
this.formatChildren(name, value);
|
||
} else if (['row'].indexOf(name) > -1) {
|
||
this.toggleAttribute("data-".concat(name), value);
|
||
this.formatChildren(name, value);
|
||
} else if (name === 'cell-bg') {
|
||
this.toggleAttribute('data-cell-bg', value);
|
||
this.formatChildren(name, value);
|
||
|
||
if (value) {
|
||
this.domNode.style.backgroundColor = value;
|
||
} else {
|
||
this.domNode.style.backgroundColor = 'initial';
|
||
}
|
||
} else {
|
||
super.format(name, value);
|
||
}
|
||
}
|
||
|
||
optimize(context) {
|
||
const rowId = this.domNode.getAttribute("data-row");
|
||
|
||
if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {
|
||
this.wrap(this.statics.requiredContainer.blotName, {
|
||
row: rowId
|
||
});
|
||
}
|
||
|
||
super.optimize(context);
|
||
}
|
||
|
||
row() {
|
||
return this.parent;
|
||
}
|
||
|
||
rowOffset() {
|
||
if (this.row()) {
|
||
return this.row().rowOffset();
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
table() {
|
||
return this.row() && this.row().table();
|
||
}
|
||
|
||
}
|
||
|
||
TableCell.blotName = "table";
|
||
TableCell.tagName = "TD";
|
||
|
||
class TableRow extends Container {
|
||
checkMerge() {
|
||
if (super.checkMerge() && this.next.children.head != null) {
|
||
const thisHead = this.children.head.formats();
|
||
const thisTail = this.children.tail.formats();
|
||
const nextHead = this.next.children.head.formats();
|
||
const nextTail = this.next.children.tail.formats();
|
||
return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
static create(value) {
|
||
const node = super.create(value);
|
||
node.setAttribute("data-row", value.row);
|
||
return node;
|
||
}
|
||
|
||
formats() {
|
||
return ["row"].reduce((formats, attrName) => {
|
||
if (this.domNode.hasAttribute("data-".concat(attrName))) {
|
||
formats[attrName] = this.domNode.getAttribute("data-".concat(attrName));
|
||
}
|
||
|
||
return formats;
|
||
}, {});
|
||
}
|
||
|
||
optimize(context) {
|
||
// optimize function of ShadowBlot
|
||
if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {
|
||
this.wrap(this.statics.requiredContainer.blotName);
|
||
} // optimize function of ParentBlot
|
||
// note: modified this optimize function because
|
||
// TableRow should not be removed when the length of its children was 0
|
||
|
||
|
||
this.enforceAllowedChildren();
|
||
|
||
if (this.uiNode != null && this.uiNode !== this.domNode.firstChild) {
|
||
this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);
|
||
} // optimize function of ContainerBlot
|
||
|
||
|
||
if (this.children.length > 0 && this.next != null && this.checkMerge()) {
|
||
this.next.moveChildren(this);
|
||
this.next.remove();
|
||
}
|
||
}
|
||
|
||
rowOffset() {
|
||
if (this.parent) {
|
||
return this.parent.children.indexOf(this);
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
table() {
|
||
return this.parent && this.parent.parent;
|
||
}
|
||
|
||
}
|
||
|
||
TableRow.blotName = "table-row";
|
||
TableRow.tagName = "TR";
|
||
|
||
class TableBody extends Container {}
|
||
|
||
TableBody.blotName = "table-body";
|
||
TableBody.tagName = "TBODY";
|
||
|
||
class TableCol extends table_Block {
|
||
static create(value) {
|
||
let node = super.create(value);
|
||
COL_ATTRIBUTES.forEach(attrName => {
|
||
node.setAttribute("".concat(attrName), value[attrName] || COL_DEFAULT[attrName]);
|
||
});
|
||
return node;
|
||
}
|
||
|
||
static formats(domNode) {
|
||
return COL_ATTRIBUTES.reduce((formats, attribute) => {
|
||
if (domNode.hasAttribute("".concat(attribute))) {
|
||
formats[attribute] = domNode.getAttribute("".concat(attribute)) || undefined;
|
||
}
|
||
|
||
return formats;
|
||
}, {});
|
||
}
|
||
|
||
format(name, value) {
|
||
if (COL_ATTRIBUTES.indexOf(name) > -1) {
|
||
this.domNode.setAttribute("".concat(name), value || COL_DEFAULT[name]);
|
||
} else {
|
||
super.format(name, value);
|
||
}
|
||
}
|
||
|
||
html() {
|
||
return this.domNode.outerHTML;
|
||
}
|
||
|
||
}
|
||
|
||
TableCol.blotName = "table-col";
|
||
TableCol.tagName = "col";
|
||
|
||
class TableColGroup extends Container {}
|
||
|
||
TableColGroup.blotName = "table-col-group";
|
||
TableColGroup.tagName = "colgroup";
|
||
|
||
class table_TableContainer extends Container {
|
||
static create() {
|
||
let node = super.create();
|
||
return node;
|
||
}
|
||
|
||
constructor(scroll, domNode) {
|
||
super(scroll, domNode);
|
||
this.updateTableWidth();
|
||
}
|
||
|
||
updateTableWidth() {
|
||
setTimeout(() => {
|
||
const colGroup = this.colGroup();
|
||
if (!colGroup) return;
|
||
const tableWidth = colGroup.children.reduce((sumWidth, col) => {
|
||
sumWidth = sumWidth + parseInt(col.formats()[TableCol.blotName].width, 10);
|
||
return sumWidth;
|
||
}, 0);
|
||
this.domNode.style.width = "".concat(tableWidth, "px");
|
||
}, 0);
|
||
}
|
||
|
||
cells(column) {
|
||
return this.rows().map(row => row.children.at(column));
|
||
}
|
||
|
||
colGroup() {
|
||
return this.children.head;
|
||
}
|
||
|
||
deleteColumns(compareRect) {
|
||
let delIndexes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
||
let editorWrapper = arguments.length > 2 ? arguments[2] : undefined;
|
||
const [body] = this.descendants(TableBody);
|
||
if (body == null || body.children.head == null) return;
|
||
const tableCells = this.descendants(TableCell);
|
||
const removedCells = [];
|
||
const modifiedCells = [];
|
||
tableCells.forEach(cell => {
|
||
const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
|
||
|
||
if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {
|
||
removedCells.push(cell);
|
||
} else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {
|
||
modifiedCells.push(cell);
|
||
}
|
||
});
|
||
|
||
if (removedCells.length === tableCells.length) {
|
||
this.tableDestroy();
|
||
return true;
|
||
} // remove the matches column tool cell
|
||
|
||
|
||
delIndexes.forEach(delIndex => {
|
||
this.colGroup().children.at(delIndexes[0]).remove();
|
||
});
|
||
removedCells.forEach(cell => {
|
||
cell.remove();
|
||
});
|
||
modifiedCells.forEach(cell => {
|
||
const cellColspan = parseInt(cell.formats().colspan, 10);
|
||
const cellWidth = parseInt(cell.formats().width, 10);
|
||
cell.format('colspan', cellColspan - delIndexes.length);
|
||
});
|
||
this.updateTableWidth();
|
||
}
|
||
|
||
deleteRow(compareRect, editorWrapper) {
|
||
const [body] = this.descendants(TableBody);
|
||
if (body == null || body.children.head == null) return;
|
||
const tableCells = this.descendants(TableCell);
|
||
const tableRows = this.descendants(TableRow);
|
||
const removedCells = []; // cells to be removed
|
||
|
||
const modifiedCells = []; // cells to be modified
|
||
|
||
const fallCells = []; // cells to fall into next row
|
||
// compute rows to remove
|
||
// bugfix: #21 There will be a empty tr left if delete the last row of a table
|
||
|
||
const removedRows = tableRows.filter(row => {
|
||
const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper);
|
||
return rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT;
|
||
});
|
||
tableCells.forEach(cell => {
|
||
const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
|
||
|
||
if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {
|
||
removedCells.push(cell);
|
||
} else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {
|
||
modifiedCells.push(cell);
|
||
|
||
if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {
|
||
fallCells.push(cell);
|
||
}
|
||
}
|
||
});
|
||
|
||
if (removedCells.length === tableCells.length) {
|
||
this.tableDestroy();
|
||
return;
|
||
} // compute length of removed rows
|
||
|
||
|
||
const removedRowsLength = this.rows().reduce((sum, row) => {
|
||
let rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper);
|
||
|
||
if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {
|
||
sum += 1;
|
||
}
|
||
|
||
return sum;
|
||
}, 0); // it must excute before the table layout changed with other operation
|
||
|
||
fallCells.forEach(cell => {
|
||
const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
|
||
const nextRow = cell.parent.next;
|
||
const cellsInNextRow = nextRow.children;
|
||
const refCell = cellsInNextRow.reduce((ref, compareCell) => {
|
||
const compareRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper);
|
||
|
||
if (Math.abs(cellRect.x1 - compareRect.x) < ERROR_LIMIT) {
|
||
ref = compareCell;
|
||
}
|
||
|
||
return ref;
|
||
}, null);
|
||
nextRow.insertBefore(cell, refCell);
|
||
cell.format('row', nextRow.formats().row);
|
||
});
|
||
removedCells.forEach(cell => {
|
||
cell.remove();
|
||
});
|
||
modifiedCells.forEach(cell => {
|
||
const cellRowspan = parseInt(cell.formats().rowspan, 10);
|
||
cell.format("rowspan", cellRowspan - removedRowsLength);
|
||
}); // remove selected rows
|
||
|
||
removedRows.forEach(row => row.remove());
|
||
}
|
||
|
||
tableDestroy() {
|
||
const quill = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.scroll.domNode.parentNode);
|
||
const tableModule = quill.getModule("better-table");
|
||
this.remove();
|
||
tableModule.hideTableTools();
|
||
quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
}
|
||
|
||
insertCell(tableRow, ref) {
|
||
const id = table_cellId();
|
||
const rId = tableRow.formats().row;
|
||
const tableCell = this.scroll.create(TableCell.blotName, Object.assign({}, CELL_DEFAULT, {
|
||
row: rId
|
||
}));
|
||
const cellLine = this.scroll.create(TableCellLine.blotName, {
|
||
row: rId,
|
||
cell: id
|
||
});
|
||
tableCell.appendChild(cellLine);
|
||
|
||
if (ref) {
|
||
tableRow.insertBefore(tableCell, ref);
|
||
} else {
|
||
tableRow.appendChild(tableCell);
|
||
}
|
||
}
|
||
|
||
insertColumn(compareRect, colIndex) {
|
||
let isRight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
||
let editorWrapper = arguments.length > 3 ? arguments[3] : undefined;
|
||
const [body] = this.descendants(TableBody);
|
||
const [tableColGroup] = this.descendants(TableColGroup);
|
||
const tableCols = this.descendants(TableCol);
|
||
let addAsideCells = [];
|
||
let modifiedCells = [];
|
||
let affectedCells = [];
|
||
if (body == null || body.children.head == null) return;
|
||
const tableCells = this.descendants(TableCell);
|
||
tableCells.forEach(cell => {
|
||
const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
|
||
|
||
if (isRight) {
|
||
if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {
|
||
// the right of selected boundary equal to the right of table cell,
|
||
// add a new table cell right aside this table cell
|
||
addAsideCells.push(cell);
|
||
} else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {
|
||
// the right of selected boundary is inside this table cell
|
||
// colspan of this table cell will increase 1
|
||
modifiedCells.push(cell);
|
||
}
|
||
} else {
|
||
if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {
|
||
// left of selected boundary equal to left of table cell,
|
||
// add a new table cell left aside this table cell
|
||
addAsideCells.push(cell);
|
||
} else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {
|
||
// the left of selected boundary is inside this table cell
|
||
// colspan of this table cell will increase 1
|
||
modifiedCells.push(cell);
|
||
}
|
||
}
|
||
});
|
||
addAsideCells.forEach(cell => {
|
||
const ref = isRight ? cell.next : cell;
|
||
const id = table_cellId();
|
||
const tableRow = cell.parent;
|
||
const rId = tableRow.formats().row;
|
||
const cellFormats = cell.formats();
|
||
const tableCell = this.scroll.create(TableCell.blotName, Object.assign({}, CELL_DEFAULT, {
|
||
row: rId,
|
||
rowspan: cellFormats.rowspan
|
||
}));
|
||
const cellLine = this.scroll.create(TableCellLine.blotName, {
|
||
row: rId,
|
||
cell: id,
|
||
rowspan: cellFormats.rowspan
|
||
});
|
||
tableCell.appendChild(cellLine);
|
||
|
||
if (ref) {
|
||
tableRow.insertBefore(tableCell, ref);
|
||
} else {
|
||
tableRow.appendChild(tableCell);
|
||
}
|
||
|
||
affectedCells.push(tableCell);
|
||
}); // insert new tableCol
|
||
|
||
const tableCol = this.scroll.create(TableCol.blotName, true);
|
||
let colRef = isRight ? tableCols[colIndex].next : tableCols[colIndex];
|
||
|
||
if (colRef) {
|
||
tableColGroup.insertBefore(tableCol, colRef);
|
||
} else {
|
||
tableColGroup.appendChild(tableCol);
|
||
}
|
||
|
||
modifiedCells.forEach(cell => {
|
||
const cellColspan = cell.formats().colspan;
|
||
cell.format('colspan', parseInt(cellColspan, 10) + 1);
|
||
affectedCells.push(cell);
|
||
});
|
||
affectedCells.sort((cellA, cellB) => {
|
||
let y1 = cellA.domNode.getBoundingClientRect().y;
|
||
let y2 = cellB.domNode.getBoundingClientRect().y;
|
||
return y1 - y2;
|
||
});
|
||
this.updateTableWidth();
|
||
return affectedCells;
|
||
}
|
||
|
||
insertRow(compareRect, isDown, editorWrapper) {
|
||
const [body] = this.descendants(TableBody);
|
||
if (body == null || body.children.head == null) return;
|
||
const tableCells = this.descendants(TableCell);
|
||
const rId = table_rowId();
|
||
const newRow = this.scroll.create(TableRow.blotName, {
|
||
row: rId
|
||
});
|
||
let addBelowCells = [];
|
||
let modifiedCells = [];
|
||
let affectedCells = [];
|
||
tableCells.forEach(cell => {
|
||
const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
|
||
|
||
if (isDown) {
|
||
if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {
|
||
addBelowCells.push(cell);
|
||
} else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {
|
||
modifiedCells.push(cell);
|
||
}
|
||
} else {
|
||
if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {
|
||
addBelowCells.push(cell);
|
||
} else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {
|
||
modifiedCells.push(cell);
|
||
}
|
||
}
|
||
}); // ordered table cells with rect.x, fix error for inserting
|
||
// new table cell in complicated table with wrong order.
|
||
|
||
const sortFunc = (cellA, cellB) => {
|
||
let x1 = cellA.domNode.getBoundingClientRect().x;
|
||
let x2 = cellB.domNode.getBoundingClientRect().x;
|
||
return x1 - x2;
|
||
};
|
||
|
||
addBelowCells.sort(sortFunc);
|
||
addBelowCells.forEach(cell => {
|
||
const cId = table_cellId();
|
||
const cellFormats = cell.formats();
|
||
const tableCell = this.scroll.create(TableCell.blotName, Object.assign({}, CELL_DEFAULT, {
|
||
row: rId,
|
||
colspan: cellFormats.colspan
|
||
}));
|
||
const cellLine = this.scroll.create(TableCellLine.blotName, {
|
||
row: rId,
|
||
cell: cId,
|
||
colspan: cellFormats.colspan
|
||
});
|
||
const empty = this.scroll.create(Break.blotName);
|
||
cellLine.appendChild(empty);
|
||
tableCell.appendChild(cellLine);
|
||
newRow.appendChild(tableCell);
|
||
affectedCells.push(tableCell);
|
||
});
|
||
modifiedCells.forEach(cell => {
|
||
const cellRowspan = parseInt(cell.formats().rowspan, 10);
|
||
cell.format("rowspan", cellRowspan + 1);
|
||
affectedCells.push(cell);
|
||
});
|
||
const refRow = this.rows().find(row => {
|
||
let rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper);
|
||
|
||
if (isDown) {
|
||
return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT;
|
||
} else {
|
||
return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT;
|
||
}
|
||
});
|
||
body.insertBefore(newRow, refRow); // reordering affectedCells
|
||
|
||
affectedCells.sort(sortFunc);
|
||
return affectedCells;
|
||
}
|
||
|
||
mergeCells(compareRect, mergingCells, rowspan, colspan, editorWrapper) {
|
||
const mergedCell = mergingCells.reduce((result, tableCell, index) => {
|
||
if (index !== 0) {
|
||
result && tableCell.moveChildren(result);
|
||
tableCell.remove();
|
||
} else {
|
||
tableCell.format('colspan', colspan);
|
||
tableCell.format('rowspan', rowspan);
|
||
result = tableCell;
|
||
}
|
||
|
||
return result;
|
||
}, null);
|
||
let rowId = mergedCell.domNode.getAttribute('data-row');
|
||
let cellId = mergedCell.children.head.domNode.getAttribute('data-cell');
|
||
mergedCell.children.forEach(cellLine => {
|
||
cellLine.format('cell', cellId);
|
||
cellLine.format('row', rowId);
|
||
cellLine.format('colspan', colspan);
|
||
cellLine.format('rowspan', rowspan);
|
||
});
|
||
return mergedCell;
|
||
}
|
||
|
||
unmergeCells(unmergingCells, editorWrapper) {
|
||
let cellFormats = {};
|
||
let cellRowspan = 1;
|
||
let cellColspan = 1;
|
||
unmergingCells.forEach(tableCell => {
|
||
cellFormats = tableCell.formats();
|
||
cellRowspan = cellFormats.rowspan;
|
||
cellColspan = cellFormats.colspan;
|
||
|
||
if (cellColspan > 1) {
|
||
let ref = tableCell.next;
|
||
let row = tableCell.row();
|
||
tableCell.format('colspan', 1);
|
||
|
||
for (let i = cellColspan; i > 1; i--) {
|
||
this.insertCell(row, ref);
|
||
}
|
||
}
|
||
|
||
if (cellRowspan > 1) {
|
||
let i = cellRowspan;
|
||
let nextRow = tableCell.row().next;
|
||
|
||
while (i > 1) {
|
||
let refInNextRow = nextRow.children.reduce((result, cell) => {
|
||
let compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper);
|
||
let cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
|
||
|
||
if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {
|
||
result = cell;
|
||
}
|
||
|
||
return result;
|
||
}, null);
|
||
|
||
for (let i = cellColspan; i > 0; i--) {
|
||
this.insertCell(nextRow, refInNextRow);
|
||
}
|
||
|
||
i -= 1;
|
||
nextRow = nextRow.next;
|
||
}
|
||
|
||
tableCell.format('rowspan', 1);
|
||
}
|
||
});
|
||
}
|
||
|
||
rows() {
|
||
const body = this.children.tail;
|
||
if (body == null) return [];
|
||
return body.children.map(row => row);
|
||
}
|
||
|
||
}
|
||
|
||
table_TableContainer.blotName = "table-container";
|
||
table_TableContainer.className = "quill-better-table";
|
||
table_TableContainer.tagName = "TABLE";
|
||
|
||
class table_TableViewWrapper extends Container {
|
||
constructor(scroll, domNode) {
|
||
super(scroll, domNode);
|
||
const quill = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(scroll.domNode.parentNode);
|
||
domNode.addEventListener('scroll', e => {
|
||
const tableModule = quill.getModule('better-table');
|
||
|
||
if (tableModule.columnTool) {
|
||
tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft;
|
||
}
|
||
|
||
if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {
|
||
tableModule.tableSelection.repositionHelpLines();
|
||
}
|
||
}, false);
|
||
}
|
||
|
||
table() {
|
||
return this.children.head;
|
||
}
|
||
|
||
}
|
||
|
||
table_TableViewWrapper.blotName = "table-view";
|
||
table_TableViewWrapper.className = "quill-better-table-wrapper";
|
||
table_TableViewWrapper.tagName = "DIV";
|
||
table_TableViewWrapper.allowedChildren = [table_TableContainer];
|
||
table_TableContainer.requiredContainer = table_TableViewWrapper;
|
||
table_TableContainer.allowedChildren = [TableBody, TableColGroup];
|
||
TableBody.requiredContainer = table_TableContainer;
|
||
TableBody.allowedChildren = [TableRow];
|
||
TableRow.requiredContainer = TableBody;
|
||
TableRow.allowedChildren = [TableCell];
|
||
TableCell.requiredContainer = TableRow;
|
||
TableCell.allowedChildren = [TableCellLine, header];
|
||
TableCellLine.requiredContainer = TableCell;
|
||
TableColGroup.allowedChildren = [TableCol];
|
||
TableColGroup.requiredContainer = table_TableContainer;
|
||
TableCol.requiredContainer = TableColGroup;
|
||
|
||
function table_rowId() {
|
||
const id = Math.random().toString(36).slice(2, 6);
|
||
return "row-".concat(id);
|
||
}
|
||
|
||
function table_cellId() {
|
||
const id = Math.random().toString(36).slice(2, 6);
|
||
return "cell-".concat(id);
|
||
}
|
||
|
||
|
||
// CONCATENATED MODULE: ./src/modules/table-selection.js
|
||
|
||
|
||
|
||
const table_selection_PRIMARY_COLOR = '#0589f3';
|
||
const LINE_POSITIONS = ['left', 'right', 'top', 'bottom'];
|
||
const table_selection_ERROR_LIMIT = 2;
|
||
class table_selection_TableSelection {
|
||
constructor(table, quill, options) {
|
||
if (!table) return null;
|
||
this.table = table;
|
||
this.quill = quill;
|
||
this.options = options;
|
||
this.boundary = {}; // params for selected square
|
||
|
||
this.selectedTds = []; // array for selected table-cells
|
||
|
||
this.dragging = false;
|
||
this.selectingHandler = this.mouseDownHandler.bind(this);
|
||
this.clearSelectionHandler = this.clearSelection.bind(this);
|
||
this.helpLinesInitial();
|
||
this.quill.root.addEventListener('mousedown', this.selectingHandler, false);
|
||
this.quill.on('text-change', this.clearSelectionHandler);
|
||
}
|
||
|
||
helpLinesInitial() {
|
||
let parent = this.quill.root.parentNode;
|
||
LINE_POSITIONS.forEach(direction => {
|
||
this[direction] = document.createElement('div');
|
||
this[direction].classList.add('qlbt-selection-line');
|
||
this[direction].classList.add('qlbt-selection-line-' + direction);
|
||
css(this[direction], {
|
||
position: 'absolute',
|
||
display: 'none',
|
||
'background-color': table_selection_PRIMARY_COLOR
|
||
});
|
||
parent.appendChild(this[direction]);
|
||
});
|
||
}
|
||
|
||
mouseDownHandler(e) {
|
||
if (e.button !== 0 || !e.target.closest(".quill-better-table")) return;
|
||
this.quill.root.addEventListener('mousemove', mouseMoveHandler, false);
|
||
this.quill.root.addEventListener('mouseup', mouseUpHandler, false);
|
||
const self = this;
|
||
const startTd = e.target.closest('td[data-row]');
|
||
const startTdRect = getRelativeRect(startTd.getBoundingClientRect(), this.quill.root.parentNode);
|
||
this.dragging = true;
|
||
this.boundary = computeBoundaryFromRects(startTdRect, startTdRect);
|
||
this.correctBoundary();
|
||
this.selectedTds = this.computeSelectedTds();
|
||
this.repositionHelpLines();
|
||
|
||
function mouseMoveHandler(e) {
|
||
if (e.button !== 0 || !e.target.closest(".quill-better-table")) return;
|
||
const endTd = e.target.closest('td[data-row]');
|
||
const endTdRect = getRelativeRect(endTd.getBoundingClientRect(), self.quill.root.parentNode);
|
||
self.boundary = computeBoundaryFromRects(startTdRect, endTdRect);
|
||
self.correctBoundary();
|
||
self.selectedTds = self.computeSelectedTds();
|
||
self.repositionHelpLines(); // avoid select text in multiple table-cell
|
||
|
||
if (startTd !== endTd) {
|
||
self.quill.blur();
|
||
}
|
||
}
|
||
|
||
function mouseUpHandler(e) {
|
||
self.quill.root.removeEventListener('mousemove', mouseMoveHandler, false);
|
||
self.quill.root.removeEventListener('mouseup', mouseUpHandler, false);
|
||
self.dragging = false;
|
||
}
|
||
}
|
||
|
||
correctBoundary() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
const tableCells = tableContainer.descendants(TableCell);
|
||
tableCells.forEach(tableCell => {
|
||
let {
|
||
x,
|
||
y,
|
||
width,
|
||
height
|
||
} = getRelativeRect(tableCell.domNode.getBoundingClientRect(), this.quill.root.parentNode);
|
||
let isCellIntersected = (x + table_selection_ERROR_LIMIT >= this.boundary.x && x + table_selection_ERROR_LIMIT <= this.boundary.x1 || x - table_selection_ERROR_LIMIT + width >= this.boundary.x && x - table_selection_ERROR_LIMIT + width <= this.boundary.x1) && (y + table_selection_ERROR_LIMIT >= this.boundary.y && y + table_selection_ERROR_LIMIT <= this.boundary.y1 || y - table_selection_ERROR_LIMIT + height >= this.boundary.y && y - table_selection_ERROR_LIMIT + height <= this.boundary.y1);
|
||
|
||
if (isCellIntersected) {
|
||
this.boundary = computeBoundaryFromRects(this.boundary, {
|
||
x,
|
||
y,
|
||
width,
|
||
height
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
computeSelectedTds() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
const tableCells = tableContainer.descendants(TableCell);
|
||
return tableCells.reduce((selectedCells, tableCell) => {
|
||
let {
|
||
x,
|
||
y,
|
||
width,
|
||
height
|
||
} = getRelativeRect(tableCell.domNode.getBoundingClientRect(), this.quill.root.parentNode);
|
||
let isCellIncluded = x + table_selection_ERROR_LIMIT >= this.boundary.x && x - table_selection_ERROR_LIMIT + width <= this.boundary.x1 && y + table_selection_ERROR_LIMIT >= this.boundary.y && y - table_selection_ERROR_LIMIT + height <= this.boundary.y1;
|
||
|
||
if (isCellIncluded) {
|
||
selectedCells.push(tableCell);
|
||
}
|
||
|
||
return selectedCells;
|
||
}, []);
|
||
}
|
||
|
||
repositionHelpLines() {
|
||
const tableViewScrollLeft = this.table.parentNode.scrollLeft;
|
||
css(this.left, {
|
||
display: 'block',
|
||
left: "".concat(this.boundary.x - tableViewScrollLeft - 1, "px"),
|
||
top: "".concat(this.boundary.y, "px"),
|
||
height: "".concat(this.boundary.height + 1, "px"),
|
||
width: '1px'
|
||
});
|
||
css(this.right, {
|
||
display: 'block',
|
||
left: "".concat(this.boundary.x1 - tableViewScrollLeft, "px"),
|
||
top: "".concat(this.boundary.y, "px"),
|
||
height: "".concat(this.boundary.height + 1, "px"),
|
||
width: '1px'
|
||
});
|
||
css(this.top, {
|
||
display: 'block',
|
||
left: "".concat(this.boundary.x - 1 - tableViewScrollLeft, "px"),
|
||
top: "".concat(this.boundary.y, "px"),
|
||
width: "".concat(this.boundary.width + 1, "px"),
|
||
height: '1px'
|
||
});
|
||
css(this.bottom, {
|
||
display: 'block',
|
||
left: "".concat(this.boundary.x - 1 - tableViewScrollLeft, "px"),
|
||
top: "".concat(this.boundary.y1 + 1, "px"),
|
||
width: "".concat(this.boundary.width + 1, "px"),
|
||
height: '1px'
|
||
});
|
||
} // based on selectedTds compute positions of help lines
|
||
// It is useful when selectedTds are not changed
|
||
|
||
|
||
refreshHelpLinesPosition() {
|
||
const startRect = getRelativeRect(this.selectedTds[0].domNode.getBoundingClientRect(), this.quill.root.parentNode);
|
||
const endRect = getRelativeRect(this.selectedTds[this.selectedTds.length - 1].domNode.getBoundingClientRect(), this.quill.root.parentNode);
|
||
this.boundary = computeBoundaryFromRects(startRect, endRect);
|
||
this.repositionHelpLines();
|
||
}
|
||
|
||
destroy() {
|
||
LINE_POSITIONS.forEach(direction => {
|
||
this[direction].remove();
|
||
this[direction] = null;
|
||
});
|
||
this.quill.root.removeEventListener('mousedown', this.selectingHandler, false);
|
||
this.quill.off('text-change', this.clearSelectionHandler);
|
||
return null;
|
||
}
|
||
|
||
setSelection(startRect, endRect) {
|
||
this.boundary = computeBoundaryFromRects(getRelativeRect(startRect, this.quill.root.parentNode), getRelativeRect(endRect, this.quill.root.parentNode));
|
||
this.correctBoundary();
|
||
this.selectedTds = this.computeSelectedTds();
|
||
this.repositionHelpLines();
|
||
}
|
||
|
||
clearSelection() {
|
||
this.boundary = {};
|
||
this.selectedTds = [];
|
||
LINE_POSITIONS.forEach(direction => {
|
||
this[direction] && css(this[direction], {
|
||
display: 'none'
|
||
});
|
||
});
|
||
}
|
||
|
||
}
|
||
|
||
function computeBoundaryFromRects(startRect, endRect) {
|
||
let x = Math.min(startRect.x, endRect.x, startRect.x + startRect.width - 1, endRect.x + endRect.width - 1);
|
||
let x1 = Math.max(startRect.x, endRect.x, startRect.x + startRect.width - 1, endRect.x + endRect.width - 1);
|
||
let y = Math.min(startRect.y, endRect.y, startRect.y + startRect.height - 1, endRect.y + endRect.height - 1);
|
||
let y1 = Math.max(startRect.y, endRect.y, startRect.y + startRect.height - 1, endRect.y + endRect.height - 1);
|
||
let width = x1 - x;
|
||
let height = y1 - y;
|
||
return {
|
||
x,
|
||
x1,
|
||
y,
|
||
y1,
|
||
width,
|
||
height
|
||
};
|
||
}
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_1.svg
|
||
var icon_operation_1 = __webpack_require__(1);
|
||
var icon_operation_1_default = /*#__PURE__*/__webpack_require__.n(icon_operation_1);
|
||
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_2.svg
|
||
var icon_operation_2 = __webpack_require__(2);
|
||
var icon_operation_2_default = /*#__PURE__*/__webpack_require__.n(icon_operation_2);
|
||
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_3.svg
|
||
var icon_operation_3 = __webpack_require__(3);
|
||
var icon_operation_3_default = /*#__PURE__*/__webpack_require__.n(icon_operation_3);
|
||
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_4.svg
|
||
var icon_operation_4 = __webpack_require__(4);
|
||
var icon_operation_4_default = /*#__PURE__*/__webpack_require__.n(icon_operation_4);
|
||
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_5.svg
|
||
var icon_operation_5 = __webpack_require__(5);
|
||
var icon_operation_5_default = /*#__PURE__*/__webpack_require__.n(icon_operation_5);
|
||
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_6.svg
|
||
var icon_operation_6 = __webpack_require__(6);
|
||
var icon_operation_6_default = /*#__PURE__*/__webpack_require__.n(icon_operation_6);
|
||
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_7.svg
|
||
var icon_operation_7 = __webpack_require__(7);
|
||
var icon_operation_7_default = /*#__PURE__*/__webpack_require__.n(icon_operation_7);
|
||
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_8.svg
|
||
var icon_operation_8 = __webpack_require__(8);
|
||
var icon_operation_8_default = /*#__PURE__*/__webpack_require__.n(icon_operation_8);
|
||
|
||
// EXTERNAL MODULE: ./src/assets/icons/icon_operation_9.svg
|
||
var icon_operation_9 = __webpack_require__(9);
|
||
var icon_operation_9_default = /*#__PURE__*/__webpack_require__.n(icon_operation_9);
|
||
|
||
// CONCATENATED MODULE: ./src/modules/table-operation-menu.js
|
||
|
||
// svg icons
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const MENU_MIN_HEIHGT = 150;
|
||
const MENU_WIDTH = 200;
|
||
const table_operation_menu_ERROR_LIMIT = 5;
|
||
const DEFAULT_CELL_COLORS = ['white', 'red', 'yellow', 'blue'];
|
||
const DEFAULT_COLOR_SUBTITLE = 'Background Colors';
|
||
const MENU_ITEMS_DEFAULT = {
|
||
insertColumnRight: {
|
||
text: 'Insert column right',
|
||
iconSrc: icon_operation_1_default.a,
|
||
|
||
handler() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
let colIndex = getColToolCellIndexByBoundary(this.columnToolCells, this.boundary, (cellRect, boundary) => {
|
||
return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= table_operation_menu_ERROR_LIMIT;
|
||
}, this.quill.root.parentNode);
|
||
const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode);
|
||
this.tableColumnTool.updateToolCells();
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.quill.setSelection(this.quill.getIndex(newColumn[0]), 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.SILENT);
|
||
this.tableSelection.setSelection(newColumn[0].domNode.getBoundingClientRect(), newColumn[0].domNode.getBoundingClientRect());
|
||
}
|
||
|
||
},
|
||
insertColumnLeft: {
|
||
text: 'Insert column left',
|
||
iconSrc: icon_operation_2_default.a,
|
||
|
||
handler() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
let colIndex = getColToolCellIndexByBoundary(this.columnToolCells, this.boundary, (cellRect, boundary) => {
|
||
return Math.abs(cellRect.x - boundary.x) <= table_operation_menu_ERROR_LIMIT;
|
||
}, this.quill.root.parentNode);
|
||
const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode);
|
||
this.tableColumnTool.updateToolCells();
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.quill.setSelection(this.quill.getIndex(newColumn[0]), 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.SILENT);
|
||
this.tableSelection.setSelection(newColumn[0].domNode.getBoundingClientRect(), newColumn[0].domNode.getBoundingClientRect());
|
||
}
|
||
|
||
},
|
||
insertRowUp: {
|
||
text: 'Insert row up',
|
||
iconSrc: icon_operation_3_default.a,
|
||
|
||
handler() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode);
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.quill.setSelection(this.quill.getIndex(affectedCells[0]), 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.SILENT);
|
||
this.tableSelection.setSelection(affectedCells[0].domNode.getBoundingClientRect(), affectedCells[0].domNode.getBoundingClientRect());
|
||
}
|
||
|
||
},
|
||
insertRowDown: {
|
||
text: 'Insert row down',
|
||
iconSrc: icon_operation_4_default.a,
|
||
|
||
handler() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode);
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.quill.setSelection(this.quill.getIndex(affectedCells[0]), 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.SILENT);
|
||
this.tableSelection.setSelection(affectedCells[0].domNode.getBoundingClientRect(), affectedCells[0].domNode.getBoundingClientRect());
|
||
}
|
||
|
||
},
|
||
mergeCells: {
|
||
text: 'Merge selected cells',
|
||
iconSrc: icon_operation_5_default.a,
|
||
|
||
handler() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table); // compute merged Cell rowspan, equal to length of selected rows
|
||
|
||
const rowspan = tableContainer.rows().reduce((sum, row) => {
|
||
let rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode);
|
||
|
||
if (rowRect.y > this.boundary.y - table_operation_menu_ERROR_LIMIT && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + table_operation_menu_ERROR_LIMIT) {
|
||
sum += 1;
|
||
}
|
||
|
||
return sum;
|
||
}, 0); // compute merged cell colspan, equal to length of selected cols
|
||
|
||
const colspan = this.columnToolCells.reduce((sum, cell) => {
|
||
let cellRect = getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode);
|
||
|
||
if (cellRect.x > this.boundary.x - table_operation_menu_ERROR_LIMIT && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + table_operation_menu_ERROR_LIMIT) {
|
||
sum += 1;
|
||
}
|
||
|
||
return sum;
|
||
}, 0);
|
||
const mergedCell = tableContainer.mergeCells(this.boundary, this.selectedTds, rowspan, colspan, this.quill.root.parentNode);
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.tableSelection.setSelection(mergedCell.domNode.getBoundingClientRect(), mergedCell.domNode.getBoundingClientRect());
|
||
}
|
||
|
||
},
|
||
unmergeCells: {
|
||
text: 'Unmerge cells',
|
||
iconSrc: icon_operation_6_default.a,
|
||
|
||
handler() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode);
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.tableSelection.clearSelection();
|
||
}
|
||
|
||
},
|
||
deleteColumn: {
|
||
text: 'Delete selected columns',
|
||
iconSrc: icon_operation_7_default.a,
|
||
|
||
handler() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
let colIndexes = getColToolCellIndexesByBoundary(this.columnToolCells, this.boundary, (cellRect, boundary) => {
|
||
return cellRect.x + table_operation_menu_ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - table_operation_menu_ERROR_LIMIT < boundary.x1;
|
||
}, this.quill.root.parentNode);
|
||
let isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode);
|
||
|
||
if (!isDeleteTable) {
|
||
this.tableColumnTool.updateToolCells();
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.tableSelection.clearSelection();
|
||
}
|
||
}
|
||
|
||
},
|
||
deleteRow: {
|
||
text: 'Delete selected rows',
|
||
iconSrc: icon_operation_8_default.a,
|
||
|
||
handler() {
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
tableContainer.deleteRow(this.boundary, this.quill.root.parentNode);
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.tableSelection.clearSelection();
|
||
}
|
||
|
||
},
|
||
deleteTable: {
|
||
text: 'Delete table',
|
||
iconSrc: icon_operation_9_default.a,
|
||
|
||
handler() {
|
||
const betterTableModule = this.quill.getModule('better-table');
|
||
const tableContainer = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.find(this.table);
|
||
betterTableModule.hideTableTools();
|
||
tableContainer.remove();
|
||
this.quill.update(external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
}
|
||
|
||
}
|
||
};
|
||
class table_operation_menu_TableOperationMenu {
|
||
constructor(params, quill, options) {
|
||
const betterTableModule = quill.getModule('better-table');
|
||
this.tableSelection = betterTableModule.tableSelection;
|
||
this.table = params.table;
|
||
this.quill = quill;
|
||
this.options = options;
|
||
this.menuItems = Object.assign({}, MENU_ITEMS_DEFAULT, options.items);
|
||
this.tableColumnTool = betterTableModule.columnTool;
|
||
this.boundary = this.tableSelection.boundary;
|
||
this.selectedTds = this.tableSelection.selectedTds;
|
||
this.destroyHandler = this.destroy.bind(this);
|
||
this.columnToolCells = this.tableColumnTool.colToolCells();
|
||
this.colorSubTitle = options.color && options.color.text ? options.color.text : DEFAULT_COLOR_SUBTITLE;
|
||
this.cellColors = options.color && options.color.colors ? options.color.colors : DEFAULT_CELL_COLORS;
|
||
this.menuInitial(params);
|
||
this.mount();
|
||
document.addEventListener("click", this.destroyHandler, false);
|
||
}
|
||
|
||
mount() {
|
||
document.body.appendChild(this.domNode);
|
||
}
|
||
|
||
destroy() {
|
||
this.domNode.remove();
|
||
document.removeEventListener("click", this.destroyHandler, false);
|
||
return null;
|
||
}
|
||
|
||
menuInitial(_ref) {
|
||
let {
|
||
table,
|
||
left,
|
||
top
|
||
} = _ref;
|
||
this.domNode = document.createElement('div');
|
||
this.domNode.classList.add('qlbt-operation-menu');
|
||
css(this.domNode, {
|
||
position: 'absolute',
|
||
left: "".concat(left, "px"),
|
||
top: "".concat(top, "px"),
|
||
'min-height': "".concat(MENU_MIN_HEIHGT, "px"),
|
||
width: "".concat(MENU_WIDTH, "px")
|
||
});
|
||
|
||
for (let name in this.menuItems) {
|
||
if (this.menuItems[name]) {
|
||
this.domNode.appendChild(this.menuItemCreator(Object.assign({}, MENU_ITEMS_DEFAULT[name], this.menuItems[name])));
|
||
|
||
if (['insertRowDown', 'unmergeCells'].indexOf(name) > -1) {
|
||
this.domNode.appendChild(dividingCreator());
|
||
}
|
||
}
|
||
} // if colors option is false, disabled bg color
|
||
|
||
|
||
if (this.options.color && this.options.color !== false) {
|
||
this.domNode.appendChild(dividingCreator());
|
||
this.domNode.appendChild(subTitleCreator(this.colorSubTitle));
|
||
this.domNode.appendChild(this.colorsItemCreator(this.cellColors));
|
||
} // create dividing line
|
||
|
||
|
||
function dividingCreator() {
|
||
const dividing = document.createElement('div');
|
||
dividing.classList.add('qlbt-operation-menu-dividing');
|
||
return dividing;
|
||
} // create subtitle for menu
|
||
|
||
|
||
function subTitleCreator(title) {
|
||
const subTitle = document.createElement('div');
|
||
subTitle.classList.add('qlbt-operation-menu-subtitle');
|
||
subTitle.innerText = title;
|
||
return subTitle;
|
||
}
|
||
}
|
||
|
||
colorsItemCreator(colors) {
|
||
const self = this;
|
||
const node = document.createElement('div');
|
||
node.classList.add('qlbt-operation-color-picker');
|
||
colors.forEach(color => {
|
||
let colorBox = colorBoxCreator(color);
|
||
node.appendChild(colorBox);
|
||
});
|
||
|
||
function colorBoxCreator(color) {
|
||
const box = document.createElement('div');
|
||
box.classList.add('qlbt-operation-color-picker-item');
|
||
box.setAttribute('data-color', color);
|
||
box.style.backgroundColor = color;
|
||
box.addEventListener('click', function () {
|
||
const selectedTds = self.tableSelection.selectedTds;
|
||
|
||
if (selectedTds && selectedTds.length > 0) {
|
||
selectedTds.forEach(tableCell => {
|
||
tableCell.format('cell-bg', color);
|
||
});
|
||
}
|
||
}, false);
|
||
return box;
|
||
}
|
||
|
||
return node;
|
||
}
|
||
|
||
menuItemCreator(_ref2) {
|
||
let {
|
||
text,
|
||
iconSrc,
|
||
handler
|
||
} = _ref2;
|
||
const node = document.createElement('div');
|
||
node.classList.add('qlbt-operation-menu-item');
|
||
const iconSpan = document.createElement('span');
|
||
iconSpan.classList.add('qlbt-operation-menu-icon');
|
||
iconSpan.innerHTML = iconSrc;
|
||
const textSpan = document.createElement('span');
|
||
textSpan.classList.add('qlbt-operation-menu-text');
|
||
textSpan.innerText = text;
|
||
node.appendChild(iconSpan);
|
||
node.appendChild(textSpan);
|
||
node.addEventListener('click', handler.bind(this), false);
|
||
return node;
|
||
}
|
||
|
||
}
|
||
|
||
function getColToolCellIndexByBoundary(cells, boundary, conditionFn, container) {
|
||
return cells.reduce((findIndex, cell) => {
|
||
let cellRect = getRelativeRect(cell.getBoundingClientRect(), container);
|
||
|
||
if (conditionFn(cellRect, boundary)) {
|
||
findIndex = cells.indexOf(cell);
|
||
}
|
||
|
||
return findIndex;
|
||
}, false);
|
||
}
|
||
|
||
function getColToolCellIndexesByBoundary(cells, boundary, conditionFn, container) {
|
||
return cells.reduce((findIndexes, cell) => {
|
||
let cellRect = getRelativeRect(cell.getBoundingClientRect(), container);
|
||
|
||
if (conditionFn(cellRect, boundary)) {
|
||
findIndexes.push(cells.indexOf(cell));
|
||
}
|
||
|
||
return findIndexes;
|
||
}, []);
|
||
}
|
||
// CONCATENATED MODULE: ./src/utils/node-matchers.js
|
||
|
||
|
||
const Delta = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.import('delta'); // rebuild delta
|
||
|
||
function matchTableCell(node, delta, scroll) {
|
||
const row = node.parentNode;
|
||
const table = row.parentNode.tagName === 'TABLE' ? row.parentNode : row.parentNode.parentNode;
|
||
const rows = Array.from(table.querySelectorAll('tr'));
|
||
const cells = Array.from(row.querySelectorAll('td'));
|
||
const rowId = rows.indexOf(row) + 1;
|
||
const cellId = cells.indexOf(node) + 1;
|
||
const colspan = node.getAttribute('colspan') || false;
|
||
const rowspan = node.getAttribute('rowspan') || false;
|
||
const cellBg = node.getAttribute('data-cell-bg') || node.style.backgroundColor; // The td from external table has no 'data-cell-bg'
|
||
// bugfix: empty table cells copied from other place will be removed unexpectedly
|
||
|
||
if (delta.length() === 0) {
|
||
delta = new Delta().insert('\n', {
|
||
'table-cell-line': {
|
||
row: rowId,
|
||
cell: cellId,
|
||
rowspan,
|
||
colspan
|
||
}
|
||
});
|
||
return delta;
|
||
}
|
||
|
||
delta = delta.reduce((newDelta, op) => {
|
||
if (op.insert && typeof op.insert === 'string') {
|
||
const lines = [];
|
||
let insertStr = op.insert;
|
||
let start = 0;
|
||
|
||
for (let i = 0; i < op.insert.length; i++) {
|
||
if (insertStr.charAt(i) === '\n') {
|
||
if (i === 0) {
|
||
lines.push('\n');
|
||
} else {
|
||
lines.push(insertStr.substring(start, i));
|
||
lines.push('\n');
|
||
}
|
||
|
||
start = i + 1;
|
||
}
|
||
}
|
||
|
||
const tailStr = insertStr.substring(start);
|
||
if (tailStr) lines.push(tailStr);
|
||
lines.forEach(text => {
|
||
text === '\n' ? newDelta.insert('\n', op.attributes) : newDelta.insert(text, _omit(op.attributes, ['table', 'table-cell-line']));
|
||
});
|
||
} else {
|
||
newDelta.insert(op.insert, op.attributes);
|
||
}
|
||
|
||
return newDelta;
|
||
}, new Delta());
|
||
return delta.reduce((newDelta, op) => {
|
||
if (op.insert && typeof op.insert === 'string' && op.insert.startsWith('\n')) {
|
||
newDelta.insert(op.insert, Object.assign({}, Object.assign({}, {
|
||
row: rowId
|
||
}, op.attributes.table), {
|
||
'table-cell-line': {
|
||
row: rowId,
|
||
cell: cellId,
|
||
rowspan,
|
||
colspan,
|
||
'cell-bg': cellBg
|
||
}
|
||
}, _omit(op.attributes, ['table'])));
|
||
} else {
|
||
// bugfix: remove background attr from the delta of table cell
|
||
// to prevent unexcepted background attr append.
|
||
if (op.attributes && op.attributes.background && op.attributes.background === convertToHex(cellBg)) {
|
||
newDelta.insert(op.insert, Object.assign({}, _omit(op.attributes, ['table', 'table-cell-line', 'background'])));
|
||
} else {
|
||
newDelta.insert(op.insert, Object.assign({}, _omit(op.attributes, ['table', 'table-cell-line'])));
|
||
}
|
||
}
|
||
|
||
return newDelta;
|
||
}, new Delta());
|
||
} // replace th tag with td tag
|
||
|
||
function matchTableHeader(node, delta, scroll) {
|
||
const row = node.parentNode;
|
||
const table = row.parentNode.tagName === 'TABLE' ? row.parentNode : row.parentNode.parentNode;
|
||
const rows = Array.from(table.querySelectorAll('tr'));
|
||
const cells = Array.from(row.querySelectorAll('th'));
|
||
const rowId = rows.indexOf(row) + 1;
|
||
const cellId = cells.indexOf(node) + 1;
|
||
const colspan = node.getAttribute('colspan') || false;
|
||
const rowspan = node.getAttribute('rowspan') || false; // bugfix: empty table cells copied from other place will be removed unexpectedly
|
||
|
||
if (delta.length() === 0) {
|
||
delta = new Delta().insert('\n', {
|
||
'table-cell-line': {
|
||
row: rowId,
|
||
cell: cellId,
|
||
rowspan,
|
||
colspan
|
||
}
|
||
});
|
||
return delta;
|
||
}
|
||
|
||
delta = delta.reduce((newDelta, op) => {
|
||
if (op.insert && typeof op.insert === 'string') {
|
||
const lines = [];
|
||
let insertStr = op.insert;
|
||
let start = 0;
|
||
|
||
for (let i = 0; i < op.insert.length; i++) {
|
||
if (insertStr.charAt(i) === '\n') {
|
||
if (i === 0) {
|
||
lines.push('\n');
|
||
} else {
|
||
lines.push(insertStr.substring(start, i));
|
||
lines.push('\n');
|
||
}
|
||
|
||
start = i + 1;
|
||
}
|
||
}
|
||
|
||
const tailStr = insertStr.substring(start);
|
||
if (tailStr) lines.push(tailStr); // bugfix: no '\n' in op.insert, push a '\n' to lines
|
||
|
||
if (lines.indexOf('\n') < 0) {
|
||
lines.push('\n');
|
||
}
|
||
|
||
lines.forEach(text => {
|
||
text === '\n' ? newDelta.insert('\n', {
|
||
'table-cell-line': {
|
||
row: rowId,
|
||
cell: cellId,
|
||
rowspan,
|
||
colspan
|
||
}
|
||
}) : newDelta.insert(text, op.attributes);
|
||
});
|
||
} else {
|
||
newDelta.insert(op.insert, op.attributes);
|
||
}
|
||
|
||
return newDelta;
|
||
}, new Delta());
|
||
return delta.reduce((newDelta, op) => {
|
||
if (op.insert && typeof op.insert === 'string' && op.insert.startsWith('\n')) {
|
||
newDelta.insert(op.insert, Object.assign({}, {
|
||
'table-cell-line': {
|
||
row: rowId,
|
||
cell: cellId,
|
||
rowspan,
|
||
colspan
|
||
}
|
||
}));
|
||
} else {
|
||
newDelta.insert(op.insert, Object.assign({}, _omit(op.attributes, ['table', 'table-cell-line'])));
|
||
}
|
||
|
||
return newDelta;
|
||
}, new Delta());
|
||
} // supplement colgroup and col
|
||
|
||
function matchTable(node, delta, scroll) {
|
||
let newColDelta = new Delta();
|
||
const topRow = node.querySelector('tr'); // bugfix: empty table will return empty delta
|
||
|
||
if (topRow === null) return newColDelta;
|
||
const cellsInTopRow = Array.from(topRow.querySelectorAll('td')).concat(Array.from(topRow.querySelectorAll('th')));
|
||
const maxCellsNumber = cellsInTopRow.reduce((sum, cell) => {
|
||
const cellColspan = cell.getAttribute('colspan') || 1;
|
||
sum = sum + parseInt(cellColspan, 10);
|
||
return sum;
|
||
}, 0);
|
||
const colsNumber = node.querySelectorAll('col').length; // issue #2
|
||
// bugfix: the table copied from Excel had some default col tags missing
|
||
// add missing col tags
|
||
|
||
if (colsNumber === maxCellsNumber) {
|
||
return delta;
|
||
} else {
|
||
for (let i = 0; i < maxCellsNumber - colsNumber; i++) {
|
||
newColDelta.insert('\n', {
|
||
'table-col': true
|
||
});
|
||
}
|
||
|
||
if (colsNumber === 0) return newColDelta.concat(delta);
|
||
let lastNumber = 0;
|
||
return delta.reduce((finalDelta, op) => {
|
||
finalDelta.insert(op.insert, op.attributes);
|
||
|
||
if (op.attributes && op.attributes['table-col']) {
|
||
lastNumber += op.insert.length;
|
||
|
||
if (lastNumber === colsNumber) {
|
||
finalDelta = finalDelta.concat(newColDelta);
|
||
}
|
||
}
|
||
|
||
return finalDelta;
|
||
}, new Delta());
|
||
}
|
||
}
|
||
// CONCATENATED MODULE: ./src/quill-better-table.js
|
||
|
||
|
||
|
||
// import table node matchers
|
||
|
||
|
||
|
||
const Module = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.import('core/module');
|
||
const quill_better_table_Delta = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.import('delta');
|
||
|
||
|
||
class quill_better_table_BetterTable extends Module {
|
||
static register() {
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(TableCol, true);
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(TableColGroup, true);
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(TableCellLine, true);
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(TableCell, true);
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(TableRow, true);
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(TableBody, true);
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(table_TableContainer, true);
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(table_TableViewWrapper, true);
|
||
external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.register(table_TableViewWrapper, true); // register customized Header,overwriting quill built-in Header
|
||
// Quill.register('formats/header', Header, true);
|
||
}
|
||
|
||
constructor(quill, options) {
|
||
super(quill, options); // handle click on quill-better-table
|
||
|
||
this.quill.root.addEventListener('click', evt => {
|
||
// bugfix: evt.path is undefined in Safari, FF, Micro Edge
|
||
const path = getEventComposedPath(evt);
|
||
if (!path || path.length <= 0) return;
|
||
const tableNode = path.filter(node => {
|
||
return node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table');
|
||
})[0];
|
||
|
||
if (tableNode) {
|
||
// current table clicked
|
||
if (this.table === tableNode) return; // other table clicked
|
||
|
||
if (this.table) this.hideTableTools();
|
||
this.showTableTools(tableNode, quill, options);
|
||
} else if (this.table) {
|
||
// other clicked
|
||
this.hideTableTools();
|
||
}
|
||
}, false); // handle right click on quill-better-table
|
||
|
||
this.quill.root.addEventListener('contextmenu', evt => {
|
||
if (!this.table) return true;
|
||
evt.preventDefault(); // bugfix: evt.path is undefined in Safari, FF, Micro Edge
|
||
|
||
const path = getEventComposedPath(evt);
|
||
if (!path || path.length <= 0) return;
|
||
const tableNode = path.filter(node => {
|
||
return node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table');
|
||
})[0];
|
||
const rowNode = path.filter(node => {
|
||
return node.tagName && node.tagName.toUpperCase() === 'TR' && node.getAttribute('data-row');
|
||
})[0];
|
||
const cellNode = path.filter(node => {
|
||
return node.tagName && node.tagName.toUpperCase() === 'TD' && node.getAttribute('data-row');
|
||
})[0];
|
||
let isTargetCellSelected = this.tableSelection.selectedTds.map(tableCell => tableCell.domNode).includes(cellNode);
|
||
|
||
if (this.tableSelection.selectedTds.length <= 0 || !isTargetCellSelected) {
|
||
this.tableSelection.setSelection(cellNode.getBoundingClientRect(), cellNode.getBoundingClientRect());
|
||
}
|
||
|
||
if (this.tableOperationMenu) this.tableOperationMenu = this.tableOperationMenu.destroy();
|
||
|
||
if (tableNode) {
|
||
this.tableOperationMenu = new table_operation_menu_TableOperationMenu({
|
||
table: tableNode,
|
||
row: rowNode,
|
||
cell: cellNode,
|
||
left: evt.pageX,
|
||
top: evt.pageY
|
||
}, quill, options.operationMenu);
|
||
}
|
||
}, false); // add keyboard binding:Backspace
|
||
// prevent user hits backspace to delete table cell
|
||
|
||
const KeyBoard = quill.getModule('keyboard');
|
||
quill.keyboard.addBinding({
|
||
key: 'Backspace'
|
||
}, {}, function (range, context) {
|
||
if (range.index === 0 || this.quill.getLength() <= 1) return true;
|
||
const [line] = this.quill.getLine(range.index);
|
||
|
||
if (context.offset === 0) {
|
||
const [prev] = this.quill.getLine(range.index - 1);
|
||
|
||
if (prev != null) {
|
||
if (prev.statics.blotName === 'table-cell-line' && line.statics.blotName !== 'table-cell-line') return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}); // since only one matched bindings callback will excute.
|
||
// expected my binding callback excute first
|
||
// I changed the order of binding callbacks
|
||
|
||
let thisBinding = quill.keyboard.bindings['Backspace'].pop();
|
||
quill.keyboard.bindings['Backspace'].splice(0, 1, thisBinding); // add Matchers to match and render quill-better-table for initialization
|
||
// or pasting
|
||
|
||
quill.clipboard.addMatcher('td', matchTableCell);
|
||
quill.clipboard.addMatcher('th', matchTableHeader);
|
||
quill.clipboard.addMatcher('table', matchTable); // quill.clipboard.addMatcher('h1, h2, h3, h4, h5, h6', matchHeader)
|
||
// remove matcher for tr tag
|
||
|
||
quill.clipboard.matchers = quill.clipboard.matchers.filter(matcher => {
|
||
return matcher[0] !== 'tr';
|
||
});
|
||
}
|
||
|
||
getTable() {
|
||
let range = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.quill.getSelection();
|
||
if (range == null) return [null, null, null, -1];
|
||
const [cellLine, offset] = this.quill.getLine(range.index);
|
||
|
||
if (cellLine == null || cellLine.statics.blotName !== TableCellLine.blotName) {
|
||
return [null, null, null, -1];
|
||
}
|
||
|
||
const cell = cellLine.tableCell();
|
||
const row = cell.row();
|
||
const table = row.table();
|
||
return [table, row, cell, offset];
|
||
}
|
||
|
||
insertTable(rows, columns) {
|
||
const range = this.quill.getSelection(true);
|
||
if (range == null) return;
|
||
let currentBlot = this.quill.getLeaf(range.index)[0];
|
||
let delta = new quill_better_table_Delta().retain(range.index);
|
||
|
||
if (isInTableCell(currentBlot)) {
|
||
console.warn("Can not insert table into a table cell.");
|
||
return;
|
||
}
|
||
|
||
delta.insert('\n'); // insert table column
|
||
|
||
delta = new Array(columns).fill('\n').reduce((memo, text) => {
|
||
memo.insert(text, {
|
||
'table-col': true
|
||
});
|
||
return memo;
|
||
}, delta); // insert table cell line with empty line
|
||
|
||
delta = new Array(rows).fill(0).reduce(memo => {
|
||
let tableRowId = table_rowId();
|
||
return new Array(columns).fill('\n').reduce((memo, text) => {
|
||
memo.insert(text, {
|
||
'table-cell-line': {
|
||
row: tableRowId,
|
||
cell: table_cellId()
|
||
}
|
||
});
|
||
return memo;
|
||
}, memo);
|
||
}, delta);
|
||
this.quill.updateContents(delta, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
this.quill.setSelection(range.index + columns + 1, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.API);
|
||
}
|
||
|
||
showTableTools(table, quill, options) {
|
||
this.table = table;
|
||
this.columnTool = new table_column_tool_TableColumnTool(table, quill, options);
|
||
this.tableSelection = new table_selection_TableSelection(table, quill, options);
|
||
}
|
||
|
||
hideTableTools() {
|
||
this.columnTool && this.columnTool.destroy();
|
||
this.tableSelection && this.tableSelection.destroy();
|
||
this.tableOperationMenu && this.tableOperationMenu.destroy();
|
||
this.columnTool = null;
|
||
this.tableSelection = null;
|
||
this.tableOperationMenu = null;
|
||
this.table = null;
|
||
}
|
||
|
||
}
|
||
|
||
quill_better_table_BetterTable.keyboardBindings = {
|
||
'table-cell-line backspace': {
|
||
key: 'Backspace',
|
||
format: ['table-cell-line'],
|
||
collapsed: true,
|
||
offset: 0,
|
||
|
||
handler(range, context) {
|
||
const [line, offset] = this.quill.getLine(range.index);
|
||
|
||
if (!line.prev || line.prev.statics.blotName !== 'table-cell-line') {
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
},
|
||
'table-cell-line delete': {
|
||
key: 'Delete',
|
||
format: ['table-cell-line'],
|
||
collapsed: true,
|
||
suffix: /^$/,
|
||
|
||
handler() {}
|
||
|
||
},
|
||
'table-cell-line enter': {
|
||
key: 'Enter',
|
||
shiftKey: null,
|
||
format: ['table-cell-line'],
|
||
|
||
handler(range, context) {
|
||
// bugfix: a unexpected new line inserted when user compositionend with hitting Enter
|
||
if (this.quill.selection && this.quill.selection.composing) return;
|
||
const Scope = external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.imports.parchment.Scope;
|
||
|
||
if (range.length > 0) {
|
||
this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change
|
||
}
|
||
|
||
const lineFormats = Object.keys(context.format).reduce((formats, format) => {
|
||
if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) {
|
||
formats[format] = context.format[format];
|
||
}
|
||
|
||
return formats;
|
||
}, {}); // insert new cellLine with lineFormats
|
||
|
||
this.quill.insertText(range.index, '\n', lineFormats['table-cell-line'], external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER); // Earlier scroll.deleteAt might have messed up our selection,
|
||
// so insertText's built in selection preservation is not reliable
|
||
|
||
this.quill.setSelection(range.index + 1, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.SILENT);
|
||
this.quill.focus();
|
||
Object.keys(context.format).forEach(name => {
|
||
if (lineFormats[name] != null) return;
|
||
if (Array.isArray(context.format[name])) return;
|
||
if (name === 'link') return;
|
||
this.quill.format(name, context.format[name], external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
});
|
||
}
|
||
|
||
},
|
||
'table-cell-line up': makeTableArrowHandler(true),
|
||
'table-cell-line down': makeTableArrowHandler(false),
|
||
'down-to-table': {
|
||
key: 'ArrowDown',
|
||
collapsed: true,
|
||
|
||
handler(range, context) {
|
||
const target = context.line.next;
|
||
|
||
if (target && target.statics.blotName === 'table-view') {
|
||
const targetCell = target.table().rows()[0].children.head;
|
||
const targetLine = targetCell.children.head;
|
||
this.quill.setSelection(targetLine.offset(this.quill.scroll), 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
},
|
||
'up-to-table': {
|
||
key: 'ArrowUp',
|
||
collapsed: true,
|
||
|
||
handler(range, context) {
|
||
const target = context.line.prev;
|
||
|
||
if (target && target.statics.blotName === 'table-view') {
|
||
const rows = target.table().rows();
|
||
const targetCell = rows[rows.length - 1].children.head;
|
||
const targetLine = targetCell.children.head;
|
||
this.quill.setSelection(targetLine.offset(this.quill.scroll), 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
}
|
||
};
|
||
|
||
function makeTableArrowHandler(up) {
|
||
return {
|
||
key: up ? 'ArrowUp' : 'ArrowDown',
|
||
collapsed: true,
|
||
format: ['table-cell-line'],
|
||
|
||
handler(range, context) {
|
||
// TODO move to table module
|
||
const key = up ? 'prev' : 'next';
|
||
const targetLine = context.line[key];
|
||
if (targetLine != null) return true;
|
||
const cell = context.line.parent;
|
||
const targetRow = cell.parent[key];
|
||
|
||
if (targetRow != null && targetRow.statics.blotName === 'table-row') {
|
||
let targetCell = targetRow.children.head;
|
||
let totalColspanOfTargetCell = parseInt(targetCell.formats()['colspan'], 10);
|
||
let cur = cell;
|
||
let totalColspanOfCur = parseInt(cur.formats()['colspan'], 10); // get targetCell above current cell depends on colspan
|
||
|
||
while (cur.prev != null) {
|
||
cur = cur.prev;
|
||
totalColspanOfCur += parseInt(cur.formats()['colspan'], 10);
|
||
}
|
||
|
||
while (targetCell.next != null && totalColspanOfTargetCell < totalColspanOfCur) {
|
||
targetCell = targetCell.next;
|
||
totalColspanOfTargetCell += parseInt(targetCell.formats()['colspan'], 10);
|
||
}
|
||
|
||
const index = targetCell.offset(this.quill.scroll);
|
||
this.quill.setSelection(index, 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
} else {
|
||
const targetLine = cell.table().parent[key];
|
||
|
||
if (targetLine != null) {
|
||
if (up) {
|
||
this.quill.setSelection(targetLine.offset(this.quill.scroll) + targetLine.length() - 1, 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
} else {
|
||
this.quill.setSelection(targetLine.offset(this.quill.scroll), 0, external_commonjs_quill_commonjs2_quill_amd_quill_root_Quill_default.a.sources.USER);
|
||
}
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
};
|
||
}
|
||
|
||
function isTableCell(blot) {
|
||
return blot.statics.blotName === TableCell.blotName;
|
||
}
|
||
|
||
function isInTableCell(current) {
|
||
return current && current.parent ? isTableCell(current.parent) ? true : isInTableCell(current.parent) : false;
|
||
}
|
||
|
||
/* harmony default export */ var quill_better_table = __webpack_exports__["default"] = (quill_better_table_BetterTable);
|
||
|
||
/***/ }),
|
||
/* 11 */,
|
||
/* 12 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__(10);
|
||
|
||
|
||
/***/ })
|
||
/******/ ])["default"];
|
||
}); |