travel/admin/node_modules/tui-editor/dist/tui-editor-extTable.js

3982 lines
127 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* tui-editor
* @version 1.3.3
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com> (https://nhnent.github.io/tui.editor/)
* @license MIT
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("jquery"), require("tui-code-snippet"), (function webpackLoadOptionalExternalModule() { try { return require("tui-editor"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("tui-editor/dist/tui-editor-Viewer"); } catch(e) {} }()), require("to-mark"));
else if(typeof define === 'function' && define.amd)
define(["jquery", "tui-code-snippet", "tui-editor", "tui-editor/dist/tui-editor-Viewer", "to-mark"], factory);
else {
var a = typeof exports === 'object' ? factory(require("jquery"), require("tui-code-snippet"), (function webpackLoadOptionalExternalModule() { try { return require("tui-editor"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("tui-editor/dist/tui-editor-Viewer"); } catch(e) {} }()), require("to-mark")) : factory(root["$"], (root["tui"] && root["tui"]["util"]), (root["tui"] && root["tui"]["Editor"]), (root["tui"] && root["tui"]["Editor"]), root["toMark"]);
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_54__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // 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 = "dist/";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 49);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_0__;
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
/**
* @fileoverview Editor/Viewer proxy for extensions
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
/* eslint global-require: 0 no-empty: 0 */
var Editor = void 0;
try {
Editor = __webpack_require__(4);
} catch (e) {}
if (!Editor) {
try {
Editor = __webpack_require__(5);
} catch (e) {}
}
exports.default = Editor;
/***/ }),
/* 2 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_2__;
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createTableData = createTableData;
exports.createCellIndexData = createCellIndexData;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Parse cell like td or th.
* @param {HTMLElement} cell - cell element like td or th
* @param {number} rowIndex - row index
* @param {number} colIndex - column index
* @returns {{
* nodeName: string,
* colspan: number,
* rowspan: number,
* content: string,
* align: ?string
* }}
* @private
*/
/**
* @fileoverview Implements tableDataHandler
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
function _parseCell(cell, rowIndex, colIndex) {
var $cell = (0, _jquery2.default)(cell);
var colspan = $cell.attr('colspan');
var rowspan = $cell.attr('rowspan');
var nodeName = cell.nodeName;
if (nodeName !== 'TH' && nodeName !== 'TD') {
return null;
}
var cellData = {
nodeName: cell.nodeName,
colspan: colspan ? parseInt(colspan, 10) : 1,
rowspan: rowspan ? parseInt(rowspan, 10) : 1,
content: $cell.html(),
elementIndex: {
rowIndex: rowIndex,
colIndex: colIndex
}
};
if (cell.nodeName === 'TH' && cell.align) {
cellData.align = cell.align;
}
return cellData;
}
/**
* Add merged cell.
* @param {object} base - base table data
* @param {object} cellData - cell data
* @param {number} startRowIndex - start row index
* @param {number} startCellIndex - start cell index
* @private
*/
function _addMergedCell(base, cellData, startRowIndex, startCellIndex) {
var colspan = cellData.colspan,
rowspan = cellData.rowspan,
nodeName = cellData.nodeName;
var colMerged = colspan > 1;
var rowMerged = rowspan > 1;
if (!colMerged && !rowMerged) {
return;
}
var limitRowIndex = startRowIndex + rowspan;
var limitCellIndex = startCellIndex + colspan;
_tuiCodeSnippet2.default.range(startRowIndex, limitRowIndex).forEach(function (rowIndex) {
base[rowIndex] = base[rowIndex] || [];
_tuiCodeSnippet2.default.range(startCellIndex, limitCellIndex).forEach(function (cellIndex) {
var mergedData = {
nodeName: nodeName
};
if (rowIndex === startRowIndex && cellIndex === startCellIndex) {
return;
}
if (colMerged) {
mergedData.colMergeWith = startCellIndex;
}
if (rowMerged) {
mergedData.rowMergeWith = startRowIndex;
}
base[rowIndex][cellIndex] = mergedData;
});
});
}
/**
* Create table data from jQuery table Element.
* @param {jQuery} $table - jQuery table element
* @returns {Array.<Array.<object>>}
* @ignore
*/
function createTableData($table) {
var tableData = [];
$table.find('tr').each(function (rowIndex, tr) {
var stackedColCount = 0;
tableData[rowIndex] = tableData[rowIndex] || [];
(0, _jquery2.default)(tr).children().each(function (colIndex, cell) {
var cellData = _parseCell(cell, rowIndex, colIndex);
if (!cellData) {
return;
}
var dataColIndex = colIndex + stackedColCount;
while (tableData[rowIndex][dataColIndex]) {
dataColIndex += 1;
stackedColCount += 1;
}
tableData[rowIndex][dataColIndex] = cellData;
_addMergedCell(tableData, cellData, rowIndex, dataColIndex);
});
});
if ($table[0].className) {
tableData.className = $table[0].className;
}
return tableData;
}
/**
* Create cell index data of table data.
* @param {Array.<Array.<object>>} tableData - table data
* @returns {Array.<Array.<object>>}
* @ignore
*/
function createCellIndexData(tableData) {
var mappingData = [];
tableData.forEach(function (row, rowIndex) {
var mappingRow = [];
row.forEach(function (cell, colIndex) {
if (_tuiCodeSnippet2.default.isUndefined(cell.colMergeWith) && _tuiCodeSnippet2.default.isUndefined(cell.rowMergeWith)) {
mappingRow.push({
rowIndex: rowIndex,
colIndex: colIndex
});
}
});
mappingData.push(mappingRow);
});
return mappingData;
}
/**
* Get header aligns.
* @param {Array.<Array.<object>>} tableData - table data
* @returns {Array.<?string>}
* @private
*/
function _getHeaderAligns(tableData) {
var headRowData = tableData[0];
return headRowData.map(function (cellData) {
var align = void 0;
if (_tuiCodeSnippet2.default.isExisty(cellData.colMergeWith)) {
align = headRowData[cellData.colMergeWith].align;
} else {
align = cellData.align;
}
return align;
});
}
/**
* Create render data.
* @param {Array.<object>} tableData - table data
* @param {Array.<object>} cellIndexData - cell index data
* @returns {Array.<Array.<object>>}
* @ignore
*/
function createRenderData(tableData, cellIndexData) {
var headerAligns = _getHeaderAligns(tableData);
var renderData = cellIndexData.map(function (row) {
return row.map(function (_ref) {
var rowIndex = _ref.rowIndex,
colIndex = _ref.colIndex;
return _tuiCodeSnippet2.default.extend({
align: headerAligns[colIndex]
}, tableData[rowIndex][colIndex]);
});
});
if (tableData.className) {
renderData.className = tableData.className;
}
return renderData;
}
var BASIC_CELL_CONTENT = _tuiCodeSnippet2.default.browser.msie ? '' : '<br>';
/**
* Create basic cell data.
* @param {number} rowIndex - row index
* @param {number} colIndex - column index
* @param {string} nodeName - node name
* @returns {{
* nodeName: string,
* colspan: number,
* rowspan: number,
* content: string
* }}
* @ignore
*/
function createBasicCell(rowIndex, colIndex, nodeName) {
return {
nodeName: nodeName || 'TD',
colspan: 1,
rowspan: 1,
content: BASIC_CELL_CONTENT,
elementIndex: {
rowIndex: rowIndex,
colIndex: colIndex
}
};
}
/**
* Find element row index.
* @param {jQuery} $cell - cell jQuery element like td or th
* @returns {number}
* @ignore
*/
function findElementRowIndex($cell) {
var $tr = $cell.closest('tr');
var rowIndex = $tr.prevAll().length;
if ($tr.parent()[0].nodeName === 'TBODY') {
rowIndex += 1;
}
return rowIndex;
}
/**
* Find element col index.
* @param {jQuery} $cell - cell jQuery element like td or th
* @returns {number}
* @ignore
*/
function findElementColIndex($cell) {
return $cell.closest('td, th').prevAll().length;
}
/**
* Find indexes of base table data from mappin data.
* @param {Array.<Array.<object>>} cellIndexData - cell index data
* @param {jQuery} $cell - cell jQuery element like td or th
* @returns {{rowIndex: number, cellIndex: number}}
* @ignore
*/
function findCellIndex(cellIndexData, $cell) {
var elementRowIndex = findElementRowIndex($cell);
var elementColIndex = findElementColIndex($cell);
return cellIndexData[elementRowIndex][elementColIndex];
}
/**
* Find last index of col merged cells.
* @param {Array.<Array.<object>>} tableData - tableData data
* @param {number} rowIndex - row index of base data
* @param {number} colIndex - column index of tabld data
* @returns {number}
* @ignore
*/
function findRowMergedLastIndex(tableData, rowIndex, colIndex) {
var cellData = tableData[rowIndex][colIndex];
var foundRowIndex = rowIndex;
if (cellData.rowspan > 1) {
foundRowIndex += cellData.rowspan - 1;
}
return foundRowIndex;
}
/**
* Find last index of col merged cells.
* @param {Array.<Array.<object>>} tableData - tableData data
* @param {number} rowIndex - row index of base data
* @param {number} colIndex - column index of tabld data
* @returns {number}
* @ignore
*/
function findColMergedLastIndex(tableData, rowIndex, colIndex) {
var cellData = tableData[rowIndex][colIndex];
var foundColIndex = colIndex;
if (cellData.colspan > 1) {
foundColIndex += cellData.colspan - 1;
}
return foundColIndex;
}
/**
* Find cell element index.
* @param {Array.<Array.<object>>} tableData - tableData data
* @param {number} rowIndex - row index of base data
* @param {number} colIndex - col index of base data
* @returns {{rowIndex: number, colIndex: number}}
* @ignore
*/
function findElementIndex(tableData, rowIndex, colIndex) {
var cellData = tableData[rowIndex][colIndex];
rowIndex = _tuiCodeSnippet2.default.isExisty(cellData.rowMergeWith) ? cellData.rowMergeWith : rowIndex;
colIndex = _tuiCodeSnippet2.default.isExisty(cellData.colMergeWith) ? cellData.colMergeWith : colIndex;
return tableData[rowIndex][colIndex].elementIndex;
}
/**
* Stuff cells into incomplete row.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} limitIndex - limit index
* @ignore
*/
function stuffCellsIntoIncompleteRow(tableData, limitIndex) {
tableData.forEach(function (rowData, rowIndex) {
var startIndex = rowData.length;
if (startIndex) {
var nodeName = rowData[0].nodeName;
_tuiCodeSnippet2.default.range(startIndex, limitIndex).forEach(function (colIndex) {
rowData.push(createBasicCell(rowIndex, colIndex, nodeName));
});
}
});
}
/**
* Add tbody or thead of table data if need.
* @param {Array.<Array.<object>>} tableData - table data
* @returns {boolean}
* @ignore
*/
function addTbodyOrTheadIfNeed(tableData) {
var header = tableData[0];
var cellCount = header.length;
var added = true;
if (!cellCount && tableData[1]) {
_tuiCodeSnippet2.default.range(0, tableData[1].length).forEach(function (colIndex) {
header.push(createBasicCell(0, colIndex, 'TH'));
});
} else if (tableData[0][0].nodeName !== 'TH') {
var _ref2;
var newHeader = _tuiCodeSnippet2.default.range(0, cellCount).map(function (colIndex) {
return createBasicCell(0, colIndex, 'TH');
});
(_ref2 = []).concat.apply(_ref2, tableData).forEach(function (cellData) {
if (cellData.elementIndex) {
cellData.elementIndex.rowIndex += 1;
}
});
tableData.unshift(newHeader);
} else if (tableData.length === 1) {
var newRow = _tuiCodeSnippet2.default.range(0, cellCount).map(function (colIndex) {
return createBasicCell(1, colIndex, 'TD');
});
tableData.push(newRow);
} else {
added = false;
}
return added;
}
exports.default = {
createTableData: createTableData,
createCellIndexData: createCellIndexData,
createRenderData: createRenderData,
findElementRowIndex: findElementRowIndex,
findElementColIndex: findElementColIndex,
findCellIndex: findCellIndex,
createBasicCell: createBasicCell,
findRowMergedLastIndex: findRowMergedLastIndex,
findColMergedLastIndex: findColMergedLastIndex,
findElementIndex: findElementIndex,
stuffCellsIntoIncompleteRow: stuffCellsIntoIncompleteRow,
addTbodyOrTheadIfNeed: addTbodyOrTheadIfNeed
};
/***/ }),
/* 4 */
/***/ (function(module, exports) {
if(typeof __WEBPACK_EXTERNAL_MODULE_4__ === 'undefined') {var e = new Error("Cannot find module \"undefined\""); e.code = 'MODULE_NOT_FOUND'; throw e;}
module.exports = __WEBPACK_EXTERNAL_MODULE_4__;
/***/ }),
/* 5 */
/***/ (function(module, exports) {
if(typeof __WEBPACK_EXTERNAL_MODULE_5__ === 'undefined') {var e = new Error("Cannot find module \"undefined\""); e.code = 'MODULE_NOT_FOUND'; throw e;}
module.exports = __WEBPACK_EXTERNAL_MODULE_5__;
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Create cell html.
* @param {object} cell - cell data of table base data
* @returns {string}
* @private
*/
/**
* @fileoverview Implements tableRenderer
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
function _createCellHtml(cell) {
var attrs = cell.colspan > 1 ? ' colspan="' + cell.colspan + '"' : '';
attrs += cell.rowspan > 1 ? ' rowspan="' + cell.rowspan + '"' : '';
attrs += cell.align ? ' align="' + cell.align + '"' : '';
return '<' + cell.nodeName + attrs + '>' + cell.content + '</' + cell.nodeName + '>';
}
/**
* Create html for thead or tbody.
* @param {Array.<Array.<object>>} trs - tr list
* @param {string} wrapperNodeName - wrapper node name like THEAD, TBODY
* @returns {string}
* @private
*/
function _createTheadOrTbodyHtml(trs, wrapperNodeName) {
var html = '';
if (trs.length) {
html = trs.map(function (tr) {
var tdHtml = tr.map(_createCellHtml).join('');
return '<tr>' + tdHtml + '</tr>';
}).join('');
html = '<' + wrapperNodeName + '>' + html + '</' + wrapperNodeName + '>';
}
return html;
}
/**
* Create table html.
* @param {Array.<Array.<object>>} renderData - table data for render
* @returns {string}
* @private
*/
function createTableHtml(renderData) {
var thead = [renderData[0]];
var tbody = renderData.slice(1);
var theadHtml = _createTheadOrTbodyHtml(thead, 'THEAD');
var tbodyHtml = _createTheadOrTbodyHtml(tbody, 'TBODY');
var className = renderData.className ? ' class="' + renderData.className + '"' : '';
return '<table' + className + '>' + (theadHtml + tbodyHtml) + '</renderData>';
}
/**
* Replace table.
* @param {jQuery} $table - table jQuery element
* @param {Array.<Array.<object>>} tableData - table data
* @returns {jQuery}
* @ignore
*/
function replaceTable($table, tableData) {
var cellIndexData = _tableDataHandler2.default.createCellIndexData(tableData);
var renderData = _tableDataHandler2.default.createRenderData(tableData, cellIndexData);
var $newTable = (0, _jquery2.default)(createTableHtml(renderData));
$table.replaceWith($newTable);
return $newTable;
}
/**
* Focus to cell.
* @param {squireext} sq - squire instance
* @param {range} range - range object
* @param {HTMLElement} targetCell - cell element for focus
* @ignore
*/
function focusToCell(sq, range, targetCell) {
range.selectNodeContents(targetCell);
range.collapse(true);
sq.setSelection(range);
}
exports.default = {
createTableHtml: createTableHtml,
replaceTable: replaceTable,
focusToCell: focusToCell
};
/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Find unmerged table range.
* @param {Array.<Array.<object>>} tableData - table data
* @param {jQuery} $start - start talbe cell jQuery element
* @param {jQuery} $end - end table cell jQuery element
* @returns {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }}
* @private
*/
function _findUnmergedRange(tableData, $start, $end) {
var cellIndexData = _tableDataHandler2.default.createCellIndexData(tableData);
var startCellIndex = _tableDataHandler2.default.findCellIndex(cellIndexData, $start);
var endCellIndex = _tableDataHandler2.default.findCellIndex(cellIndexData, $end);
var startRowIndex = void 0,
endRowIndex = void 0,
startColIndex = void 0,
endColIndex = void 0;
if (startCellIndex.rowIndex > endCellIndex.rowIndex) {
startRowIndex = endCellIndex.rowIndex;
endRowIndex = startCellIndex.rowIndex;
} else {
startRowIndex = startCellIndex.rowIndex;
endRowIndex = endCellIndex.rowIndex;
}
if (startCellIndex.colIndex > endCellIndex.colIndex) {
startColIndex = endCellIndex.colIndex;
endColIndex = startCellIndex.colIndex;
} else {
startColIndex = startCellIndex.colIndex;
endColIndex = endCellIndex.colIndex;
}
return {
start: {
rowIndex: startRowIndex,
colIndex: startColIndex
},
end: {
rowIndex: endRowIndex,
colIndex: endColIndex
}
};
}
/**
* Expand table range by row merge properties like rowspan, rowMergeWith.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }} tableRange - table range
* @param {string} rangeType - range type like start, end
* @private
*/
/**
* @fileoverview Implements tableRangeHandler
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
function _expandRowMergedRange(tableData, tableRange, rangeType) {
var rowIndex = tableRange[rangeType].rowIndex;
var rowData = tableData[rowIndex];
_tuiCodeSnippet2.default.range(tableRange.start.colIndex, tableRange.end.colIndex + 1).forEach(function (colIndex) {
var cellData = rowData[colIndex];
var rowMergeWith = cellData.rowMergeWith;
var lastRowMergedIndex = -1;
if (_tuiCodeSnippet2.default.isExisty(rowMergeWith)) {
if (rowMergeWith < tableRange.start.rowIndex) {
tableRange.start.rowIndex = rowMergeWith;
}
lastRowMergedIndex = rowMergeWith + tableData[rowMergeWith][colIndex].rowspan - 1;
} else if (cellData.rowspan > 1) {
lastRowMergedIndex = rowIndex + cellData.rowspan - 1;
}
if (lastRowMergedIndex > tableRange.end.rowIndex) {
tableRange.end.rowIndex = lastRowMergedIndex;
}
});
}
/**
* Expand table range by column merge properties like colspan, colMergeWith.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }} tableRange - table range
* @param {number} rowIndex - row index
* @param {number} colIndex - column index
* @private
*/
function _expandColMergedRange(tableData, tableRange, rowIndex, colIndex) {
var rowData = tableData[rowIndex];
var cellData = rowData[colIndex];
var colMergeWith = cellData.colMergeWith;
var lastColMergedIndex = -1;
if (_tuiCodeSnippet2.default.isExisty(colMergeWith)) {
if (colMergeWith < tableRange.start.colIndex) {
tableRange.start.colIndex = colMergeWith;
}
lastColMergedIndex = colMergeWith + rowData[colMergeWith].colspan - 1;
} else if (cellData.colspan > 1) {
lastColMergedIndex = colIndex + cellData.colspan - 1;
}
if (lastColMergedIndex > tableRange.end.colIndex) {
tableRange.end.colIndex = lastColMergedIndex;
}
}
/**
* Expand table range by merge properties like colspan, rowspan.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }} tableRange - table range
* @returns {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }}
* @private
*/
function _expandMergedRange(tableData, tableRange) {
var rangeStr = '';
while (rangeStr !== JSON.stringify(tableRange)) {
rangeStr = JSON.stringify(tableRange);
_expandRowMergedRange(tableData, tableRange, 'start');
_expandRowMergedRange(tableData, tableRange, 'end');
_tuiCodeSnippet2.default.range(tableRange.start.rowIndex, tableRange.end.rowIndex + 1).forEach(function (rowIndex) {
_expandColMergedRange(tableData, tableRange, rowIndex, tableRange.start.colIndex);
_expandColMergedRange(tableData, tableRange, rowIndex, tableRange.end.colIndex);
});
}
return tableRange;
}
/**
* Find table range for selection.
* @param {Array.<Array.<object>>} tableData - table data
* @param {jQuery} $start - start jQuery element
* @param {jQuery} $end - end jQuery element
* @returns {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }}
* @ignore
*/
function findSelectionRange(tableData, $start, $end) {
var unmergedRange = _findUnmergedRange(tableData, $start, $end);
return _expandMergedRange(tableData, unmergedRange);
}
/**
* Get table selection range.
* @param {Array.<Array.<object>>} tableData - table data
* @param {jQuery} $selectedCells - selected cells jQuery elements
* @param {jQuery} $startContainer - start container jQuery element of text range
* @returns {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
*}}
* @ignore
*/
function getTableSelectionRange(tableData, $selectedCells, $startContainer) {
var cellIndexData = _tableDataHandler2.default.createCellIndexData(tableData);
var tableRange = {};
if ($selectedCells.length) {
var startRange = _tableDataHandler2.default.findCellIndex(cellIndexData, $selectedCells.first());
var endRange = _tuiCodeSnippet2.default.extend({}, startRange);
$selectedCells.each(function (index, cell) {
var cellIndex = _tableDataHandler2.default.findCellIndex(cellIndexData, (0, _jquery2.default)(cell));
var cellData = tableData[cellIndex.rowIndex][cellIndex.colIndex];
var lastRowMergedIndex = cellIndex.rowIndex + cellData.rowspan - 1;
var lastColMergedIndex = cellIndex.colIndex + cellData.colspan - 1;
endRange.rowIndex = Math.max(endRange.rowIndex, lastRowMergedIndex);
endRange.colIndex = Math.max(endRange.colIndex, lastColMergedIndex);
});
tableRange.start = startRange;
tableRange.end = endRange;
} else {
var cellIndex = _tableDataHandler2.default.findCellIndex(cellIndexData, $startContainer);
tableRange.start = cellIndex;
tableRange.end = _tuiCodeSnippet2.default.extend({}, cellIndex);
}
return tableRange;
}
exports.default = {
findSelectionRange: findSelectionRange,
getTableSelectionRange: getTableSelectionRange
};
/***/ }),
/* 8 */,
/* 9 */,
/* 10 */,
/* 11 */,
/* 12 */,
/* 13 */,
/* 14 */,
/* 15 */,
/* 16 */,
/* 17 */,
/* 18 */,
/* 19 */,
/* 20 */,
/* 21 */,
/* 22 */,
/* 23 */,
/* 24 */,
/* 25 */,
/* 26 */,
/* 27 */,
/* 28 */,
/* 29 */,
/* 30 */,
/* 31 */,
/* 32 */,
/* 33 */,
/* 34 */,
/* 35 */,
/* 36 */,
/* 37 */,
/* 38 */,
/* 39 */,
/* 40 */,
/* 41 */,
/* 42 */,
/* 43 */,
/* 44 */,
/* 45 */,
/* 46 */,
/* 47 */,
/* 48 */,
/* 49 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
__webpack_require__(50);
var _mergedTableCreator = __webpack_require__(51);
var _mergedTableCreator2 = _interopRequireDefault(_mergedTableCreator);
var _tableUnmergePreparer = __webpack_require__(52);
var _tableUnmergePreparer2 = _interopRequireDefault(_tableUnmergePreparer);
var _toMarkRenderer = __webpack_require__(53);
var _toMarkRenderer2 = _interopRequireDefault(_toMarkRenderer);
var _wwMergedTableManager = __webpack_require__(55);
var _wwMergedTableManager2 = _interopRequireDefault(_wwMergedTableManager);
var _wwMergedTableSelectionManager = __webpack_require__(56);
var _wwMergedTableSelectionManager2 = _interopRequireDefault(_wwMergedTableSelectionManager);
var _mergedTableAddRow = __webpack_require__(57);
var _mergedTableAddRow2 = _interopRequireDefault(_mergedTableAddRow);
var _mergedTableAddCol = __webpack_require__(58);
var _mergedTableAddCol2 = _interopRequireDefault(_mergedTableAddCol);
var _mergedTableRemoveRow = __webpack_require__(59);
var _mergedTableRemoveRow2 = _interopRequireDefault(_mergedTableRemoveRow);
var _mergedTableRemoveCol = __webpack_require__(60);
var _mergedTableRemoveCol2 = _interopRequireDefault(_mergedTableRemoveCol);
var _mergedTableAlignCol = __webpack_require__(61);
var _mergedTableAlignCol2 = _interopRequireDefault(_mergedTableAlignCol);
var _mergeCell = __webpack_require__(62);
var _mergeCell2 = _interopRequireDefault(_mergeCell);
var _unmergeCell = __webpack_require__(63);
var _unmergeCell2 = _interopRequireDefault(_unmergeCell);
var _mergedTableUI = __webpack_require__(64);
var _mergedTableUI2 = _interopRequireDefault(_mergedTableUI);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* table extension
* @param {Editor} editor - editor instance
* @ignore
*/
/**
* @fileoverview Implements table extension
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
function tableExtension(editor) {
var eventManager = editor.eventManager;
editor.toMarkOptions = editor.toMarkOptions || {};
editor.toMarkOptions.renderer = _toMarkRenderer2.default;
_bindEvents(eventManager);
if (editor.isViewer()) {
return;
}
var wwComponentManager = editor.wwEditor.componentManager;
var popupTableUtils = editor.getUI().getPopupTableUtils();
_addCommands(editor);
_changeWysiwygManagers(wwComponentManager);
if (popupTableUtils) {
_mergedTableUI2.default.updateContextMenu(popupTableUtils, eventManager, wwComponentManager.getManager('tableSelection'));
}
}
/**
* Add commands.
* @param {object} editor - editor instance
* @private
*/
function _addCommands(editor) {
editor.addCommand(_mergeCell2.default);
editor.addCommand(_unmergeCell2.default);
}
/**
* Change wysiwyg component managers.
* @param {object} wwComponentManager - componentMananger instance
* @private
*/
function _changeWysiwygManagers(wwComponentManager) {
wwComponentManager.removeManager('table');
wwComponentManager.removeManager('tableSelection');
wwComponentManager.addManager(_wwMergedTableManager2.default);
wwComponentManager.addManager(_wwMergedTableSelectionManager2.default);
}
/**
* Change html by onChangeTable function.
* @param {string} html - original html
* @param {function} onChangeTable - function for changing html
* @returns {string}
* @private
*/
function _changeHtml(html, onChangeTable) {
var $tempDiv = (0, _jquery2.default)('<div>' + html + '</div>');
var $tables = $tempDiv.find('table');
if ($tables.length) {
$tables.get().forEach(function (tableElement) {
var changedTableElement = onChangeTable(tableElement);
(0, _jquery2.default)(tableElement).replaceWith(changedTableElement);
});
html = $tempDiv.html();
}
return html;
}
/**
* Snatch wysiwyg command.
* @param {{command: object}} commandWrapper - wysiwyg command wrapper
* @private
*/
function _snatchWysiwygCommand(commandWrapper) {
var command = commandWrapper.command;
if (!command.isWWType()) {
return;
}
switch (command.getName()) {
case 'AddRow':
commandWrapper.command = _mergedTableAddRow2.default;
break;
case 'AddCol':
commandWrapper.command = _mergedTableAddCol2.default;
break;
case 'RemoveRow':
commandWrapper.command = _mergedTableRemoveRow2.default;
break;
case 'RemoveCol':
commandWrapper.command = _mergedTableRemoveCol2.default;
break;
case 'AlignCol':
commandWrapper.command = _mergedTableAlignCol2.default;
break;
default:
}
}
/**
* Bind events.
* @param {object} eventManager - eventManager instance
* @private
*/
function _bindEvents(eventManager) {
eventManager.listen('convertorAfterMarkdownToHtmlConverted', function (html) {
return _changeHtml(html, _mergedTableCreator2.default);
});
eventManager.listen('convertorBeforeHtmlToMarkdownConverted', function (html) {
return _changeHtml(html, _tableUnmergePreparer2.default);
});
eventManager.listen('addCommandBefore', _snatchWysiwygCommand);
}
_editorProxy2.default.defineExtension('table', tableExtension);
/***/ }),
/* 50 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var i18n = _editorProxy2.default.i18n; /**
* @fileoverview i18n for table extension
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
if (i18n) {
i18n.setLanguage(['ko', 'ko_KR'], {
'Merge cells': '셀 병합',
'Unmerge cells': '셀 병합해제',
'Cannot change part of merged cell': '병합 된 셀의 일부를 변경할 수 없습니다.',
'Cannot paste row merged cells into the table header': '테이블 헤더에는 행 병합된 셀을 붙여넣을 수 없습니다.'
});
i18n.setLanguage(['en', 'en_US'], {
'Merge cells': 'Merge cells',
'Unmerge cells': 'Unmerge cells',
'Cannot change part of merged cell': 'Cannot change part of merged cell.',
'Cannot paste row merged cells into the table header': 'Cannot paste row merged cells into the table header.'
});
i18n.setLanguage(['es', 'es_ES'], {
'Merge cells': 'Combinar celdas',
'Unmerge cells': 'Separar celdas',
'Cannot change part of merged cell': 'No se puede cambiar parte de una celda combinada.',
'Cannot paste row merged cells into the table header': 'No se pueden pegar celdas combinadas en el encabezado de tabla.'
});
i18n.setLanguage(['ja', 'ja_JP'], {
'Merge cells': 'セルの結合',
'Unmerge cells': 'セルの結合を解除',
'Cannot change part of merged cell': '結合されたセルの一部を変更することはできません。',
'Cannot paste row merged cells into the table header': '行にマージされたセルをヘッダーに貼り付けることはできません。'
});
i18n.setLanguage(['nl', 'nl_NL'], {
'Merge cells': 'Cellen samenvoegen',
'Unmerge cells': 'Samengevoegde cellen ongedaan maken',
'Cannot change part of merged cell': 'Kan geen deel uit van een samengevoegde cel veranderen.',
'Cannot paste row merged cells into the table header': 'Kan geen rij met samengevoegde cellen in de koptekst plakken.'
});
i18n.setLanguage(['zh', 'zh_CN'], {
'Merge cells': '合并单元格',
'Unmerge cells': '取消合并单元格',
'Cannot change part of merged cell': '无法更改合并单元格的一部分。',
'Cannot paste row merged cells into the table header': '无法将行合并单元格粘贴到标题中。'
});
i18n.setLanguage(['de', 'de_DE'], {
'Merge cells': 'Zellen zusammenführen',
'Unmerge cells': 'Zusammenführen rückgängig machen',
'Cannot change part of merged cell': 'Der Teil der verbundenen Zelle kann nicht geändert werden.',
'Cannot paste row merged cells into the table header': 'Die Zeile der verbundenen Zellen kann nicht in die Kopfzeile eingefügt werden.'
});
i18n.setLanguage(['ru', 'ru_RU'], {
'Merge cells': 'Объединить ячейки',
'Unmerge cells': 'Разъединить ячейки',
'Cannot change part of merged cell': 'Вы не можете изменять часть комбинированной ячейки.',
'Cannot paste row merged cells into the table header': 'Вы не можете вставлять объединенные ячейки в заголовок таблицы.'
});
i18n.setLanguage(['fr', 'fr_FR'], {
'Merge cells': 'Fusionner les cellules',
'Unmerge cells': 'Séparer les cellules',
'Cannot change part of merged cell': 'Impossible de modifier une partie de la cellule fusionnée.',
'Cannot paste row merged cells into the table header': 'Impossible de coller les cellules fusionnées dans l\'en-tête du tableau.'
});
i18n.setLanguage(['uk', 'uk_UA'], {
'Merge cells': 'Об\'єднати комірки',
'Unmerge cells': 'Роз\'єднати комірки',
'Cannot change part of merged cell': 'Ви не можете змінювати частину комбінованої комірки.',
'Cannot paste row merged cells into the table header': 'Ви не можете вставляти об\'єднані комірки в заголовок таблиці.'
});
i18n.setLanguage(['tr', 'tr_TR'], {
'Merge cells': 'Hücreleri birleştir',
'Unmerge cells': 'Hücreleri ayır',
'Cannot change part of merged cell': 'Birleştirilmiş hücrelerin bir kısmı değiştirelemez.',
'Cannot paste row merged cells into the table header': 'Satırda birleştirilmiş hücreler sütun başlığına yapıştırılamaz'
});
i18n.setLanguage(['fi', 'fi_FI'], {
'Merge cells': 'Yhdistä solut',
'Unmerge cells': 'Jaa solut',
'Cannot change part of merged cell': 'Yhdistettyjen solujen osaa ei voi muuttaa',
'Cannot paste row merged cells into the table header': 'Soluja ei voi yhdistää taulukon otsikkoriviin'
});
i18n.setLanguage(['cs', 'cs_CZ'], {
'Merge cells': 'Spojit buňky',
'Unmerge cells': 'Rozpojit buňky',
'Cannot change part of merged cell': 'Nelze měnit část spojené buňky',
'Cannot paste row merged cells into the table header': 'Nelze vkládat spojené buňky do záhlaví tabulky'
});
i18n.setLanguage(['ar', 'ar_AR'], {
'Merge cells': 'دمج الوحدات',
'Unmerge cells': 'إلغاء دمج الوحدات',
'Cannot change part of merged cell': 'لا يمكن تغيير جزء من الخلية المدموجة',
'Cannot paste row merged cells into the table header': 'لا يمكن لصق الخلايا المدموجة من صف واحد في رأس الجدول'
});
i18n.setLanguage(['pl', 'pl_PL'], {
'Merge cells': 'Scal komórki',
'Unmerge cells': 'Rozłącz komórki',
'Cannot change part of merged cell': 'Nie można zmienić części scalonej komórki.',
'Cannot paste row merged cells into the table header': 'Nie można wkleić komórek o scalonym rzędzie w nagłówek tabeli.'
});
i18n.setLanguage(['zh', 'zh_TW'], {
'Merge cells': '合併儲存格',
'Unmerge cells': '取消合併儲存格',
'Cannot change part of merged cell': '無法變更儲存格的一部分。',
'Cannot paste row merged cells into the table header': '無法將合併的儲存格貼上至表格標題中。'
});
}
/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._extractPropertiesForMerge = _extractPropertiesForMerge;
exports._parseTableCell = _parseTableCell;
exports._createTableObjectFrom$Table = _createTableObjectFrom$Table;
exports._divideTrs = _divideTrs;
exports._mergeByColspan = _mergeByColspan;
exports._getRemovalTdCountsByRowspan = _getRemovalTdCountsByRowspan;
exports._mergeByRowspan = _mergeByRowspan;
exports.default = createMergedTable;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Extract properties for merge.
* @param {string} value - value
* @param {string} type - merge type like colspan, rowspan
* @param {string} oppossitType - oppossit merge type
* if merge type is colspan, opossit merge type is rowspan
* @returns {Array.<number|string>} - returns merge count and value
* @private
*/
function _extractPropertiesForMerge(value, type, oppossitType) {
var regex = new RegExp('^((?:' + oppossitType + '=[0-9]+:)?)' + type + '=([0-9]+):(.*)');
var regexResult = regex.exec(value);
var mergeCount = 1;
if (regexResult) {
mergeCount = parseInt(regexResult[2], 10);
value = regexResult[1] + regexResult[3];
}
return [mergeCount, value];
}
/**
* Parse table cell element like td, th.
* @param {HTMLElement} cell - table cell element like td, th
* @returns {{
* nodeName: string,
* colspan: number,
* rowspan: number,
* content: string,
* align: string
* }}
* @private
*/
/**
* @fileoverview Implements mergedTableCreator.
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
function _parseTableCell(cell) {
var nodeName = cell.nodeName;
var align = cell.align || '';
var content = cell.innerHTML.trim();
var colspan = null;
var rowspan = null;
var _extractPropertiesFor = _extractPropertiesForMerge(content, '@cols', '@rows');
colspan = _extractPropertiesFor[0];
content = _extractPropertiesFor[1];
var _extractPropertiesFor2 = _extractPropertiesForMerge(content, '@rows', '@cols');
rowspan = _extractPropertiesFor2[0];
content = _extractPropertiesFor2[1];
return {
nodeName: nodeName,
colspan: colspan,
rowspan: rowspan,
content: content,
align: align
};
}
/**
* Create table object from jQuery table.
* @param {jQuery} $table - jQuery table
* @returns {Array.<Array.<object>>}
* @private
*/
function _createTableObjectFrom$Table($table) {
return $table.find('tr').get().map(function (tr) {
return (0, _jquery2.default)(tr).find('td, th').get().map(_parseTableCell);
});
}
/**
* Find index by onFind function.
* @param {Array} arr - target array
* @param {function} onFind - find function
* @returns {number}
* @private
*/
function _findIndex(arr, onFind) {
var foundIndex = -1;
_tuiCodeSnippet2.default.forEach(arr, function (item, index) {
var nextFind = true;
if (onFind(item, index)) {
foundIndex = index;
nextFind = false;
}
return nextFind;
});
return foundIndex;
}
/**
* Separate the trs according to the type of parent, such as thead and tbody.
* @param {Array.<Array.<object>>} trs - tr list
* @returns {Array.<Array.<Array.<object>>>} - returns thead and tbody
* @private
*/
function _divideTrs(trs) {
var tbodyStartIndex = _findIndex(trs, function (tr) {
return tr[0].nodeName === 'TD';
});
return [trs.slice(0, tbodyStartIndex), trs.slice(tbodyStartIndex)];
}
/**
* Merge by colspan.
* @param {Array.<Array.<object>>} trs - tr list
* @private
*/
function _mergeByColspan(trs) {
trs.forEach(function (tr) {
var tdCount = tr.length;
var removalCount = 0;
tr.forEach(function (td) {
removalCount += td.colspan - 1;
});
tr.splice(tdCount - removalCount);
});
}
/**
* Get removal td counts by rowspan.
* @param {Array.<Array.<object>>} trs - tr list
* @returns {number}
* @private
*/
function _getRemovalTdCountsByRowspan(trs) {
var trIndexes = trs.map(function (tr, index) {
return index;
});
var removalCounts = trIndexes.map(function () {
return 0;
});
trs.forEach(function (tr, trIndex) {
var rowspanTds = tr.filter(function (td) {
return td.rowspan > 1;
});
var startTrIndexForRemoval = trIndex + 1;
rowspanTds.forEach(function (td) {
var removeCount = td.colspan;
var endTrIndexForRemoval = startTrIndexForRemoval + (td.rowspan - 1);
trIndexes.slice(startTrIndexForRemoval, endTrIndexForRemoval).forEach(function (removeIndex) {
removalCounts[removeIndex] += removeCount;
});
});
});
return removalCounts;
}
/**
* Merge by rowspan.
* @param {Array.<Array.<object>>} trs - tr list
* @private
*/
function _mergeByRowspan(trs) {
var removalCounts = _getRemovalTdCountsByRowspan(trs);
trs.forEach(function (tr, trIndex) {
tr.splice(tr.length - removalCounts[trIndex]);
});
}
/**
* Create merged table by @cols, @rows value in td innerHTML.
* @param {HTMLElement} tableElement - unmerged table
* @returns {HTMLElement}
*/
function createMergedTable(tableElement) {
var table = _createTableObjectFrom$Table((0, _jquery2.default)(tableElement));
var _divideTrs2 = _divideTrs(table),
thead = _divideTrs2[0],
tbody = _divideTrs2[1];
_mergeByColspan(thead);
_mergeByColspan(tbody);
_mergeByRowspan(tbody);
return (0, _jquery2.default)(_tableRenderer2.default.createTableHtml(table))[0];
}
/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._prependMergeSyntaxToContent = _prependMergeSyntaxToContent;
exports.default = prepareTableUnmerge;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Prepend merge syntax to content.
* @param {HTMLElement} cell - td or th
* @private
*/
function _prependMergeSyntaxToContent(cell) {
var $cell = (0, _jquery2.default)(cell);
var colspan = $cell.attr('colspan') || '';
var rowspan = $cell.attr('rowspan') || '';
var content = $cell.html();
if (colspan) {
content = '@cols=' + colspan + ':' + content;
}
if (rowspan) {
content = '@rows=' + rowspan + ':' + content;
}
if (content) {
$cell.html(content);
}
}
/**
* Prepare table unmerge.
* @param {HTMLElement} tableElement - table element
* @returns {HTMLElement}
*/
/**
* @fileoverview Implements tableUnmergePreparer.
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
function prepareTableUnmerge(tableElement) {
(0, _jquery2.default)(tableElement).find('td, th').get().forEach(_prependMergeSyntaxToContent);
return tableElement;
}
/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._getAdditionalThCount = _getAdditionalThCount;
exports._createTheadMarkdown = _createTheadMarkdown;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _toMark = __webpack_require__(54);
var _toMark2 = _interopRequireDefault(_toMark);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var RX_COLS = /@cols=[0-9]+:/g;
/**
* Create repeat string.
* @param {string} str - target string
* @param {number} count - count
* @returns {string}
* @private
*/
/**
* @fileoverview Implements toMarkRendererCreator.
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
function _createRepeatString(str, count) {
return _tuiCodeSnippet2.default.range(0, count).map(function () {
return str;
}).join('');
}
/**
* Make table head align text.
* Copy from https://github.com/nhnent/to-mark/blob/develop/src/renderer.gfm.js
* @param {HTMLElement} thElement - Table head cell element
* @returns {string}
* @private
*/
function _makeTableHeadAlignText(thElement) {
var align = thElement.align;
var textContent = (thElement.textContent || thElement.innerText).replace(RX_COLS, '');
var textLength = textContent.length;
var leftAlignValue = '';
var rightAlignValue = '';
if (align) {
if (align === 'left') {
leftAlignValue = ':';
textLength -= 1;
} else if (align === 'right') {
rightAlignValue = ':';
textLength -= 1;
} else if (align === 'center') {
rightAlignValue = ':';
leftAlignValue = ':';
textLength -= 2;
}
}
textLength = Math.max(textLength, 3);
return leftAlignValue + _createRepeatString('-', textLength) + rightAlignValue;
}
/**
* Get additional th element count.
* @param {Array.<HTMLElement>} ths - th element list
* @private
* @returns {Number}
*/
function _getAdditionalThCount(ths) {
var additionalThCount = 0;
ths.filter(function (th) {
return (0, _jquery2.default)(th).attr('colspan');
}).forEach(function (th) {
additionalThCount += parseInt((0, _jquery2.default)(th).attr('colspan'), 10) - 1;
});
return additionalThCount;
}
/**
* Create thead markdown.
* @param {HTMLElement} theadElement - theadElement element
* @param {string} theadContentMarkdown - thead markdown content
* @returns {string}
* @private
*/
function _createTheadMarkdown(theadElement, theadContentMarkdown) {
var ths = (0, _jquery2.default)(theadElement).find('th').get();
var align = ths.map(function (th) {
return ' ' + _makeTableHeadAlignText(th) + ' |';
}).join('');
align += _createRepeatString(' --- |', _getAdditionalThCount(ths));
return theadContentMarkdown ? theadContentMarkdown + '|' + align + '\n' : '';
}
exports.default = _toMark2.default.Renderer.factory(_toMark2.default.gfmRenderer, {
'THEAD': _createTheadMarkdown
});
/***/ }),
/* 54 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_54__;
/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
* @fileoverview Implements wysiwyg merged table manager
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var WwTableManager = _editorProxy2.default.WwTableManager,
i18n = _editorProxy2.default.i18n;
var PASTE_TABLE_BOOKMARK = 'tui-paste-table-bookmark';
var PASTE_TABLE_CELL_BOOKMARK = 'tui-paste-table-cell-bookmark';
/**
* Class WwMergedTableManager
* @extends {WwTableManager}
*/
var WwMergedTableManager = function (_WwTableManager) {
_inherits(WwMergedTableManager, _WwTableManager);
function WwMergedTableManager() {
_classCallCheck(this, WwMergedTableManager);
return _possibleConstructorReturn(this, (WwMergedTableManager.__proto__ || Object.getPrototypeOf(WwMergedTableManager)).apply(this, arguments));
}
_createClass(WwMergedTableManager, [{
key: '_updateCopyDataMergeWith',
/**
* Update mergeWidth property like rowMergeWith, colMergeWith of table data for copy.
* @param {Array.<Array.<object>>} copyTableData - table data for copy
* @param {{rowIndex: number, colIndex: number}} startRange - start range
* @private
*/
value: function _updateCopyDataMergeWith(copyTableData, startRange) {
copyTableData.forEach(function (rowData) {
rowData.forEach(function (cellData) {
if (_tuiCodeSnippet2.default.isExisty(cellData.rowMergeWith)) {
cellData.rowMergeWith -= startRange.rowIndex;
}
if (_tuiCodeSnippet2.default.isExisty(cellData.colMergeWith)) {
cellData.colMergeWith -= startRange.colIndex;
}
});
});
}
/**
* Create table data for copy.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startRange - start range
* @param {{rowIndex: number, colIndex: number}} endRange - end range
* @returns {Array.<Array.<object>>}
* @private
*/
}, {
key: '_createCopyTableData',
value: function _createCopyTableData(tableData, startRange, endRange) {
var copyTableData = tableData.slice(startRange.rowIndex, endRange.rowIndex + 1);
copyTableData = copyTableData.map(function (rowData) {
return rowData.slice(startRange.colIndex, endRange.colIndex + 1);
});
this._updateCopyDataMergeWith(copyTableData, startRange);
return copyTableData;
}
/**
* Update table html of clipboard data, if has selected cells.
* @param {jQuery} $clipboardContainer - jQuery element
* @override
*/
}, {
key: 'updateTableHtmlOfClipboardIfNeed',
value: function updateTableHtmlOfClipboardIfNeed($clipboardContainer) {
var $selectedCells = this.wwe.componentManager.getManager('tableSelection').getSelectedCells();
if ($selectedCells.length) {
var tableData = _tableDataHandler2.default.createTableData((0, _jquery2.default)($selectedCells[0]).closest('TABLE'));
var _tableRangeHandler$ge = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells),
startRange = _tableRangeHandler$ge.start,
endRange = _tableRangeHandler$ge.end;
var copyTableData = this._createCopyTableData(tableData, startRange, endRange);
var cellIndexData = _tableDataHandler2.default.createCellIndexData(copyTableData);
var renderData = _tableDataHandler2.default.createRenderData(copyTableData, cellIndexData);
$clipboardContainer.html(_tableRenderer2.default.createTableHtml(renderData));
}
}
/**
* Prepare to table cell stuffing
* @param {Array.<Array.<object>>} tableData - table data
* @returns {{maximumCellLength: *, needTableCellStuffingAid: boolean}}
* @override
*/
}, {
key: 'prepareToTableCellStuffing',
value: function prepareToTableCellStuffing(tableData) {
var maximumCellLength = tableData[0].length;
var needTableCellStuffingAid = false;
tableData.slice(1).forEach(function (rowData) {
var cellCount = rowData.length;
if (maximumCellLength !== cellCount) {
needTableCellStuffingAid = true;
if (maximumCellLength < cellCount) {
maximumCellLength = cellCount;
}
}
});
return {
maximumCellLength: maximumCellLength,
needTableCellStuffingAid: needTableCellStuffingAid
};
}
/**
* Append table cells.
* @param {HTMLElement} node Table element
* @override
*/
}, {
key: 'tableCellAppendAidForTableElement',
value: function tableCellAppendAidForTableElement(node) {
var $table = (0, _jquery2.default)(node);
var tableData = _tableDataHandler2.default.createTableData($table);
var added = _tableDataHandler2.default.addTbodyOrTheadIfNeed(tableData);
var tableAidInformation = this.prepareToTableCellStuffing(tableData);
var needTableCellStuffingAid = tableAidInformation.needTableCellStuffingAid;
if (needTableCellStuffingAid) {
_tableDataHandler2.default.stuffCellsIntoIncompleteRow(tableData, tableAidInformation.maximumCellLength);
}
if (added || needTableCellStuffingAid) {
_tableRenderer2.default.replaceTable($table, tableData);
}
}
/**
* Find start cell.
* @param {jQuery} $selectedCells - jQuery elements like td, th
* @returns {HTMLElement}
* @private
*/
}, {
key: '_findStartCell',
value: function _findStartCell($selectedCells) {
var startCell = void 0;
if ($selectedCells.length === 1) {
startCell = $selectedCells.get(0);
} else {
startCell = this.wwe.getEditor().getSelection().startContainer;
}
return startCell;
}
/**
* Find start cell index.
* @param {Array.<Array.<object>>} tableData - table data
* @param {jQuery} $startCell - start jQuery element like td, th
* @returns {{rowIndex: number, colIndex: number}}
* @private
*/
}, {
key: '_findStartCellIndex',
value: function _findStartCellIndex(tableData, $startCell) {
var cellIndexData = _tableDataHandler2.default.createCellIndexData(tableData);
return _tableDataHandler2.default.findCellIndex(cellIndexData, $startCell);
}
/**
* Whether has row merged header in clipboardTableData.
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startCellIndex - start cell index
* @returns {boolean}
* @private
*/
}, {
key: '_hasRowMergedHeader',
value: function _hasRowMergedHeader(clipboardTableData, tableData, startCellIndex) {
var isHeader = tableData[startCellIndex.rowIndex][startCellIndex.colIndex].nodeName === 'TH';
var hasHeaderMerge = any(clipboardTableData[0], function (cellData) {
return cellData.rowspan && cellData.rowspan > 1;
});
return isHeader && hasHeaderMerge;
}
/**
* Whether exactly fit table selection by clipboardTableData.
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {number} targetRowCount - target row count
* @param {number} targetColCount - target col count
* @returns {boolean}
* @private
*/
}, {
key: '_isExactlyFit',
value: function _isExactlyFit(clipboardTableData, targetRowCount, targetColCount) {
return targetRowCount % clipboardTableData.length === 0 && targetColCount % clipboardTableData[0].length === 0;
}
/**
* Update clibpard table data.
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {number} targetRowCount - target row count
* @param {number} targetColCount - target col count
* @private
*/
}, {
key: '_updateClipboardTableData',
value: function _updateClipboardTableData(clipboardTableData, targetRowCount, targetColCount) {
var clipboardRowCount = clipboardTableData.length;
var clipboardColCount = clipboardTableData[0].length;
var increaseRowCount = parseInt(targetRowCount / clipboardRowCount, 10);
var increaseColCount = parseInt(targetColCount / clipboardColCount, 10);
if (increaseRowCount > 1) {
var originalData = JSON.parse(JSON.stringify(clipboardTableData));
_tuiCodeSnippet2.default.range(0, increaseRowCount - 1).forEach(function () {
var newRows = JSON.parse(JSON.stringify(originalData));
clipboardTableData.push.apply(clipboardTableData, newRows);
});
}
if (increaseColCount > 1) {
var _originalData = JSON.parse(JSON.stringify(clipboardTableData));
_tuiCodeSnippet2.default.range(0, increaseColCount - 1).forEach(function () {
var newData = JSON.parse(JSON.stringify(_originalData));
clipboardTableData.forEach(function (rowData, rowIndex) {
rowData.push.apply(rowData, newData[rowIndex]);
});
});
}
}
/**
* Update table data by cliboard table data.
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startCellIndex - start cell index
* @private
*/
}, {
key: '_updateTableDataByClipboardData',
value: function _updateTableDataByClipboardData(clipboardTableData, tableData, startCellIndex) {
var startRowIndex = startCellIndex.rowIndex;
var startColIndex = startCellIndex.colIndex;
clipboardTableData.forEach(function (rowData, rowIndex) {
var updateRowIndex = startRowIndex + rowIndex;
rowData.forEach(function (cellData, colIndex) {
var updateColIndex = startColIndex + colIndex;
var prevCellData = tableData[updateRowIndex][updateColIndex];
cellData.nodeName = prevCellData.nodeName;
tableData[updateRowIndex][updateColIndex] = cellData;
});
});
}
/**
* Whether possible to paste or not.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startCellIndex - start cell index
* @param {{rowIndex: number, colIndex: number}} endCellIndex - end cell index
* @returns {boolean}
* @private
*/
}, {
key: '_isPossibleToPaste',
value: function _isPossibleToPaste(tableData, startCellIndex, endCellIndex) {
var startRowIndex = startCellIndex.rowIndex;
var startColIndex = startCellIndex.colIndex;
var endRowIndex = endCellIndex.rowIndex;
var endColIndex = endCellIndex.colIndex;
var filterdTableData = tableData.slice(startRowIndex, endRowIndex + 1);
var firstRow = filterdTableData[0].slice(startColIndex, endColIndex + 1);
var isPossible = !any(firstRow, function (cellData) {
return _tuiCodeSnippet2.default.isExisty(cellData.rowMergeWith);
});
if (isPossible) {
var firstCells = _tuiCodeSnippet2.default.pluck(filterdTableData, startColIndex);
isPossible = !any(firstCells, function (cellData) {
return _tuiCodeSnippet2.default.isExisty(cellData.colMergeWith);
});
}
if (isPossible && tableData.length > endRowIndex + 1) {
var nextRow = tableData[endRowIndex + 1].slice(startColIndex, endColIndex + 1);
isPossible = !any(nextRow, function (cellData) {
return _tuiCodeSnippet2.default.isExisty(cellData.rowMergeWith);
});
}
if (isPossible && tableData[0].length > endColIndex + 1) {
var nextCells = _tuiCodeSnippet2.default.pluck(filterdTableData, endColIndex + 1);
isPossible = !any(nextCells, function (cellData) {
return _tuiCodeSnippet2.default.isExisty(cellData.colMergeWith);
});
}
return isPossible;
}
/**
* Splice clipboardTableData by target row count and col count.
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {number} targetRowCount - target row count
* @param {number} targetColCount - target col count
* @private
*/
}, {
key: '_spliceClipboardData',
value: function _spliceClipboardData(clipboardTableData, targetRowCount, targetColCount) {
clipboardTableData.splice(targetRowCount);
clipboardTableData.forEach(function (rowData) {
rowData.splice(targetColCount);
});
}
/**
* bookmark last td.
* @param {number} endRowIndex - end row index
* @param {number} endColIndex - end col index
* @private
*/
}, {
key: '_bookmarkLastTd',
value: function _bookmarkLastTd(_ref) {
var endRowIndex = _ref.rowIndex,
endColIndex = _ref.colIndex;
var sq = this.wwe.getEditor();
var $bookmarkedTable = sq.get$Body().find('.' + PASTE_TABLE_BOOKMARK);
var tableData = _tableDataHandler2.default.createTableData($bookmarkedTable);
var lastCellData = tableData[endRowIndex][endColIndex];
endRowIndex = _tuiCodeSnippet2.default.isExisty(lastCellData.rowMergeWith) ? lastCellData.rowMergeWith : endRowIndex;
endColIndex = _tuiCodeSnippet2.default.isExisty(lastCellData.colMergeWith) ? lastCellData.colMergeWith : endColIndex;
var lastCellIndex = tableData[endRowIndex][endColIndex].elementIndex;
var lastTd = $bookmarkedTable.find('tr').eq(lastCellIndex.rowIndex).children()[lastCellIndex.colIndex];
$bookmarkedTable.removeClass(PASTE_TABLE_BOOKMARK);
(0, _jquery2.default)(lastTd).addClass(PASTE_TABLE_CELL_BOOKMARK);
}
/**
* Update clipboard data for paste to smaller selection area than clipboard data.
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} targetRowCount - target row count
* @param {number} targetColCount - target col count
* @param {{rowIndex: number, colIndex: number}} startRange - start table range
* @returns {boolean}
* @private
*/
}, {
key: '_updateClipboardDataForPasteToSamllerSelectedArea',
value: function _updateClipboardDataForPasteToSamllerSelectedArea(clipboardTableData, tableData, targetRowCount, targetColCount, startRange) {
var updated = true;
var startCellIndex = {
rowIndex: 0,
colIndex: 0
};
var endCellIndex = {
rowIndex: targetRowCount - 1,
colIndex: targetColCount - 1
};
if (this._isPossibleToPaste(clipboardTableData, startCellIndex, endCellIndex)) {
this._spliceClipboardData(clipboardTableData, targetRowCount, targetColCount);
this._updateTableDataByClipboardData(clipboardTableData, tableData, startRange);
} else {
updated = false;
}
return updated;
}
/**
* Paste to selected area.
* @param {jQuery} $table - target jQuery table element
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {Array.<Array.<object>>} tableData - table data
* @param {jQuery} $selectedCells - selected jQuery elements like td, th
* @private
*/
}, {
key: '_pasteToSelectedArea',
value: function _pasteToSelectedArea($table, clipboardTableData, tableData, $selectedCells) {
var _tableRangeHandler$ge2 = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells),
startRange = _tableRangeHandler$ge2.start,
endRange = _tableRangeHandler$ge2.end;
var targetRowCount = endRange.rowIndex - startRange.rowIndex + 1;
var targetColCount = endRange.colIndex - startRange.colIndex + 1;
var clipboardRowCount = clipboardTableData.length;
var clipboardColCount = clipboardTableData[0].length;
var isSelectionLargerThanData = targetRowCount >= clipboardRowCount && targetColCount >= clipboardColCount;
var alertMessage = i18n.get('Cannot change part of merged cell');
var updated = true;
var endCellIndex = void 0;
if (this._hasRowMergedHeader(clipboardTableData, tableData, startRange)) {
alertMessage = i18n.get('Cannot paste row merged cells into the table header');
updated = false;
} else if (this._isExactlyFit(clipboardTableData, targetRowCount, targetColCount)) {
endCellIndex = endRange;
this._updateClipboardTableData(clipboardTableData, targetRowCount, targetColCount);
this._updateTableDataByClipboardData(clipboardTableData, tableData, startRange);
} else if (isSelectionLargerThanData) {
endCellIndex = {
rowIndex: startRange.rowIndex + clipboardRowCount - 1,
colIndex: startRange.colIndex + clipboardColCount - 1
};
if (this._isPossibleToPaste(tableData, startRange, endCellIndex)) {
this._updateTableDataByClipboardData(clipboardTableData, tableData, startRange);
} else {
updated = false;
}
} else {
// selected area is smaller then paste data
endCellIndex = {
rowIndex: startRange.rowIndex + targetRowCount - 1,
colIndex: startRange.colIndex + targetColCount - 1
};
updated = this._updateClipboardDataForPasteToSamllerSelectedArea(clipboardTableData, tableData, targetRowCount, targetColCount, startRange);
}
if (updated) {
tableData.className += ' ' + PASTE_TABLE_BOOKMARK;
_tableRenderer2.default.replaceTable($table, tableData);
this._bookmarkLastTd(endCellIndex);
} else {
alert(alertMessage);
this.wwe.focus();
}
}
/**
* Find end cell index.
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {number} startRowIndex - start row index
* @param {number} startColIndex - start col index
* @returns {{rowIndex: number, colIndex: number}}
* @private
*/
}, {
key: '_findEndCellIndex',
value: function _findEndCellIndex(clipboardTableData, _ref2) {
var startRowIndex = _ref2.rowIndex,
startColIndex = _ref2.colIndex;
return {
rowIndex: startRowIndex + clipboardTableData.length - 1,
colIndex: startColIndex + clipboardTableData[0].length - 1
};
}
/**
* Expand row.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} expandCount - expand count
* @private
*/
}, {
key: '_expandRow',
value: function _expandRow(tableData, expandCount) {
var startRowIndex = tableData.length;
var cellCount = tableData[0].length;
var newRows = _tuiCodeSnippet2.default.range(startRowIndex, startRowIndex + expandCount).map(function (rowIndex) {
return _tuiCodeSnippet2.default.range(0, cellCount).map(function (colIndex) {
return _tableDataHandler2.default.createBasicCell(rowIndex, colIndex);
});
});
tableData.push.apply(tableData, newRows);
}
/**
* Expand column.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} expandCount - expand count
* @private
*/
}, {
key: '_expandCoumn',
value: function _expandCoumn(tableData, expandCount) {
var startCellIndex = tableData[0].length;
var additionalCellRange = _tuiCodeSnippet2.default.range(startCellIndex, startCellIndex + expandCount);
tableData.forEach(function (rowData, rowIndex) {
var nodeName = rowData[0].nodeName;
var newCells = additionalCellRange.map(function (colIndex) {
return _tableDataHandler2.default.createBasicCell(rowIndex, colIndex, nodeName);
});
rowData.push.apply(rowData, newCells);
});
}
/**
* Expand table data, if need.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startCellIndex - start cell index
* @param {{rowIndex: number, colIndex: number}} endCellIndex - end cell index
* @private
*/
}, {
key: '_expandTableDataIfNeed',
value: function _expandTableDataIfNeed(tableData, startCellIndex, endCellIndex) {
var expandRowCount = endCellIndex.rowIndex - tableData.length + 1;
var expandCellCount = endCellIndex.colIndex - tableData[0].length + 1;
if (expandRowCount > 0) {
this._expandRow(tableData, expandRowCount);
}
if (expandCellCount > 0) {
this._expandCoumn(tableData, expandCellCount);
}
}
/**
* Paste all clipboard table data.
* @param {jQuery} $table - jQuery table element
* @param {Array.<Array.<object>>} clipboardTableData - table data of clipboard
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startCellIndex - start cell index
* @private
*/
}, {
key: '_pasteAllClipboardTableData',
value: function _pasteAllClipboardTableData($table, clipboardTableData, tableData, startCellIndex) {
var endCellIndex = this._findEndCellIndex(clipboardTableData, startCellIndex);
if (this._hasRowMergedHeader(clipboardTableData, tableData, startCellIndex)) {
alert(i18n.get('Cannot paste row merged cells into the table header'));
this.wwe.focus();
return;
}
this._expandTableDataIfNeed(tableData, startCellIndex, endCellIndex);
if (this._isPossibleToPaste(tableData, startCellIndex, endCellIndex)) {
this._updateTableDataByClipboardData(clipboardTableData, tableData, startCellIndex);
tableData.className += ' ' + PASTE_TABLE_BOOKMARK;
_tableRenderer2.default.replaceTable($table, tableData);
this._bookmarkLastTd(endCellIndex);
} else {
alert(i18n.get('Cannot change part of merged cell'));
this.wwe.focus();
}
}
/**
* Paste clibpard data.
* @param {Node} clipboardTable - table element of clipboard
*/
}, {
key: 'pasteTableData',
value: function pasteTableData(clipboardTable) {
var $clipboardTable = (0, _jquery2.default)(clipboardTable);
var clipboardTableData = _tableDataHandler2.default.createTableData($clipboardTable);
var tableSelectionManager = this.wwe.componentManager.getManager('tableSelection');
var $selectedCells = tableSelectionManager.getSelectedCells();
var $startCell = (0, _jquery2.default)(this._findStartCell($selectedCells));
var $table = $startCell.closest('table');
var tableData = _tableDataHandler2.default.createTableData($table);
var startCellIndex = this._findStartCellIndex(tableData, $startCell);
if ($selectedCells.length > 1) {
// selection
this._pasteToSelectedArea($table, clipboardTableData, tableData, $selectedCells);
} else {
// cursor
this._pasteAllClipboardTableData($table, clipboardTableData, tableData, startCellIndex);
}
}
}]);
return WwMergedTableManager;
}(WwTableManager);
/**
* Whether one of them is true or not.
* @param {Array} arr - target array
* @param {function} contition - condition function
* @returns {boolean}
* @ignore
*/
function any(arr, contition) {
var result = false;
_tuiCodeSnippet2.default.forEach(arr, function (item) {
result = contition(item);
return !result;
});
return result;
}
exports.default = WwMergedTableManager;
/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
* @fileoverview Implements wysiwyg merged table selection manager
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var WwTableSelectionManager = _editorProxy2.default.WwTableSelectionManager;
var TABLE_CELL_SELECTED_CLASS_NAME = 'te-cell-selected';
/**
* Class WwMergedTableSelectionManager
*/
var WwMergedTableSelectionManager = function (_WwTableSelectionMana) {
_inherits(WwMergedTableSelectionManager, _WwTableSelectionMana);
/**
* Creates an instance of WwMergedTableSelectionManager.
* @param {WysiwygEditor} wwe - WysiwygEditor instance
* @memberof WwMergedTableSelectionManager
*/
function WwMergedTableSelectionManager(wwe) {
_classCallCheck(this, WwMergedTableSelectionManager);
/**
* table cache data
* @type {Array.<Array.<Object>>}
* @private
*/
var _this = _possibleConstructorReturn(this, (WwMergedTableSelectionManager.__proto__ || Object.getPrototypeOf(WwMergedTableSelectionManager)).call(this, wwe));
_this._tableData = null;
_this.mergedTableSelectionManager = true;
return _this;
}
/**
* Add css class for selected cells.
* @param {jQuery} $table - table jQuery element
* @param {Array.<Array.<object>>} tableData - table data
* @param {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }} tableRange - table selected range
* @private
*/
_createClass(WwMergedTableSelectionManager, [{
key: '_addClassToSelectedCells',
value: function _addClassToSelectedCells($table, tableData, tableRange) {
var startRange = tableRange.start;
var endRange = tableRange.end;
var cellIndexRange = _tuiCodeSnippet2.default.range(startRange.colIndex, endRange.colIndex + 1);
var $trs = $table.find('tr');
_tuiCodeSnippet2.default.range(startRange.rowIndex, endRange.rowIndex + 1).forEach(function (rowIndex) {
var rowData = tableData[rowIndex];
var $cells = $trs.eq(rowIndex).find('td, th');
return cellIndexRange.forEach(function (colIndex) {
var cellData = rowData[colIndex];
if (cellData.elementIndex) {
$cells.eq(rowData[colIndex].elementIndex.colIndex).addClass(TABLE_CELL_SELECTED_CLASS_NAME);
}
});
});
}
/**
* cache table data on drag start
* @param {HTMLElement} selectionStart - start element
*/
}, {
key: 'onDragStart',
value: function onDragStart(selectionStart) {
var $table = (0, _jquery2.default)(selectionStart).closest('[contenteditable=true] table');
this._tableData = _tableDataHandler2.default.createTableData($table);
}
/**
* clear table data in cache on drag end
*/
}, {
key: 'onDragEnd',
value: function onDragEnd() {
this._tableData = null;
}
/**
* Highlight selected table cells
* @param {HTMLElement} selectionStart start element
* @param {HTMLElement} selectionEnd end element
* @override
*/
}, {
key: 'highlightTableCellsBy',
value: function highlightTableCellsBy(selectionStart, selectionEnd) {
var $start = (0, _jquery2.default)(selectionStart);
var $end = (0, _jquery2.default)(selectionEnd);
var $table = $start.closest('[contenteditable=true] table');
var tableRange = _tableRangeHandler2.default.findSelectionRange(this._tableData, $start, $end);
this.removeClassAttrbuteFromAllCellsIfNeed();
this._addClassToSelectedCells($table, this._tableData, tableRange);
}
/**
* Style to selected cells.
* @param {function} onStyle - function for styling
* @param {Object} [options] - options to be passed into onStyle
*/
}, {
key: 'styleToSelectedCells',
value: function styleToSelectedCells(onStyle, options) {
var sq = this.wwe.getEditor();
var range = sq.getSelection().cloneRange();
var $table = (0, _jquery2.default)(range.startContainer).closest('[contenteditable=true] table');
$table.find('tr').get().forEach(function (tr) {
var $cells = (0, _jquery2.default)(tr).find('.' + TABLE_CELL_SELECTED_CLASS_NAME);
var firstSelectedCell = $cells.first().get(0);
var lastSelectedCell = $cells.last().get(0);
if (!$cells.length) {
return;
}
range.setStart(firstSelectedCell, 0);
range.setEnd(lastSelectedCell, lastSelectedCell.childNodes.length);
sq.setSelection(range);
onStyle(sq, options);
});
}
/**
* Whether has selected both TH and TD.
* @param {jQuery} $selectedCells - selected cells jQuery element
* @returns {boolean}
*/
}, {
key: 'hasSelectedBothThAndTd',
value: function hasSelectedBothThAndTd($selectedCells) {
$selectedCells = $selectedCells || this.getSelectedCells();
return $selectedCells.first()[0].nodeName !== $selectedCells.last()[0].nodeName;
}
}]);
return WwMergedTableSelectionManager;
}(WwTableSelectionManager);
exports.default = WwMergedTableSelectionManager;
/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._createNewRow = _createNewRow;
exports._addRow = _addRow;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @fileoverview Implements mergedTableAddRow. Add Row to selected table
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var CommandManager = _editorProxy2.default.CommandManager;
var AddRow = void 0;
if (CommandManager) {
AddRow = CommandManager.command('wysiwyg', /** @lends AddRow */{
name: 'AddRow',
/**
* Command handler.
* @param {WysiwygEditor} wwe - wysiwygEditor instance
*/
exec: function exec(wwe) {
var sq = wwe.getEditor();
var range = sq.getSelection().cloneRange();
wwe.focus();
if (!sq.hasFormat('TABLE')) {
return;
}
var $startContainer = (0, _jquery2.default)(range.startContainer);
var $table = $startContainer.closest('table');
var tableData = _tableDataHandler2.default.createTableData($table);
var $selectedCells = wwe.componentManager.getManager('tableSelection').getSelectedCells();
var tableRange = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells, $startContainer);
sq.saveUndoState(range);
_addRow(tableData, tableRange);
var $newTable = _tableRenderer2.default.replaceTable($table, tableData);
var focusTd = _findFocusTd($newTable, tableRange.end.rowIndex, tableRange.start.colIndex);
_tableRenderer2.default.focusToCell(sq, range, focusTd);
}
});
}
/**
* Create row merged cell data.
* @param {number} rowMergeWith - row merge with index
* @returns {{
* nodeName: string,
* rowMergeWith: number
* }}
* @private
*/
function _createRowMergedCell(rowMergeWith) {
return {
nodeName: 'TD',
rowMergeWith: rowMergeWith
};
}
/**
* Create new row.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} rowIndex - row index of table data
* @returns {object}
* @private
*/
function _createNewRow(tableData, rowIndex) {
var prevCell = null;
return tableData[rowIndex].map(function (cellData, colIndex) {
var newCell = void 0;
if (_tuiCodeSnippet2.default.isExisty(cellData.rowMergeWith)) {
var rowMergeWith = cellData.rowMergeWith;
var merger = tableData[rowMergeWith][colIndex];
var lastMergedRowIndex = rowMergeWith + merger.rowspan - 1;
if (_tuiCodeSnippet2.default.isExisty(merger.colMergeWith) && prevCell) {
newCell = _tuiCodeSnippet2.default.extend({}, prevCell);
} else if (lastMergedRowIndex > rowIndex) {
merger.rowspan += 1;
newCell = _tuiCodeSnippet2.default.extend({}, cellData);
}
} else if (cellData.rowspan > 1) {
cellData.rowspan += 1;
newCell = _createRowMergedCell(rowIndex);
}
if (!newCell) {
newCell = _tableDataHandler2.default.createBasicCell(rowIndex + 1, colIndex);
}
prevCell = newCell;
return newCell;
});
}
/**
* Add row.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }} tableRange - table selection range
* @param {number} rowIndex - row index of table data
* @param {number} colIndex - column index of tabld data
* @private
*/
function _addRow(tableData, tableRange) {
var startRowIndex = tableRange.start.rowIndex;
var endRange = tableRange.end;
var endRowIndex = _tableDataHandler2.default.findRowMergedLastIndex(tableData, endRange.rowIndex, endRange.colIndex);
var newRows = _tuiCodeSnippet2.default.range(startRowIndex, endRowIndex + 1).map(function () {
return _createNewRow(tableData, endRowIndex);
});
tableData.splice.apply(tableData, [endRowIndex + 1, 0].concat(newRows));
}
/**
* Find focus td element.
* @param {jQuery} $newTable - changed table jQuery element
* @param {number} rowIndex - row index of table data
* @param {number} colIndex - column index of tabld data
* @returns {HTMLElement}
* @private
*/
function _findFocusTd($newTable, rowIndex, colIndex) {
var tableData = _tableDataHandler2.default.createTableData($newTable);
var newRowIndex = _tableDataHandler2.default.findRowMergedLastIndex(tableData, rowIndex, colIndex) + 1;
var cellElementIndex = _tableDataHandler2.default.findElementIndex(tableData, newRowIndex, colIndex);
return $newTable.find('tr').eq(cellElementIndex.rowIndex).find('td')[cellElementIndex.colIndex];
}
exports.default = AddRow;
/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._createNewColumns = _createNewColumns;
exports._addColumns = _addColumns;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @fileoverview Implements mergedTableAddCol. Add Row to selected table.
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var CommandManager = _editorProxy2.default.CommandManager;
var AddCol = void 0;
if (CommandManager) {
AddCol = CommandManager.command('wysiwyg', /** @lends AddCol */{
name: 'AddCol',
/**
* Command handler.
* @param {WysiwygEditor} wwe - wysiwygEditor instance
*/
exec: function exec(wwe) {
var sq = wwe.getEditor();
var range = sq.getSelection().cloneRange();
wwe.focus();
if (!sq.hasFormat('TABLE')) {
return;
}
var $startContainer = (0, _jquery2.default)(range.startContainer);
var $table = $startContainer.closest('table');
var tableData = _tableDataHandler2.default.createTableData($table);
var $selectedCells = wwe.componentManager.getManager('tableSelection').getSelectedCells();
var tableRange = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells, $startContainer);
sq.saveUndoState(range);
_addColumns(tableData, tableRange);
var $newTable = _tableRenderer2.default.replaceTable($table, tableData);
var focusCell = _findFocusCell($newTable, tableRange.start.rowIndex, tableRange.end.colIndex);
_tableRenderer2.default.focusToCell(sq, range, focusCell);
}
});
}
/**
* Create column merged cell.
* @param {number} colMergeWith - column merge start index
* @param {string} nodeName - node name
* @returns {{
* nodeName: string,
* colMerged: boolean,
* colMergeWith: number
* }}
* @private
*/
function _createColMergedCell(colMergeWith, nodeName) {
return {
nodeName: nodeName,
colMergeWith: colMergeWith
};
}
/**
* Create new cell data.
* @param {Array.<object>} rowData - row data of table data
* @param {number} rowIndex - row index of table data
* @param {number} colIndex - column index of table data
* @param {object | null} prevCell - previous cell data
* @returns {object}
* @private
*/
function _createNewCell(rowData, rowIndex, colIndex, prevCell) {
var cellData = rowData[colIndex];
var newCell = void 0;
if (_tuiCodeSnippet2.default.isExisty(cellData.colMergeWith)) {
var colMergeWith = cellData.colMergeWith;
var merger = rowData[colMergeWith];
var lastMergedCellIndex = colMergeWith + merger.colspan - 1;
if (_tuiCodeSnippet2.default.isExisty(merger.rowMergeWith) && prevCell) {
newCell = _tuiCodeSnippet2.default.extend({}, prevCell);
} else if (lastMergedCellIndex > colIndex) {
merger.colspan += 1;
newCell = _tuiCodeSnippet2.default.extend({}, cellData);
}
} else if (cellData.colspan > 1) {
cellData.colspan += 1;
newCell = _createColMergedCell(colIndex, cellData.nodeName);
}
if (!newCell) {
newCell = _tableDataHandler2.default.createBasicCell(rowIndex, colIndex + 1, cellData.nodeName);
}
return newCell;
}
/**
* Create new columns.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} startColIndex - start column index
* @param {number} endColIndex - end column index
* @returns {Array.<Array.<object>>}
* @private
*/
function _createNewColumns(tableData, startColIndex, endColIndex) {
var colIndexes = _tuiCodeSnippet2.default.range(startColIndex, endColIndex + 1);
var newColumns = [];
var prevCells = null;
tableData.forEach(function (rowData, rowIndex) {
var newCells = colIndexes.map(function (colIndex, index) {
var prevCell = prevCells ? prevCells[index - 1] : null;
return _createNewCell(rowData, rowIndex, endColIndex, prevCell);
});
prevCells = newCells;
newColumns.push(newCells);
});
return newColumns;
}
/**
* Add columns.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }} tableRange - table selection range
* @private
*/
function _addColumns(tableData, tableRange) {
var endRange = tableRange.end;
var endColIndex = _tableDataHandler2.default.findColMergedLastIndex(tableData, endRange.rowIndex, endRange.colIndex);
var newColumns = _createNewColumns(tableData, tableRange.start.colIndex, endColIndex);
var newColIndex = endColIndex + 1;
tableData.forEach(function (rowData, rowIndex) {
rowData.splice.apply(rowData, [newColIndex, 0].concat(newColumns[rowIndex]));
});
}
/**
* Find focus cell element like td or th.
* @param {jQuery} $newTable - changed table jQuery element
* @param {number} rowIndex - row index of table data
* @param {number} colIndex - column index of tabld data
* @returns {HTMLElement}
* @private
*/
function _findFocusCell($newTable, rowIndex, colIndex) {
var tableData = _tableDataHandler2.default.createTableData($newTable);
var newColIndex = _tableDataHandler2.default.findColMergedLastIndex(tableData, rowIndex, colIndex) + 1;
var cellElementIndex = _tableDataHandler2.default.findElementIndex(tableData, rowIndex, newColIndex);
return $newTable.find('tr').eq(cellElementIndex.rowIndex).find('td, th')[cellElementIndex.colIndex];
}
exports.default = AddCol;
/***/ }),
/* 59 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._removeRow = _removeRow;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @fileoverview Implements mergedTableRemoveRow
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var CommandManager = _editorProxy2.default.CommandManager;
var RemoveRow = void 0;
if (CommandManager) {
RemoveRow = CommandManager.command('wysiwyg', /** @lends RemoveRow */{
name: 'RemoveRow',
/**
* Command handler.
* @param {WysiwygEditor} wwe - wysiwygEditor instance
*/
exec: function exec(wwe) {
var sq = wwe.getEditor();
var range = sq.getSelection().cloneRange();
wwe.focus();
if (!sq.hasFormat('TABLE')) {
return;
}
var $startContainer = (0, _jquery2.default)(range.startContainer);
var $table = $startContainer.closest('table');
var tableData = _tableDataHandler2.default.createTableData($table);
var beforeRowLength = tableData.length;
var $selectedCells = wwe.componentManager.getManager('tableSelection').getSelectedCells();
var tableRange = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells, $startContainer);
sq.saveUndoState(range);
_removeRow(tableData, tableRange);
if (tableData.length < 2) {
$table.remove();
} else if (beforeRowLength !== tableData.length) {
var $newTable = _tableRenderer2.default.replaceTable($table, tableData);
var startRowIndex = tableRange.start.rowIndex;
var focusRowIndex = startRowIndex < tableData.length ? startRowIndex : startRowIndex - 1;
var focusCell = _findFocusTd($newTable, focusRowIndex, tableRange.start.colIndex);
_tableRenderer2.default.focusToCell(sq, range, focusCell);
}
}
});
}
/**
* Update rowspan to row merger.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} startRowIndex - start row index
* @param {number} endRowIndex - end row index
* @private
*/
function _updateRowspan(tableData, startRowIndex, endRowIndex) {
_tuiCodeSnippet2.default.range(startRowIndex, endRowIndex + 1).forEach(function (rowIndex) {
tableData[rowIndex].forEach(function (cell, cellIndex) {
if (_tuiCodeSnippet2.default.isExisty(cell.rowMergeWith)) {
var merger = tableData[cell.rowMergeWith][cellIndex];
if (merger.rowspan) {
merger.rowspan -= 1;
}
} else if (cell.rowspan > 1) {
var lastMergedRowIndex = rowIndex + cell.rowspan - 1;
cell.rowspan -= endRowIndex - rowIndex + 1;
if (lastMergedRowIndex > endRowIndex) {
tableData[endRowIndex + 1][cellIndex] = _tuiCodeSnippet2.default.extend({}, cell);
}
}
});
});
}
/**
* Update row merge start index to merged cell.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} startRowIndex - start row index
* @param {number} endRowIndex - end row index
* @private
*/
function _updateMergeStartIndex(tableData, startRowIndex, endRowIndex) {
tableData.slice(endRowIndex + 1).forEach(function (row) {
row.forEach(function (cell) {
if (_tuiCodeSnippet2.default.isExisty(cell.rowMergeWith) && cell.rowMergeWith >= startRowIndex) {
cell.rowMergeWith = endRowIndex + 1;
}
});
});
}
/**
* Remove row.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }} tableRange - table selection range
* @private
*/
function _removeRow(tableData, tableRange) {
var startRowIndex = tableRange.start.rowIndex;
var endRange = tableRange.end;
var endRowIndex = _tableDataHandler2.default.findRowMergedLastIndex(tableData, endRange.rowIndex, endRange.colIndex);
if (startRowIndex === 0 && endRowIndex === 0) {
return;
}
startRowIndex = Math.max(startRowIndex, 1);
endRowIndex = Math.max(endRowIndex, 1);
var removeCount = endRowIndex - startRowIndex + 1;
// if only table body or table header left, remove table
if (tableData.length - removeCount < 2) {
tableData.splice(0, tableData.length);
} else {
_updateRowspan(tableData, startRowIndex, endRowIndex);
_updateMergeStartIndex(tableData, startRowIndex, endRowIndex);
tableData.splice(startRowIndex, removeCount);
}
}
/**
* Find focus td element.
* @param {jQuery} $newTable - changed table jQuery element
* @param {number} rowIndex - row index of table data
* @param {number} colIndex - column index of tabld data
* @returns {HTMLElement}
* @private
*/
function _findFocusTd($newTable, rowIndex, colIndex) {
var tableData = _tableDataHandler2.default.createTableData($newTable);
if (tableData.length - 1 < rowIndex) {
rowIndex -= 1;
}
var cellElementIndex = _tableDataHandler2.default.findElementIndex(tableData, rowIndex, colIndex);
return $newTable.find('tr').eq(cellElementIndex.rowIndex).find('th,td')[cellElementIndex.colIndex];
}
exports.default = RemoveRow;
/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._removeColumns = _removeColumns;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @fileoverview Implements mergedTableRemoveCol. Remove col to selected table
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var CommandManager = _editorProxy2.default.CommandManager;
var RemoveCol = void 0;
if (CommandManager) {
RemoveCol = CommandManager.command('wysiwyg', /** @lends RemoveCol */{
name: 'RemoveCol',
/**
* Command handler.
* @param {WysiwygEditor} wwe - wysiwygEditor instance
*/
exec: function exec(wwe) {
var sq = wwe.getEditor();
var range = sq.getSelection().cloneRange();
wwe.focus();
if (!sq.hasFormat('TABLE')) {
return;
}
var $startContainer = (0, _jquery2.default)(range.startContainer);
var $table = $startContainer.closest('table');
var tableData = _tableDataHandler2.default.createTableData($table);
var $selectedCells = wwe.componentManager.getManager('tableSelection').getSelectedCells();
var tableRange = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells, $startContainer);
var beforeCellLength = tableData[0].length;
sq.saveUndoState(range);
_removeColumns(tableData, tableRange);
if (tableData[0].length === 0) {
$table.remove();
} else if (beforeCellLength !== tableData[0].length) {
var $newTable = _tableRenderer2.default.replaceTable($table, tableData);
var startColIndex = tableRange.start.colIndex;
var focusColIndex = startColIndex >= tableData[0].length ? startColIndex - 1 : startColIndex;
var focusCell = _findFocusCell($newTable, tableRange.start.rowIndex, focusColIndex);
_tableRenderer2.default.focusToCell(sq, range, focusCell);
}
}
});
}
/**
* Update colspan to col merger.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} startColIndex - start col index
* @param {number} endColIndex - end col index
* @private
*/
function _updateColspan(tableData, startColIndex, endColIndex) {
tableData.forEach(function (rowData) {
_tuiCodeSnippet2.default.range(startColIndex, endColIndex + 1).forEach(function (colIndex) {
var cellData = rowData[colIndex];
if (_tuiCodeSnippet2.default.isExisty(cellData.colMergeWith)) {
var merger = rowData[cellData.colMergeWith];
if (merger.colspan) {
merger.colspan -= 1;
}
} else if (cellData.colspan > 1) {
var lastMergedCellIndex = colIndex + cellData.colspan - 1;
cellData.colspan -= endColIndex - colIndex + 1;
if (lastMergedCellIndex > endColIndex) {
rowData[endColIndex + 1] = _tuiCodeSnippet2.default.extend({}, cellData);
}
}
});
});
}
/**
* Update row merge start index to merged cell.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} startColIndex - start col index
* @param {number} endColIndex - end col index
* @private
*/
function _updateMergeStartIndex(tableData, startColIndex, endColIndex) {
tableData.forEach(function (rowData) {
rowData.slice(endColIndex + 1).forEach(function (cellData) {
if (_tuiCodeSnippet2.default.isExisty(cellData.colMergeWith) && cellData.colMergeWith >= startColIndex) {
cellData.colMergeWith = endColIndex + 1;
}
});
});
}
/**
* Remove columns.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{
* start: {rowIndex: number, colIndex: number},
* end: {rowIndex: number, colIndex: number}
* }} tableRange - table selection range
* @private
*/
function _removeColumns(tableData, tableRange) {
var startColIndex = tableRange.start.colIndex;
var endRange = tableRange.end;
var endColIndex = _tableDataHandler2.default.findColMergedLastIndex(tableData, endRange.rowIndex, endRange.colIndex);
var removeCount = endColIndex - startColIndex + 1;
_updateColspan(tableData, startColIndex, endColIndex);
_updateMergeStartIndex(tableData, startColIndex, endColIndex);
tableData.forEach(function (row) {
row.splice(startColIndex, removeCount);
});
}
/**
* Find focus cell element like td or th.
* @param {jQuery} $newTable - changed table jQuery element
* @param {number} rowIndex - row index of table data
* @param {number} colIndex - column index of tabld data
* @returns {HTMLElement}
* @private
*/
function _findFocusCell($newTable, rowIndex, colIndex) {
var tableData = _tableDataHandler2.default.createTableData($newTable);
if (tableData[0].length - 1 < colIndex) {
colIndex -= 1;
}
var cellElementIndex = _tableDataHandler2.default.findElementIndex(tableData, rowIndex, colIndex);
return $newTable.find('tr').eq(cellElementIndex.rowIndex).find('td, th')[cellElementIndex.colIndex];
}
exports.default = RemoveCol;
/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @fileoverview Implements mergedTableAlignCol. Align selected column's text content to given direction
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var CommandManager = _editorProxy2.default.CommandManager;
var AlignCol = void 0;
if (CommandManager) {
AlignCol = CommandManager.command('wysiwyg', /** @lends AlignCol */{
name: 'AlignCol',
/**
* Command handler.
* @param {WysiwygEditor} wwe - wysiwygEditor instance
* @param {string} alignDirection - align direction for table header
*/
exec: function exec(wwe, alignDirection) {
var sq = wwe.getEditor();
var range = sq.getSelection().cloneRange();
wwe.focus();
if (!sq.hasFormat('TABLE')) {
return;
}
var $startContainer = (0, _jquery2.default)(range.startContainer);
var $table = $startContainer.closest('table');
var tableData = _tableDataHandler2.default.createTableData($table);
var $selectedCells = wwe.componentManager.getManager('tableSelection').getSelectedCells();
var tableRange = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells, $startContainer);
_align(tableData[0], tableRange.start.colIndex, tableRange.end.colIndex, alignDirection);
var $newTable = _tableRenderer2.default.replaceTable($table, tableData);
var focusCell = _findFocusCell($newTable, $startContainer);
_tableRenderer2.default.focusToCell(sq, range, focusCell);
}
});
}
/**
* Align to table header.
* @param {Array.<object>} headRowData - head row data
* @param {number} startColIndex - start column index for styling align
* @param {number} endColIndex - end column index for styling align
* @param {string} alignDirection - align direction
* @private
*/
function _align(headRowData, startColIndex, endColIndex, alignDirection) {
_tuiCodeSnippet2.default.range(startColIndex, endColIndex + 1).forEach(function (colIndex) {
var headCellData = headRowData[colIndex];
if (_tuiCodeSnippet2.default.isExisty(headCellData.colMergeWith)) {
headRowData[headCellData.colMergeWith].align = alignDirection;
} else {
headCellData.align = alignDirection;
}
});
}
/**
* Find focus cell element like td or th.
* @param {jQuery} $newTable - changed table jQuery element
* @param {jQuery} $startContainer - start container jQuery element of text range
* @returns {HTMLElement}
* @private
*/
function _findFocusCell($newTable, $startContainer) {
var elementRowIndex = _tableDataHandler2.default.findElementRowIndex($startContainer);
var elementColIndex = _tableDataHandler2.default.findElementColIndex($startContainer);
return $newTable.find('tr').eq(elementRowIndex).find('td, th')[elementColIndex];
}
exports.default = AlignCol;
/***/ }),
/* 62 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._mergeCells = _mergeCells;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @fileoverview Implements MergeCell
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var CommandManager = _editorProxy2.default.CommandManager;
var BASIC_CELL_CONTENT = _tuiCodeSnippet2.default.browser.msie ? '' : '<br>';
var MergeCell = void 0;
if (CommandManager) {
MergeCell = CommandManager.command('wysiwyg', /** @lends MergeCell */{
name: 'MergeCells',
/**
* Command handler.
* @param {WysiwygEditor} wwe - wysiwygEditor instance
*/
exec: function exec(wwe) {
var sq = wwe.getEditor();
wwe.focus();
if (!sq.hasFormat('TABLE')) {
return;
}
var selectionManager = wwe.componentManager.getManager('tableSelection');
var $selectedCells = selectionManager.getSelectedCells();
if ($selectedCells.length < 2 || selectionManager.hasSelectedBothThAndTd($selectedCells)) {
return;
}
var range = sq.getSelection().cloneRange();
var $startContainer = (0, _jquery2.default)(range.startContainer);
var $table = $startContainer.closest('table');
var tableData = _tableDataHandler2.default.createTableData($table);
var tableRange = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells, $startContainer);
_mergeCells(tableData, tableRange);
var $newTable = _tableRenderer2.default.replaceTable($table, tableData);
var focusCell = _findFocusCell($newTable, tableRange.start.rowIndex, tableRange.start.colIndex);
_tableRenderer2.default.focusToCell(sq, range, focusCell);
}
});
}
/**
* Pick merger content from selected cells.
* @param {Array.<Array.<object>>} targetRows - target rows
* @param {number} startColIndex - start column index
* @param {number} endColIndex - end column index
* @returns {string}
* @private
*/
function _pickContent(targetRows, startColIndex, endColIndex) {
var _ref;
var limitColIndex = endColIndex + 1;
var cells = (_ref = []).concat.apply(_ref, targetRows.map(function (rowData) {
return rowData.slice(startColIndex, limitColIndex);
}));
var foundCellData = cells.filter(function (_ref2) {
var content = _ref2.content;
return content && content !== BASIC_CELL_CONTENT;
});
return foundCellData.length ? foundCellData[0].content : BASIC_CELL_CONTENT;
}
/**
* Initialize cell data of target rows.
* @param {Array.<Array.<object>>} targetRows - target rows
* @param {number} startColIndex - start column index
* @param {number} endColIndex - end column index
* @private
*/
function _initCellData(targetRows, startColIndex, endColIndex) {
var _ref3;
var limitColIndex = endColIndex + 1;
var targetCells = targetRows.map(function (rowData) {
return rowData.slice(startColIndex, limitColIndex);
});
(_ref3 = []).concat.apply(_ref3, targetCells).slice(1).forEach(function (cellData) {
var nodeName = cellData.nodeName;
_tuiCodeSnippet2.default.forEach(cellData, function (value, name) {
return delete cellData[name];
});
cellData.nodeName = nodeName;
});
}
/**
* Update rowMergeWith property of target rows for row merge.
* @param {Array.<Array.<object>>} targetRows - target rows
* @param {number} startColIndex - start column index
* @param {number} endColIndex - end column index
* @param {number} rowMergeWith - index of row merger
* @private
*/
function _updateRowMergeWith(targetRows, startColIndex, endColIndex, rowMergeWith) {
var limitColIndex = endColIndex + 1;
targetRows.forEach(function (rowData) {
rowData.slice(startColIndex, limitColIndex).forEach(function (cellData) {
cellData.rowMergeWith = rowMergeWith;
});
});
}
/**
* Update colMergeWith property of target rows for column merge.
* @param {Array.<Array.<object>>} targetRows - target rows
* @param {number} startColIndex - start column index
* @param {number} endColIndex - end column index
* @param {number} colMergeWith - index of column merger
* @private
*/
function _updateColMergeWith(targetRows, startColIndex, endColIndex, colMergeWith) {
var limitColIndex = endColIndex + 1;
targetRows.forEach(function (rowData) {
rowData.slice(startColIndex, limitColIndex).forEach(function (cellData) {
cellData.colMergeWith = colMergeWith;
});
});
}
/**
* Merge selected cells.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startRange - start table selection range
* @param {{rowIndex: number, colIndex: number}} endRange - end table selection range
* @private
*/
function _mergeCells(tableData, _ref4) {
var startRange = _ref4.start,
endRange = _ref4.end;
var startRowIndex = startRange.rowIndex;
var startColIndex = startRange.colIndex;
var endRowIndex = endRange.rowIndex;
var endColIndex = endRange.colIndex;
var merger = tableData[startRowIndex][startColIndex];
var targetRows = tableData.slice(startRowIndex, endRowIndex + 1);
var rowspan = endRowIndex - startRowIndex + 1;
var colspan = endColIndex - startColIndex + 1;
merger.rowspan = rowspan;
merger.colspan = colspan;
merger.content = _pickContent(targetRows, startColIndex, endColIndex);
_initCellData(targetRows, startColIndex, endColIndex);
if (rowspan > 1) {
_updateRowMergeWith(targetRows.slice(1), startColIndex, endColIndex, startRowIndex);
}
if (colspan > 1) {
_updateColMergeWith(targetRows, startColIndex + 1, endColIndex, startColIndex);
}
}
/**
* Find focus cell element like td or th.
* @param {jQuery} $newTable - changed table jQuery element
* @param {number} rowIndex - row index of table data
* @param {number} colIndex - column index of tabld data
* @returns {HTMLElement}
* @private
*/
function _findFocusCell($newTable, rowIndex, colIndex) {
var tableData = _tableDataHandler2.default.createTableData($newTable);
var cellElementIndex = _tableDataHandler2.default.findElementIndex(tableData, rowIndex, colIndex);
return $newTable.find('tr').eq(cellElementIndex.rowIndex).find('td, th')[cellElementIndex.colIndex];
}
exports.default = MergeCell;
/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._hasMergedCell = _hasMergedCell;
exports._unmergeCells = _unmergeCells;
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _tuiCodeSnippet = __webpack_require__(2);
var _tuiCodeSnippet2 = _interopRequireDefault(_tuiCodeSnippet);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
var _tableDataHandler = __webpack_require__(3);
var _tableDataHandler2 = _interopRequireDefault(_tableDataHandler);
var _tableRangeHandler = __webpack_require__(7);
var _tableRangeHandler2 = _interopRequireDefault(_tableRangeHandler);
var _tableRenderer = __webpack_require__(6);
var _tableRenderer2 = _interopRequireDefault(_tableRenderer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @fileoverview Implements UnmergeCell
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var CommandManager = _editorProxy2.default.CommandManager;
var UnmergeCell = void 0;
if (CommandManager) {
UnmergeCell = CommandManager.command('wysiwyg', /** @lends UnmergeCell */{
name: 'UnmergeCells',
/**
* Command handler.
* @param {WysiwygEditor} wwe - wysiwygEditor instance
*/
exec: function exec(wwe) {
var sq = wwe.getEditor();
var range = sq.getSelection().cloneRange();
wwe.focus();
if (!sq.hasFormat('TABLE')) {
return;
}
var $startContainer = (0, _jquery2.default)(range.startContainer);
var $table = $startContainer.closest('table');
var tableData = _tableDataHandler2.default.createTableData($table);
var $selectedCells = wwe.componentManager.getManager('tableSelection').getSelectedCells();
var tableRange = _tableRangeHandler2.default.getTableSelectionRange(tableData, $selectedCells, $startContainer);
if (!_hasMergedCell(tableData, tableRange)) {
return;
}
_unmergeCells(tableData, tableRange);
var $newTable = _tableRenderer2.default.replaceTable($table, tableData);
var focusCell = _findFocusCell($newTable, tableRange.start.rowIndex, tableRange.start.colIndex);
_tableRenderer2.default.focusToCell(sq, range, focusCell);
}
});
}
/**
* Whether has merged cell.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startRange - start table selection range
* @param {{rowIndex: number, colIndex: number}} endRange - end table selection range
* @returns {boolean}
* @private
*/
function _hasMergedCell(tableData, _ref) {
var _ref2;
var startRange = _ref.start,
endRange = _ref.end;
var startColIndex = startRange.colIndex;
var limitColIndex = endRange.colIndex + 1;
var targetRows = tableData.slice(startRange.rowIndex, endRange.rowIndex + 1);
var targetCells = targetRows.map(function (rowData) {
return rowData.slice(startColIndex, limitColIndex);
});
return !!(_ref2 = []).concat.apply(_ref2, targetCells).filter(function (cellData) {
return cellData.colspan > 1 || cellData.rowspan > 1;
}).length;
}
/**
* Update merged cell data to basic cell data.
* @param {Array.<Array.<object>>} tableData - table data
* @param {number} startRowIndex - start row index
* @param {number} startColIndex - start col index
* @param {number} rowspan - rowspan property of merger cell
* @param {number} colspan - colspan property of merger cell
* @private
*/
function _updateMergedCells(tableData, startRowIndex, startColIndex, rowspan, colspan) {
var limitRowIndex = startRowIndex + rowspan;
var limitColIndex = startColIndex + colspan;
var colRange = _tuiCodeSnippet2.default.range(startColIndex, limitColIndex);
_tuiCodeSnippet2.default.range(startRowIndex, limitRowIndex).forEach(function (rowIndex) {
var rowData = tableData[rowIndex];
var startIndex = rowIndex === startRowIndex ? 1 : 0;
colRange.slice(startIndex).forEach(function (colIndex) {
rowData[colIndex] = _tableDataHandler2.default.createBasicCell(rowIndex, colIndex, rowData[colIndex].nodeName);
});
});
}
/**
* Unmerge selected cells.
* @param {Array.<Array.<object>>} tableData - table data
* @param {{rowIndex: number, colIndex: number}} startRange - start table selection range
* @param {{rowIndex: number, colIndex: number}} endRange - end table selection range
* @private
*/
function _unmergeCells(tableData, _ref3) {
var startRange = _ref3.start,
endRange = _ref3.end;
var colRange = _tuiCodeSnippet2.default.range(startRange.colIndex, endRange.colIndex + 1);
_tuiCodeSnippet2.default.range(startRange.rowIndex, endRange.rowIndex + 1).forEach(function (rowIndex) {
colRange.forEach(function (colIndex) {
var cellData = tableData[rowIndex][colIndex];
var colspan = cellData.colspan,
rowspan = cellData.rowspan;
if (colspan > 1 || rowspan > 1) {
cellData.colspan = 1;
cellData.rowspan = 1;
_updateMergedCells(tableData, rowIndex, colIndex, rowspan, colspan);
}
});
});
}
/**
* Find focus cell element like td or th.
* @param {jQuery} $newTable - changed table jQuery element
* @param {number} rowIndex - row index of table data
* @param {number} colIndex - column index of tabld data
* @returns {HTMLElement}
* @private
*/
function _findFocusCell($newTable, rowIndex, colIndex) {
var tableData = _tableDataHandler2.default.createTableData($newTable);
var cellElementIndex = _tableDataHandler2.default.findElementIndex(tableData, rowIndex, colIndex);
return $newTable.find('tr').eq(cellElementIndex.rowIndex).find('td, th')[cellElementIndex.colIndex];
}
exports.default = UnmergeCell;
/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _jquery = __webpack_require__(0);
var _jquery2 = _interopRequireDefault(_jquery);
var _editorProxy = __webpack_require__(1);
var _editorProxy2 = _interopRequireDefault(_editorProxy);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @fileoverview Implements table extension ui
* @author NHN Ent. FE Development Lab <dl_javascript@nhnent.com>
*/
var i18n = _editorProxy2.default.i18n;
/**
* Change contextmenu content.
* @param {object} popupTableUtils - PopupTableUtils instance for managing contextmenu of table
* @private
*/
function _changeContent(popupTableUtils) {
var POPUP_CONTENT = ['<button type="button" class="te-table-add-row">' + i18n.get('Add row') + '</button>', '<button type="button" class="te-table-add-col">' + i18n.get('Add col') + '</button>', '<button type="button" class="te-table-remove-row">' + i18n.get('Remove row') + '</button>', '<button type="button" class="te-table-remove-col">' + i18n.get('Remove col') + '</button>', '<hr/>', '<button type="button" class="te-table-merge">' + i18n.get('Merge cells') + '</button>', '<button type="button" class="te-table-unmerge">' + i18n.get('Unmerge cells') + '</button>', '<hr/>', '<button type="button" class="te-table-col-align-left">' + i18n.get('Align left') + '</button>', '<button type="button" class="te-table-col-align-center">' + i18n.get('Align center') + '</button>', '<button type="button" class="te-table-col-align-right">' + i18n.get('Align right') + '</button>', '<hr/>', '<button type="button" class="te-table-remove">' + i18n.get('Remove table') + '</button>'].join('');
var $popupContent = (0, _jquery2.default)(POPUP_CONTENT);
popupTableUtils.setContent($popupContent);
}
/**
* Bind events for merge feature of contextmenu.
* @param {object} popupTableUtils - PopupTableUtils instance for managing contextmenu of table
* @param {object} eventManager - event manager instance of editor
* @param {object} selectionManager - table selection manager instance
* @private
*/
function _bindEvents(popupTableUtils, eventManager, selectionManager) {
var $popupContent = popupTableUtils.$content;
var $mergeBtn = (0, _jquery2.default)($popupContent[5]);
var $unmergeBtn = (0, _jquery2.default)($popupContent[6]);
var $separator = (0, _jquery2.default)($popupContent[7]);
popupTableUtils.on('click .te-table-merge', function () {
eventManager.emit('command', 'MergeCells');
});
popupTableUtils.on('click .te-table-unmerge', function () {
eventManager.emit('command', 'UnmergeCells');
});
eventManager.listen('openPopupTableUtils', function () {
var $selectedCells = selectionManager.getSelectedCells();
var selectedCellCount = $selectedCells.length;
if (selectedCellCount) {
if (selectedCellCount < 2 || selectionManager.hasSelectedBothThAndTd($selectedCells)) {
$mergeBtn.hide();
} else {
$mergeBtn.show();
}
if ($selectedCells.is('[rowspan], [colspan]')) {
$unmergeBtn.show();
} else {
$unmergeBtn.hide();
}
$separator.show();
} else {
$mergeBtn.hide();
$unmergeBtn.hide();
$separator.hide();
}
});
}
/**
* Update contextmenu UI.
* @param {object} popupTableUtils - PopupTableUtils instance for managing contextmenu of table
* @param {object} eventManager - event manager instance of editor
* @param {object} selectionManager - table selection manager instance
* @ignore
*/
function updateContextMenu(popupTableUtils, eventManager, selectionManager) {
_changeContent(popupTableUtils);
_bindEvents(popupTableUtils, eventManager, selectionManager);
}
exports.default = {
updateContextMenu: updateContextMenu
};
/***/ })
/******/ ]);
});