123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
- /* Tabulator v4.8.2 (c) Oliver Folkerd */
-
- var Clipboard = function Clipboard(table) {
- this.table = table;
- this.mode = true;
-
- this.pasteParser = function () {};
- this.pasteAction = function () {};
- this.customSelection = false;
- this.rowRange = false;
- this.blocked = true; //block copy actions not originating from this command
- };
-
- Clipboard.prototype.initialize = function () {
- var _this = this;
-
- this.mode = this.table.options.clipboard;
-
- this.rowRange = this.table.options.clipboardCopyRowRange;
-
- if (this.mode === true || this.mode === "copy") {
- this.table.element.addEventListener("copy", function (e) {
- var plain, html, list;
-
- if (!_this.blocked) {
- e.preventDefault();
-
- if (_this.customSelection) {
- plain = _this.customSelection;
-
- if (_this.table.options.clipboardCopyFormatter) {
- plain = _this.table.options.clipboardCopyFormatter("plain", plain);
- }
- } else {
-
- var list = _this.table.modules.export.generateExportList(_this.rowRange, _this.table.options.clipboardCopyStyled, _this.table.options.clipboardCopyConfig, "clipboard");
-
- html = _this.table.modules.export.genereateHTMLTable(list);
- plain = html ? _this.generatePlainContent(list) : "";
-
- if (_this.table.options.clipboardCopyFormatter) {
- plain = _this.table.options.clipboardCopyFormatter("plain", plain);
- html = _this.table.options.clipboardCopyFormatter("html", html);
- }
- }
-
- if (window.clipboardData && window.clipboardData.setData) {
- window.clipboardData.setData('Text', plain);
- } else if (e.clipboardData && e.clipboardData.setData) {
- e.clipboardData.setData('text/plain', plain);
- if (html) {
- e.clipboardData.setData('text/html', html);
- }
- } else if (e.originalEvent && e.originalEvent.clipboardData.setData) {
- e.originalEvent.clipboardData.setData('text/plain', plain);
- if (html) {
- e.originalEvent.clipboardData.setData('text/html', html);
- }
- }
-
- _this.table.options.clipboardCopied.call(_this.table, plain, html);
-
- _this.reset();
- }
- });
- }
-
- if (this.mode === true || this.mode === "paste") {
- this.table.element.addEventListener("paste", function (e) {
- _this.paste(e);
- });
- }
-
- this.setPasteParser(this.table.options.clipboardPasteParser);
- this.setPasteAction(this.table.options.clipboardPasteAction);
- };
-
- Clipboard.prototype.reset = function () {
- this.blocked = false;
- this.originalSelectionText = "";
- };
-
- Clipboard.prototype.generatePlainContent = function (list) {
- var output = [];
-
- list.forEach(function (row) {
- var rowData = [];
-
- row.columns.forEach(function (col) {
- var value = "";
-
- if (col) {
-
- if (row.type === "group") {
- col.value = col.component.getKey();
- }
-
- if (col.value === null) {
- value = "";
- } else {
- switch (_typeof(col.value)) {
- case "object":
- value = JSON.stringify(col.value);
- break;
-
- case "undefined":
- value = "";
- break;
-
- default:
- value = col.value;
- }
- }
- }
-
- rowData.push(value);
- });
-
- output.push(rowData.join("\t"));
- });
-
- return output.join("\n");
- };
-
- Clipboard.prototype.copy = function (range, internal) {
- var range, sel, textRange;
- this.blocked = false;
- this.customSelection = false;
-
- if (this.mode === true || this.mode === "copy") {
-
- this.rowRange = range || this.table.options.clipboardCopyRowRange;
-
- if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
- range = document.createRange();
- range.selectNodeContents(this.table.element);
- sel = window.getSelection();
-
- if (sel.toString() && internal) {
- this.customSelection = sel.toString();
- }
-
- sel.removeAllRanges();
- sel.addRange(range);
- } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") {
- textRange = document.body.createTextRange();
- textRange.moveToElementText(this.table.element);
- textRange.select();
- }
-
- document.execCommand('copy');
-
- if (sel) {
- sel.removeAllRanges();
- }
- }
- };
-
- //PASTE EVENT HANDLING
-
- Clipboard.prototype.setPasteAction = function (action) {
-
- switch (typeof action === "undefined" ? "undefined" : _typeof(action)) {
- case "string":
- this.pasteAction = this.pasteActions[action];
-
- if (!this.pasteAction) {
- console.warn("Clipboard Error - No such paste action found:", action);
- }
- break;
-
- case "function":
- this.pasteAction = action;
- break;
- }
- };
-
- Clipboard.prototype.setPasteParser = function (parser) {
- switch (typeof parser === "undefined" ? "undefined" : _typeof(parser)) {
- case "string":
- this.pasteParser = this.pasteParsers[parser];
-
- if (!this.pasteParser) {
- console.warn("Clipboard Error - No such paste parser found:", parser);
- }
- break;
-
- case "function":
- this.pasteParser = parser;
- break;
- }
- };
-
- Clipboard.prototype.paste = function (e) {
- var data, rowData, rows;
-
- if (this.checkPaseOrigin(e)) {
-
- data = this.getPasteData(e);
-
- rowData = this.pasteParser.call(this, data);
-
- if (rowData) {
- e.preventDefault();
-
- if (this.table.modExists("mutator")) {
- rowData = this.mutateData(rowData);
- }
-
- rows = this.pasteAction.call(this, rowData);
- this.table.options.clipboardPasted.call(this.table, data, rowData, rows);
- } else {
- this.table.options.clipboardPasteError.call(this.table, data);
- }
- }
- };
-
- Clipboard.prototype.mutateData = function (data) {
- var self = this,
- output = [];
-
- if (Array.isArray(data)) {
- data.forEach(function (row) {
- output.push(self.table.modules.mutator.transformRow(row, "clipboard"));
- });
- } else {
- output = data;
- }
-
- return output;
- };
-
- Clipboard.prototype.checkPaseOrigin = function (e) {
- var valid = true;
-
- if (e.target.tagName != "DIV" || this.table.modules.edit.currentCell) {
- valid = false;
- }
-
- return valid;
- };
-
- Clipboard.prototype.getPasteData = function (e) {
- var data;
-
- if (window.clipboardData && window.clipboardData.getData) {
- data = window.clipboardData.getData('Text');
- } else if (e.clipboardData && e.clipboardData.getData) {
- data = e.clipboardData.getData('text/plain');
- } else if (e.originalEvent && e.originalEvent.clipboardData.getData) {
- data = e.originalEvent.clipboardData.getData('text/plain');
- }
-
- return data;
- };
-
- Clipboard.prototype.pasteParsers = {
- table: function table(clipboard) {
- var data = [],
- success = false,
- headerFindSuccess = true,
- columns = this.table.columnManager.columns,
- columnMap = [],
- rows = [];
-
- //get data from clipboard into array of columns and rows.
- clipboard = clipboard.split("\n");
-
- clipboard.forEach(function (row) {
- data.push(row.split("\t"));
- });
-
- if (data.length && !(data.length === 1 && data[0].length < 2)) {
- success = true;
-
- //check if headers are present by title
- data[0].forEach(function (value) {
- var column = columns.find(function (column) {
- return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();
- });
-
- if (column) {
- columnMap.push(column);
- } else {
- headerFindSuccess = false;
- }
- });
-
- //check if column headers are present by field
- if (!headerFindSuccess) {
- headerFindSuccess = true;
- columnMap = [];
-
- data[0].forEach(function (value) {
- var column = columns.find(function (column) {
- return value && column.field && value.trim() && column.field.trim() === value.trim();
- });
-
- if (column) {
- columnMap.push(column);
- } else {
- headerFindSuccess = false;
- }
- });
-
- if (!headerFindSuccess) {
- columnMap = this.table.columnManager.columnsByIndex;
- }
- }
-
- //remove header row if found
- if (headerFindSuccess) {
- data.shift();
- }
-
- data.forEach(function (item) {
- var row = {};
-
- item.forEach(function (value, i) {
- if (columnMap[i]) {
- row[columnMap[i].field] = value;
- }
- });
-
- rows.push(row);
- });
-
- return rows;
- } else {
- return false;
- }
- }
- };
-
- Clipboard.prototype.pasteActions = {
- replace: function replace(rows) {
- return this.table.setData(rows);
- },
- update: function update(rows) {
- return this.table.updateOrAddData(rows);
- },
- insert: function insert(rows) {
- return this.table.addData(rows);
- }
- };
-
- Tabulator.prototype.registerModule("clipboard", Clipboard);
|