@fileverse-dev/fortune-core 1.1.53-patch-1 → 1.1.54-patch-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/events/paste.js +244 -87
- package/es/modules/toolbar.js +15 -12
- package/es/modules/validation.js +1 -1
- package/lib/events/paste.js +242 -85
- package/lib/modules/toolbar.js +15 -12
- package/lib/modules/validation.js +1 -1
- package/package.json +1 -1
- package/es/paste-table-helpers.d.ts +0 -2
- package/es/paste-table-helpers.js +0 -337
- package/lib/paste-table-helpers.d.ts +0 -2
- package/lib/paste-table-helpers.js +0 -344
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
import _ from "lodash";
|
|
3
|
-
import { setRowHeight } from "./api";
|
|
4
|
-
import { locale } from "./locale";
|
|
5
|
-
import { getCellTextInfo, getQKBorder, saveHyperlink } from "./modules";
|
|
6
|
-
import { genarate } from "./modules/format";
|
|
7
|
-
import { getSheetIndex } from "./utils";
|
|
8
|
-
var createAutoFitState = function createAutoFitState() {
|
|
9
|
-
return {
|
|
10
|
-
colMax: {},
|
|
11
|
-
rowMax: {}
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
var addColumnSample = function addColumnSample(state, absCol, widthPx) {
|
|
15
|
-
state.colMax[absCol] = Math.max(state.colMax[absCol] || 0, widthPx);
|
|
16
|
-
};
|
|
17
|
-
var addRowSample = function addRowSample(state, absRow, heightPx) {
|
|
18
|
-
state.rowMax[absRow] = Math.max(state.rowMax[absRow] || 0, heightPx);
|
|
19
|
-
};
|
|
20
|
-
var getColumnPixelWidth = function getColumnPixelWidth(ctx, sheetId, absCol) {
|
|
21
|
-
var _a;
|
|
22
|
-
var idx = getSheetIndex(ctx, sheetId);
|
|
23
|
-
var cfg = ctx.luckysheetfile[idx].config || {};
|
|
24
|
-
var w = (_a = cfg.columnlen) === null || _a === void 0 ? void 0 : _a[absCol];
|
|
25
|
-
if (!w && Array.isArray(ctx.visibledatacolumn)) {
|
|
26
|
-
var prev = absCol === 0 ? 0 : ctx.visibledatacolumn[absCol - 1] || 0;
|
|
27
|
-
var curr = ctx.visibledatacolumn[absCol] || 0;
|
|
28
|
-
w = curr - prev;
|
|
29
|
-
}
|
|
30
|
-
return w || 73;
|
|
31
|
-
};
|
|
32
|
-
var getMeasure2D = function getMeasure2D(ctx) {
|
|
33
|
-
var cached = ctx.__offscreenMeasureCtx;
|
|
34
|
-
if (cached) return cached;
|
|
35
|
-
var canvas = document.createElement("canvas");
|
|
36
|
-
var mctx = canvas.getContext("2d");
|
|
37
|
-
ctx.__offscreenMeasureCtx = mctx;
|
|
38
|
-
return mctx;
|
|
39
|
-
};
|
|
40
|
-
var parseStylesheetPairs = function parseStylesheetPairs(styleInner) {
|
|
41
|
-
var patternReg = /{([^}]*)}/g;
|
|
42
|
-
var patternStyle = styleInner.match(patternReg);
|
|
43
|
-
var nameReg = /^[^\t].*/gm;
|
|
44
|
-
var patternName = _.initial(styleInner.match(nameReg));
|
|
45
|
-
if (_typeof(patternStyle) !== _typeof(patternName) || patternName.length !== (patternStyle === null || patternStyle === void 0 ? void 0 : patternStyle.length)) return {};
|
|
46
|
-
return _.fromPairs(_.zip(patternName, patternStyle));
|
|
47
|
-
};
|
|
48
|
-
var parseInlineStyleBlock = function parseInlineStyleBlock(block) {
|
|
49
|
-
if (!block) return {};
|
|
50
|
-
var trimmed = block.substring(1, block.length - 1);
|
|
51
|
-
var entries = trimmed.split("\n\t").map(function (s) {
|
|
52
|
-
return s.trim();
|
|
53
|
-
}).filter(Boolean);
|
|
54
|
-
var out = {};
|
|
55
|
-
entries.forEach(function (entry) {
|
|
56
|
-
var _a = entry.split(":"),
|
|
57
|
-
k = _a[0],
|
|
58
|
-
v = _a[1];
|
|
59
|
-
if (k && v) out[k] = v.replace(";", "").trim();
|
|
60
|
-
});
|
|
61
|
-
return out;
|
|
62
|
-
};
|
|
63
|
-
var mapFontFamilyToIndex = function mapFontFamilyToIndex(ff, ctx) {
|
|
64
|
-
var families = ff.split(",");
|
|
65
|
-
var locale_fontjson = locale(ctx).fontjson;
|
|
66
|
-
var found = families.map(function (raw) {
|
|
67
|
-
return raw.trim().toLowerCase();
|
|
68
|
-
}).find(function (key) {
|
|
69
|
-
var mapped = locale_fontjson[key];
|
|
70
|
-
return mapped != null;
|
|
71
|
-
});
|
|
72
|
-
if (found != null) return locale_fontjson[found];
|
|
73
|
-
return 0;
|
|
74
|
-
};
|
|
75
|
-
function applyBordersAndMerges(td, startRow, startCol, absRow, absCol, rowSpanCount, colSpanCount, borderInfo, data) {
|
|
76
|
-
var topBorder = td.style.borderTop && !td.style.borderTop.startsWith("0px") ? getQKBorder(td.style.borderTopWidth, td.style.borderTopStyle, td.style.borderTopColor) : null;
|
|
77
|
-
var bottomBorder = td.style.borderBottom && !td.style.borderBottom.startsWith("0px") ? getQKBorder(td.style.borderBottomWidth, td.style.borderBottomStyle, td.style.borderBottomColor) : null;
|
|
78
|
-
var leftBorder = td.style.borderLeft && !td.style.borderLeft.startsWith("0px") ? getQKBorder(td.style.borderLeftWidth, td.style.borderLeftStyle, td.style.borderLeftColor) : null;
|
|
79
|
-
var rightBorder = td.style.borderRight && !td.style.borderRight.startsWith("0px") ? getQKBorder(td.style.borderRightWidth, td.style.borderRightStyle, td.style.borderRightColor) : null;
|
|
80
|
-
for (var rowOffset = 0; rowOffset < rowSpanCount; rowOffset++) {
|
|
81
|
-
var relativeRow = startRow + rowOffset;
|
|
82
|
-
for (var colOffset = 0; colOffset < colSpanCount; colOffset++) {
|
|
83
|
-
var relativeCol = startCol + colOffset;
|
|
84
|
-
if (!(rowOffset === 0 && colOffset === 0)) {
|
|
85
|
-
data[relativeRow][relativeCol] = {
|
|
86
|
-
mc: {
|
|
87
|
-
r: absRow,
|
|
88
|
-
c: absCol
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
var isTopEdge = rowOffset === 0;
|
|
93
|
-
var isBottomEdge = rowOffset === rowSpanCount - 1;
|
|
94
|
-
var isLeftEdge = colOffset === 0;
|
|
95
|
-
var isRightEdge = colOffset === colSpanCount - 1;
|
|
96
|
-
if (!(isTopEdge || isBottomEdge || isLeftEdge || isRightEdge)) continue;
|
|
97
|
-
var borderKey = "".concat(relativeRow, "_").concat(relativeCol);
|
|
98
|
-
borderInfo[borderKey] || (borderInfo[borderKey] = {});
|
|
99
|
-
if (isTopEdge && topBorder) {
|
|
100
|
-
borderInfo[borderKey].t = {
|
|
101
|
-
style: topBorder[0],
|
|
102
|
-
color: topBorder[1]
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
if (isBottomEdge && bottomBorder) {
|
|
106
|
-
borderInfo[borderKey].b = {
|
|
107
|
-
style: bottomBorder[0],
|
|
108
|
-
color: bottomBorder[1]
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
if (isLeftEdge && leftBorder) {
|
|
112
|
-
borderInfo[borderKey].l = {
|
|
113
|
-
style: leftBorder[0],
|
|
114
|
-
color: leftBorder[1]
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
if (isRightEdge && rightBorder) {
|
|
118
|
-
borderInfo[borderKey].r = {
|
|
119
|
-
style: rightBorder[0],
|
|
120
|
-
color: rightBorder[1]
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
var HEX_REGEX = /^0x?[a-fA-F0-9]+$/;
|
|
127
|
-
var detectHyperlink = function detectHyperlink(td) {
|
|
128
|
-
var _a, _b;
|
|
129
|
-
var anchor = td.querySelector("a[href]");
|
|
130
|
-
var urlRegex = /^(https?:\/\/[^\s]+)$/i;
|
|
131
|
-
if (anchor) {
|
|
132
|
-
var href = ((_a = anchor.getAttribute("href")) === null || _a === void 0 ? void 0 : _a.trim()) || "";
|
|
133
|
-
var display = ((_b = anchor.textContent) === null || _b === void 0 ? void 0 : _b.trim()) || href;
|
|
134
|
-
if (href && urlRegex.test(href)) return {
|
|
135
|
-
href: href,
|
|
136
|
-
display: display
|
|
137
|
-
};
|
|
138
|
-
} else {
|
|
139
|
-
var raw = (td.textContent || "").trim();
|
|
140
|
-
if (urlRegex.test(raw)) return {
|
|
141
|
-
href: raw,
|
|
142
|
-
display: raw
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
return null;
|
|
146
|
-
};
|
|
147
|
-
var buildCellFromTd = function buildCellFromTd(td, classStyles, ctx) {
|
|
148
|
-
var _a;
|
|
149
|
-
var _b, _c;
|
|
150
|
-
var cell = {};
|
|
151
|
-
var rawText = (td.innerText || td.innerHTML || "").trim();
|
|
152
|
-
if (!rawText) {
|
|
153
|
-
cell.v = undefined;
|
|
154
|
-
cell.m = "";
|
|
155
|
-
} else {
|
|
156
|
-
var mask = genarate(rawText);
|
|
157
|
-
_a = mask || [], cell.m = _a[0], cell.ct = _a[1], cell.v = _a[2];
|
|
158
|
-
if (HEX_REGEX.test(rawText)) {
|
|
159
|
-
cell.ct = {
|
|
160
|
-
fa: "@",
|
|
161
|
-
t: "s"
|
|
162
|
-
};
|
|
163
|
-
cell.m = rawText;
|
|
164
|
-
cell.v = rawText;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
var styleBlock = typeof classStyles[".".concat(td.className)] === "string" ? classStyles[".".concat(td.className)] : "";
|
|
168
|
-
var styles = parseInlineStyleBlock(styleBlock);
|
|
169
|
-
if (!_.isNil(styles.border)) td.style.border = styles.border;
|
|
170
|
-
var bg = td.style.backgroundColor || styles.background;
|
|
171
|
-
if (!bg || bg === "rgba(0, 0, 0, 0)") bg = undefined;
|
|
172
|
-
cell.bg = bg;
|
|
173
|
-
var fontWeight = td.style.fontWeight;
|
|
174
|
-
cell.bl = (fontWeight.toString() === "400" || fontWeight === "normal" || _.isEmpty(fontWeight)) && !_.includes(styles["font-style"], "bold") && (!styles["font-weight"] || styles["font-weight"] === "400") ? 0 : 1;
|
|
175
|
-
cell.it = (td.style.fontStyle === "normal" || _.isEmpty(td.style.fontStyle)) && !_.includes(styles["font-style"], "italic") ? 0 : 1;
|
|
176
|
-
cell.un = !_.includes(styles["text-decoration"], "underline") ? undefined : 1;
|
|
177
|
-
cell.cl = !_.includes(td.innerHTML, "<s>") ? undefined : 1;
|
|
178
|
-
var ff = td.style.fontFamily || styles["font-family"] || "";
|
|
179
|
-
cell.ff = mapFontFamilyToIndex(ff, ctx);
|
|
180
|
-
var fontSizePt = Math.round(styles["font-size"] ? parseInt(styles["font-size"].replace("pt", ""), 10) : parseInt(td.style.fontSize || "13", 10) * 72 / 96);
|
|
181
|
-
cell.fs = fontSizePt;
|
|
182
|
-
cell.fc = td.style.color || styles.color;
|
|
183
|
-
var ht = td.style.textAlign || styles["text-align"] || "left";
|
|
184
|
-
if (ht === "center") cell.ht = 0;else if (ht === "right") cell.ht = 2;else cell.ht = 1;
|
|
185
|
-
var regex = /vertical-align:\s*(.*?);/;
|
|
186
|
-
var vtStyle = typeof classStyles.td === "string" && ((_c = (_b = classStyles.td.match(regex)) === null || _b === void 0 ? void 0 : _b[1]) !== null && _c !== void 0 ? _c : "") || "top";
|
|
187
|
-
var vt = td.style.verticalAlign || styles["vertical-align"] || vtStyle;
|
|
188
|
-
if (vt === "middle") cell.vt = 0;else if (vt === "top" || vt === "text-top") cell.vt = 1;else cell.vt = 2;
|
|
189
|
-
if ("mso-rotate" in styles) cell.rt = parseFloat(styles["mso-rotate"]);
|
|
190
|
-
var rowspan = parseInt(td.getAttribute("rowspan") || "1", 10);
|
|
191
|
-
var colspan = parseInt(td.getAttribute("colspan") || "1", 10);
|
|
192
|
-
if (Number.isNaN(rowspan)) rowspan = 1;
|
|
193
|
-
if (Number.isNaN(colspan)) colspan = 1;
|
|
194
|
-
return {
|
|
195
|
-
cell: cell,
|
|
196
|
-
rowspan: rowspan,
|
|
197
|
-
colspan: colspan,
|
|
198
|
-
hyperlink: detectHyperlink(td)
|
|
199
|
-
};
|
|
200
|
-
};
|
|
201
|
-
var applyAutoFitToConfig = function applyAutoFitToConfig(ctx, sheetIdx, state, maxColWidth) {
|
|
202
|
-
var _a, _b;
|
|
203
|
-
if (maxColWidth === void 0) {
|
|
204
|
-
maxColWidth = 1200;
|
|
205
|
-
}
|
|
206
|
-
var file = ctx.luckysheetfile[sheetIdx];
|
|
207
|
-
file.config || (file.config = {});
|
|
208
|
-
(_a = file.config).rowlen || (_a.rowlen = {});
|
|
209
|
-
(_b = file.config).columnlen || (_b.columnlen = {});
|
|
210
|
-
var rowlen = file.config.rowlen;
|
|
211
|
-
Object.entries(state.rowMax).forEach(function (_a) {
|
|
212
|
-
var rowStr = _a[0],
|
|
213
|
-
needed = _a[1];
|
|
214
|
-
var r = +rowStr;
|
|
215
|
-
var cur = rowlen[r] || file.defaultRowHeight || 19;
|
|
216
|
-
if (needed > cur) rowlen[r] = needed;
|
|
217
|
-
});
|
|
218
|
-
var columnlen = file.config.columnlen;
|
|
219
|
-
Object.entries(state.colMax).forEach(function (_a) {
|
|
220
|
-
var colStr = _a[0],
|
|
221
|
-
needed = _a[1];
|
|
222
|
-
var c = +colStr;
|
|
223
|
-
var cur = columnlen[c] || 0;
|
|
224
|
-
if (needed > cur) columnlen[c] = Math.min(needed, maxColWidth);
|
|
225
|
-
});
|
|
226
|
-
setRowHeight(ctx, rowlen);
|
|
227
|
-
if (typeof window.jfrefreshgrid === "function") {
|
|
228
|
-
window.jfrefreshgrid(ctx, undefined, undefined, undefined, undefined, "resize");
|
|
229
|
-
}
|
|
230
|
-
};
|
|
231
|
-
export function pasteHtmlTableAndAutoFit(ctx, html, pasteHandler) {
|
|
232
|
-
var _a;
|
|
233
|
-
var _b;
|
|
234
|
-
if (html.indexOf("table") <= -1) return;
|
|
235
|
-
var ele = document.createElement("div");
|
|
236
|
-
ele.innerHTML = html;
|
|
237
|
-
var trList = ele.querySelectorAll("table tr");
|
|
238
|
-
if (trList.length === 0) {
|
|
239
|
-
ele.remove();
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
var colLen = 0;
|
|
243
|
-
trList[0].querySelectorAll("td, th").forEach(function (td) {
|
|
244
|
-
var cell = td;
|
|
245
|
-
var colSpan = Number.isNaN(cell.colSpan) ? 1 : cell.colSpan;
|
|
246
|
-
colLen += colSpan;
|
|
247
|
-
});
|
|
248
|
-
var rows = trList.length;
|
|
249
|
-
var data = Array.from({
|
|
250
|
-
length: rows
|
|
251
|
-
}, function () {
|
|
252
|
-
return new Array(colLen);
|
|
253
|
-
});
|
|
254
|
-
var borderInfo = {};
|
|
255
|
-
var styleInner = ((_a = ele.querySelectorAll("style")[0]) === null || _a === void 0 ? void 0 : _a.innerHTML) || "";
|
|
256
|
-
var allClassStyles = parseStylesheetPairs(styleInner);
|
|
257
|
-
var sheetIdx = getSheetIndex(ctx, ctx.currentSheetId);
|
|
258
|
-
if (_.isNil(sheetIdx)) {
|
|
259
|
-
ctx.luckysheet_selection_range = [];
|
|
260
|
-
pasteHandler(ctx, data, borderInfo);
|
|
261
|
-
ele.remove();
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
var file = ctx.luckysheetfile[sheetIdx];
|
|
265
|
-
file.config || (file.config = {});
|
|
266
|
-
(_b = file.config).rowlen || (_b.rowlen = {});
|
|
267
|
-
var rowHeightList = file.config.rowlen;
|
|
268
|
-
var state = createAutoFitState();
|
|
269
|
-
var measureCtx = getMeasure2D(ctx);
|
|
270
|
-
var H_PAD = 8;
|
|
271
|
-
var V_PAD = 4;
|
|
272
|
-
var r = 0;
|
|
273
|
-
trList.forEach(function (tr) {
|
|
274
|
-
var _a, _b, _c;
|
|
275
|
-
var c = 0;
|
|
276
|
-
var targetR = ctx.luckysheet_select_save[0].row[0] + r;
|
|
277
|
-
var explicitHeight = tr.getAttribute("height");
|
|
278
|
-
if (!_.isNil(explicitHeight)) {
|
|
279
|
-
var parsed = parseInt(explicitHeight, 10);
|
|
280
|
-
if (_.has((_a = file.config) === null || _a === void 0 ? void 0 : _a.rowlen, targetR) && ((_b = file.config) === null || _b === void 0 ? void 0 : _b.rowlen[targetR]) !== parsed || !_.has((_c = file.config) === null || _c === void 0 ? void 0 : _c.rowlen, targetR) && file.defaultRowHeight !== parsed) {
|
|
281
|
-
rowHeightList[targetR] = parsed;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
tr.querySelectorAll("td, th").forEach(function (node) {
|
|
285
|
-
var _a, _b, _c, _d;
|
|
286
|
-
var td = node;
|
|
287
|
-
while (c < colLen && data[r][c] != null) c++;
|
|
288
|
-
if (c === colLen) return;
|
|
289
|
-
var _e = buildCellFromTd(td, allClassStyles, ctx),
|
|
290
|
-
cell = _e.cell,
|
|
291
|
-
rowspan = _e.rowspan,
|
|
292
|
-
colspan = _e.colspan,
|
|
293
|
-
hyperlink = _e.hyperlink;
|
|
294
|
-
var absRow = ctx.luckysheet_select_save[0].row[0] + r;
|
|
295
|
-
var absCol = ctx.luckysheet_select_save[0].column[0] + c;
|
|
296
|
-
data[r][c] = cell;
|
|
297
|
-
var wrapFlag = cell === null || cell === void 0 ? void 0 : cell.tb;
|
|
298
|
-
var isWrapped = wrapFlag === 2 || wrapFlag === "2";
|
|
299
|
-
if (!isWrapped) {
|
|
300
|
-
var infoW = getCellTextInfo(cell, measureCtx, ctx, {
|
|
301
|
-
r: absRow,
|
|
302
|
-
c: absCol
|
|
303
|
-
}, ctx);
|
|
304
|
-
var w = Math.ceil(((_a = infoW === null || infoW === void 0 ? void 0 : infoW.textWidthAll) !== null && _a !== void 0 ? _a : 0) + H_PAD);
|
|
305
|
-
if (w > 0) addColumnSample(state, absCol, w);
|
|
306
|
-
}
|
|
307
|
-
var curW = getColumnPixelWidth(ctx, ctx.currentSheetId, absCol);
|
|
308
|
-
var grownW = Math.max(curW, state.colMax[absCol] || 0);
|
|
309
|
-
var infoH = getCellTextInfo(cell, measureCtx, ctx, {
|
|
310
|
-
r: absRow,
|
|
311
|
-
c: absCol,
|
|
312
|
-
cellWidth: grownW,
|
|
313
|
-
cellHeight: (_c = (_b = rowHeightList[absRow]) !== null && _b !== void 0 ? _b : file.defaultRowHeight) !== null && _c !== void 0 ? _c : 19
|
|
314
|
-
}, ctx);
|
|
315
|
-
var h = Math.ceil(((_d = infoH === null || infoH === void 0 ? void 0 : infoH.textHeightAll) !== null && _d !== void 0 ? _d : 0) + V_PAD);
|
|
316
|
-
if (h > 0) addRowSample(state, absRow, h);
|
|
317
|
-
if (hyperlink) {
|
|
318
|
-
saveHyperlink(ctx, absRow, absCol, hyperlink.href, "webpage", hyperlink.display);
|
|
319
|
-
}
|
|
320
|
-
applyBordersAndMerges(td, r, c, absRow, absCol, rowspan, colspan, borderInfo, data);
|
|
321
|
-
if (rowspan > 1 || colspan > 1) {
|
|
322
|
-
data[r][c].mc = {
|
|
323
|
-
rs: rowspan,
|
|
324
|
-
cs: colspan,
|
|
325
|
-
r: absRow,
|
|
326
|
-
c: absCol
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
c++;
|
|
330
|
-
});
|
|
331
|
-
r++;
|
|
332
|
-
});
|
|
333
|
-
applyAutoFitToConfig(ctx, sheetIdx, state, 1200);
|
|
334
|
-
ctx.luckysheet_selection_range = [];
|
|
335
|
-
pasteHandler(ctx, data, borderInfo);
|
|
336
|
-
ele.remove();
|
|
337
|
-
}
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.pasteHtmlTableAndAutoFit = pasteHtmlTableAndAutoFit;
|
|
7
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
|
-
var _api = require("./api");
|
|
9
|
-
var _locale = require("./locale");
|
|
10
|
-
var _modules = require("./modules");
|
|
11
|
-
var _format = require("./modules/format");
|
|
12
|
-
var _utils = require("./utils");
|
|
13
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
15
|
-
var createAutoFitState = function createAutoFitState() {
|
|
16
|
-
return {
|
|
17
|
-
colMax: {},
|
|
18
|
-
rowMax: {}
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
var addColumnSample = function addColumnSample(state, absCol, widthPx) {
|
|
22
|
-
state.colMax[absCol] = Math.max(state.colMax[absCol] || 0, widthPx);
|
|
23
|
-
};
|
|
24
|
-
var addRowSample = function addRowSample(state, absRow, heightPx) {
|
|
25
|
-
state.rowMax[absRow] = Math.max(state.rowMax[absRow] || 0, heightPx);
|
|
26
|
-
};
|
|
27
|
-
var getColumnPixelWidth = function getColumnPixelWidth(ctx, sheetId, absCol) {
|
|
28
|
-
var _a;
|
|
29
|
-
var idx = (0, _utils.getSheetIndex)(ctx, sheetId);
|
|
30
|
-
var cfg = ctx.luckysheetfile[idx].config || {};
|
|
31
|
-
var w = (_a = cfg.columnlen) === null || _a === void 0 ? void 0 : _a[absCol];
|
|
32
|
-
if (!w && Array.isArray(ctx.visibledatacolumn)) {
|
|
33
|
-
var prev = absCol === 0 ? 0 : ctx.visibledatacolumn[absCol - 1] || 0;
|
|
34
|
-
var curr = ctx.visibledatacolumn[absCol] || 0;
|
|
35
|
-
w = curr - prev;
|
|
36
|
-
}
|
|
37
|
-
return w || 73;
|
|
38
|
-
};
|
|
39
|
-
var getMeasure2D = function getMeasure2D(ctx) {
|
|
40
|
-
var cached = ctx.__offscreenMeasureCtx;
|
|
41
|
-
if (cached) return cached;
|
|
42
|
-
var canvas = document.createElement("canvas");
|
|
43
|
-
var mctx = canvas.getContext("2d");
|
|
44
|
-
ctx.__offscreenMeasureCtx = mctx;
|
|
45
|
-
return mctx;
|
|
46
|
-
};
|
|
47
|
-
var parseStylesheetPairs = function parseStylesheetPairs(styleInner) {
|
|
48
|
-
var patternReg = /{([^}]*)}/g;
|
|
49
|
-
var patternStyle = styleInner.match(patternReg);
|
|
50
|
-
var nameReg = /^[^\t].*/gm;
|
|
51
|
-
var patternName = _lodash.default.initial(styleInner.match(nameReg));
|
|
52
|
-
if (_typeof(patternStyle) !== _typeof(patternName) || patternName.length !== (patternStyle === null || patternStyle === void 0 ? void 0 : patternStyle.length)) return {};
|
|
53
|
-
return _lodash.default.fromPairs(_lodash.default.zip(patternName, patternStyle));
|
|
54
|
-
};
|
|
55
|
-
var parseInlineStyleBlock = function parseInlineStyleBlock(block) {
|
|
56
|
-
if (!block) return {};
|
|
57
|
-
var trimmed = block.substring(1, block.length - 1);
|
|
58
|
-
var entries = trimmed.split("\n\t").map(function (s) {
|
|
59
|
-
return s.trim();
|
|
60
|
-
}).filter(Boolean);
|
|
61
|
-
var out = {};
|
|
62
|
-
entries.forEach(function (entry) {
|
|
63
|
-
var _a = entry.split(":"),
|
|
64
|
-
k = _a[0],
|
|
65
|
-
v = _a[1];
|
|
66
|
-
if (k && v) out[k] = v.replace(";", "").trim();
|
|
67
|
-
});
|
|
68
|
-
return out;
|
|
69
|
-
};
|
|
70
|
-
var mapFontFamilyToIndex = function mapFontFamilyToIndex(ff, ctx) {
|
|
71
|
-
var families = ff.split(",");
|
|
72
|
-
var locale_fontjson = (0, _locale.locale)(ctx).fontjson;
|
|
73
|
-
var found = families.map(function (raw) {
|
|
74
|
-
return raw.trim().toLowerCase();
|
|
75
|
-
}).find(function (key) {
|
|
76
|
-
var mapped = locale_fontjson[key];
|
|
77
|
-
return mapped != null;
|
|
78
|
-
});
|
|
79
|
-
if (found != null) return locale_fontjson[found];
|
|
80
|
-
return 0;
|
|
81
|
-
};
|
|
82
|
-
function applyBordersAndMerges(td, startRow, startCol, absRow, absCol, rowSpanCount, colSpanCount, borderInfo, data) {
|
|
83
|
-
var topBorder = td.style.borderTop && !td.style.borderTop.startsWith("0px") ? (0, _modules.getQKBorder)(td.style.borderTopWidth, td.style.borderTopStyle, td.style.borderTopColor) : null;
|
|
84
|
-
var bottomBorder = td.style.borderBottom && !td.style.borderBottom.startsWith("0px") ? (0, _modules.getQKBorder)(td.style.borderBottomWidth, td.style.borderBottomStyle, td.style.borderBottomColor) : null;
|
|
85
|
-
var leftBorder = td.style.borderLeft && !td.style.borderLeft.startsWith("0px") ? (0, _modules.getQKBorder)(td.style.borderLeftWidth, td.style.borderLeftStyle, td.style.borderLeftColor) : null;
|
|
86
|
-
var rightBorder = td.style.borderRight && !td.style.borderRight.startsWith("0px") ? (0, _modules.getQKBorder)(td.style.borderRightWidth, td.style.borderRightStyle, td.style.borderRightColor) : null;
|
|
87
|
-
for (var rowOffset = 0; rowOffset < rowSpanCount; rowOffset++) {
|
|
88
|
-
var relativeRow = startRow + rowOffset;
|
|
89
|
-
for (var colOffset = 0; colOffset < colSpanCount; colOffset++) {
|
|
90
|
-
var relativeCol = startCol + colOffset;
|
|
91
|
-
if (!(rowOffset === 0 && colOffset === 0)) {
|
|
92
|
-
data[relativeRow][relativeCol] = {
|
|
93
|
-
mc: {
|
|
94
|
-
r: absRow,
|
|
95
|
-
c: absCol
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
var isTopEdge = rowOffset === 0;
|
|
100
|
-
var isBottomEdge = rowOffset === rowSpanCount - 1;
|
|
101
|
-
var isLeftEdge = colOffset === 0;
|
|
102
|
-
var isRightEdge = colOffset === colSpanCount - 1;
|
|
103
|
-
if (!(isTopEdge || isBottomEdge || isLeftEdge || isRightEdge)) continue;
|
|
104
|
-
var borderKey = "".concat(relativeRow, "_").concat(relativeCol);
|
|
105
|
-
borderInfo[borderKey] || (borderInfo[borderKey] = {});
|
|
106
|
-
if (isTopEdge && topBorder) {
|
|
107
|
-
borderInfo[borderKey].t = {
|
|
108
|
-
style: topBorder[0],
|
|
109
|
-
color: topBorder[1]
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
if (isBottomEdge && bottomBorder) {
|
|
113
|
-
borderInfo[borderKey].b = {
|
|
114
|
-
style: bottomBorder[0],
|
|
115
|
-
color: bottomBorder[1]
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
if (isLeftEdge && leftBorder) {
|
|
119
|
-
borderInfo[borderKey].l = {
|
|
120
|
-
style: leftBorder[0],
|
|
121
|
-
color: leftBorder[1]
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
if (isRightEdge && rightBorder) {
|
|
125
|
-
borderInfo[borderKey].r = {
|
|
126
|
-
style: rightBorder[0],
|
|
127
|
-
color: rightBorder[1]
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
var HEX_REGEX = /^0x?[a-fA-F0-9]+$/;
|
|
134
|
-
var detectHyperlink = function detectHyperlink(td) {
|
|
135
|
-
var _a, _b;
|
|
136
|
-
var anchor = td.querySelector("a[href]");
|
|
137
|
-
var urlRegex = /^(https?:\/\/[^\s]+)$/i;
|
|
138
|
-
if (anchor) {
|
|
139
|
-
var href = ((_a = anchor.getAttribute("href")) === null || _a === void 0 ? void 0 : _a.trim()) || "";
|
|
140
|
-
var display = ((_b = anchor.textContent) === null || _b === void 0 ? void 0 : _b.trim()) || href;
|
|
141
|
-
if (href && urlRegex.test(href)) return {
|
|
142
|
-
href: href,
|
|
143
|
-
display: display
|
|
144
|
-
};
|
|
145
|
-
} else {
|
|
146
|
-
var raw = (td.textContent || "").trim();
|
|
147
|
-
if (urlRegex.test(raw)) return {
|
|
148
|
-
href: raw,
|
|
149
|
-
display: raw
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
return null;
|
|
153
|
-
};
|
|
154
|
-
var buildCellFromTd = function buildCellFromTd(td, classStyles, ctx) {
|
|
155
|
-
var _a;
|
|
156
|
-
var _b, _c;
|
|
157
|
-
var cell = {};
|
|
158
|
-
var rawText = (td.innerText || td.innerHTML || "").trim();
|
|
159
|
-
if (!rawText) {
|
|
160
|
-
cell.v = undefined;
|
|
161
|
-
cell.m = "";
|
|
162
|
-
} else {
|
|
163
|
-
var mask = (0, _format.genarate)(rawText);
|
|
164
|
-
_a = mask || [], cell.m = _a[0], cell.ct = _a[1], cell.v = _a[2];
|
|
165
|
-
if (HEX_REGEX.test(rawText)) {
|
|
166
|
-
cell.ct = {
|
|
167
|
-
fa: "@",
|
|
168
|
-
t: "s"
|
|
169
|
-
};
|
|
170
|
-
cell.m = rawText;
|
|
171
|
-
cell.v = rawText;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
var styleBlock = typeof classStyles[".".concat(td.className)] === "string" ? classStyles[".".concat(td.className)] : "";
|
|
175
|
-
var styles = parseInlineStyleBlock(styleBlock);
|
|
176
|
-
if (!_lodash.default.isNil(styles.border)) td.style.border = styles.border;
|
|
177
|
-
var bg = td.style.backgroundColor || styles.background;
|
|
178
|
-
if (!bg || bg === "rgba(0, 0, 0, 0)") bg = undefined;
|
|
179
|
-
cell.bg = bg;
|
|
180
|
-
var fontWeight = td.style.fontWeight;
|
|
181
|
-
cell.bl = (fontWeight.toString() === "400" || fontWeight === "normal" || _lodash.default.isEmpty(fontWeight)) && !_lodash.default.includes(styles["font-style"], "bold") && (!styles["font-weight"] || styles["font-weight"] === "400") ? 0 : 1;
|
|
182
|
-
cell.it = (td.style.fontStyle === "normal" || _lodash.default.isEmpty(td.style.fontStyle)) && !_lodash.default.includes(styles["font-style"], "italic") ? 0 : 1;
|
|
183
|
-
cell.un = !_lodash.default.includes(styles["text-decoration"], "underline") ? undefined : 1;
|
|
184
|
-
cell.cl = !_lodash.default.includes(td.innerHTML, "<s>") ? undefined : 1;
|
|
185
|
-
var ff = td.style.fontFamily || styles["font-family"] || "";
|
|
186
|
-
cell.ff = mapFontFamilyToIndex(ff, ctx);
|
|
187
|
-
var fontSizePt = Math.round(styles["font-size"] ? parseInt(styles["font-size"].replace("pt", ""), 10) : parseInt(td.style.fontSize || "13", 10) * 72 / 96);
|
|
188
|
-
cell.fs = fontSizePt;
|
|
189
|
-
cell.fc = td.style.color || styles.color;
|
|
190
|
-
var ht = td.style.textAlign || styles["text-align"] || "left";
|
|
191
|
-
if (ht === "center") cell.ht = 0;else if (ht === "right") cell.ht = 2;else cell.ht = 1;
|
|
192
|
-
var regex = /vertical-align:\s*(.*?);/;
|
|
193
|
-
var vtStyle = typeof classStyles.td === "string" && ((_c = (_b = classStyles.td.match(regex)) === null || _b === void 0 ? void 0 : _b[1]) !== null && _c !== void 0 ? _c : "") || "top";
|
|
194
|
-
var vt = td.style.verticalAlign || styles["vertical-align"] || vtStyle;
|
|
195
|
-
if (vt === "middle") cell.vt = 0;else if (vt === "top" || vt === "text-top") cell.vt = 1;else cell.vt = 2;
|
|
196
|
-
if ("mso-rotate" in styles) cell.rt = parseFloat(styles["mso-rotate"]);
|
|
197
|
-
var rowspan = parseInt(td.getAttribute("rowspan") || "1", 10);
|
|
198
|
-
var colspan = parseInt(td.getAttribute("colspan") || "1", 10);
|
|
199
|
-
if (Number.isNaN(rowspan)) rowspan = 1;
|
|
200
|
-
if (Number.isNaN(colspan)) colspan = 1;
|
|
201
|
-
return {
|
|
202
|
-
cell: cell,
|
|
203
|
-
rowspan: rowspan,
|
|
204
|
-
colspan: colspan,
|
|
205
|
-
hyperlink: detectHyperlink(td)
|
|
206
|
-
};
|
|
207
|
-
};
|
|
208
|
-
var applyAutoFitToConfig = function applyAutoFitToConfig(ctx, sheetIdx, state, maxColWidth) {
|
|
209
|
-
var _a, _b;
|
|
210
|
-
if (maxColWidth === void 0) {
|
|
211
|
-
maxColWidth = 1200;
|
|
212
|
-
}
|
|
213
|
-
var file = ctx.luckysheetfile[sheetIdx];
|
|
214
|
-
file.config || (file.config = {});
|
|
215
|
-
(_a = file.config).rowlen || (_a.rowlen = {});
|
|
216
|
-
(_b = file.config).columnlen || (_b.columnlen = {});
|
|
217
|
-
var rowlen = file.config.rowlen;
|
|
218
|
-
Object.entries(state.rowMax).forEach(function (_a) {
|
|
219
|
-
var rowStr = _a[0],
|
|
220
|
-
needed = _a[1];
|
|
221
|
-
var r = +rowStr;
|
|
222
|
-
var cur = rowlen[r] || file.defaultRowHeight || 19;
|
|
223
|
-
if (needed > cur) rowlen[r] = needed;
|
|
224
|
-
});
|
|
225
|
-
var columnlen = file.config.columnlen;
|
|
226
|
-
Object.entries(state.colMax).forEach(function (_a) {
|
|
227
|
-
var colStr = _a[0],
|
|
228
|
-
needed = _a[1];
|
|
229
|
-
var c = +colStr;
|
|
230
|
-
var cur = columnlen[c] || 0;
|
|
231
|
-
if (needed > cur) columnlen[c] = Math.min(needed, maxColWidth);
|
|
232
|
-
});
|
|
233
|
-
(0, _api.setRowHeight)(ctx, rowlen);
|
|
234
|
-
if (typeof window.jfrefreshgrid === "function") {
|
|
235
|
-
window.jfrefreshgrid(ctx, undefined, undefined, undefined, undefined, "resize");
|
|
236
|
-
}
|
|
237
|
-
};
|
|
238
|
-
function pasteHtmlTableAndAutoFit(ctx, html, pasteHandler) {
|
|
239
|
-
var _a;
|
|
240
|
-
var _b;
|
|
241
|
-
if (html.indexOf("table") <= -1) return;
|
|
242
|
-
var ele = document.createElement("div");
|
|
243
|
-
ele.innerHTML = html;
|
|
244
|
-
var trList = ele.querySelectorAll("table tr");
|
|
245
|
-
if (trList.length === 0) {
|
|
246
|
-
ele.remove();
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
var colLen = 0;
|
|
250
|
-
trList[0].querySelectorAll("td, th").forEach(function (td) {
|
|
251
|
-
var cell = td;
|
|
252
|
-
var colSpan = Number.isNaN(cell.colSpan) ? 1 : cell.colSpan;
|
|
253
|
-
colLen += colSpan;
|
|
254
|
-
});
|
|
255
|
-
var rows = trList.length;
|
|
256
|
-
var data = Array.from({
|
|
257
|
-
length: rows
|
|
258
|
-
}, function () {
|
|
259
|
-
return new Array(colLen);
|
|
260
|
-
});
|
|
261
|
-
var borderInfo = {};
|
|
262
|
-
var styleInner = ((_a = ele.querySelectorAll("style")[0]) === null || _a === void 0 ? void 0 : _a.innerHTML) || "";
|
|
263
|
-
var allClassStyles = parseStylesheetPairs(styleInner);
|
|
264
|
-
var sheetIdx = (0, _utils.getSheetIndex)(ctx, ctx.currentSheetId);
|
|
265
|
-
if (_lodash.default.isNil(sheetIdx)) {
|
|
266
|
-
ctx.luckysheet_selection_range = [];
|
|
267
|
-
pasteHandler(ctx, data, borderInfo);
|
|
268
|
-
ele.remove();
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
var file = ctx.luckysheetfile[sheetIdx];
|
|
272
|
-
file.config || (file.config = {});
|
|
273
|
-
(_b = file.config).rowlen || (_b.rowlen = {});
|
|
274
|
-
var rowHeightList = file.config.rowlen;
|
|
275
|
-
var state = createAutoFitState();
|
|
276
|
-
var measureCtx = getMeasure2D(ctx);
|
|
277
|
-
var H_PAD = 8;
|
|
278
|
-
var V_PAD = 4;
|
|
279
|
-
var r = 0;
|
|
280
|
-
trList.forEach(function (tr) {
|
|
281
|
-
var _a, _b, _c;
|
|
282
|
-
var c = 0;
|
|
283
|
-
var targetR = ctx.luckysheet_select_save[0].row[0] + r;
|
|
284
|
-
var explicitHeight = tr.getAttribute("height");
|
|
285
|
-
if (!_lodash.default.isNil(explicitHeight)) {
|
|
286
|
-
var parsed = parseInt(explicitHeight, 10);
|
|
287
|
-
if (_lodash.default.has((_a = file.config) === null || _a === void 0 ? void 0 : _a.rowlen, targetR) && ((_b = file.config) === null || _b === void 0 ? void 0 : _b.rowlen[targetR]) !== parsed || !_lodash.default.has((_c = file.config) === null || _c === void 0 ? void 0 : _c.rowlen, targetR) && file.defaultRowHeight !== parsed) {
|
|
288
|
-
rowHeightList[targetR] = parsed;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
tr.querySelectorAll("td, th").forEach(function (node) {
|
|
292
|
-
var _a, _b, _c, _d;
|
|
293
|
-
var td = node;
|
|
294
|
-
while (c < colLen && data[r][c] != null) c++;
|
|
295
|
-
if (c === colLen) return;
|
|
296
|
-
var _e = buildCellFromTd(td, allClassStyles, ctx),
|
|
297
|
-
cell = _e.cell,
|
|
298
|
-
rowspan = _e.rowspan,
|
|
299
|
-
colspan = _e.colspan,
|
|
300
|
-
hyperlink = _e.hyperlink;
|
|
301
|
-
var absRow = ctx.luckysheet_select_save[0].row[0] + r;
|
|
302
|
-
var absCol = ctx.luckysheet_select_save[0].column[0] + c;
|
|
303
|
-
data[r][c] = cell;
|
|
304
|
-
var wrapFlag = cell === null || cell === void 0 ? void 0 : cell.tb;
|
|
305
|
-
var isWrapped = wrapFlag === 2 || wrapFlag === "2";
|
|
306
|
-
if (!isWrapped) {
|
|
307
|
-
var infoW = (0, _modules.getCellTextInfo)(cell, measureCtx, ctx, {
|
|
308
|
-
r: absRow,
|
|
309
|
-
c: absCol
|
|
310
|
-
}, ctx);
|
|
311
|
-
var w = Math.ceil(((_a = infoW === null || infoW === void 0 ? void 0 : infoW.textWidthAll) !== null && _a !== void 0 ? _a : 0) + H_PAD);
|
|
312
|
-
if (w > 0) addColumnSample(state, absCol, w);
|
|
313
|
-
}
|
|
314
|
-
var curW = getColumnPixelWidth(ctx, ctx.currentSheetId, absCol);
|
|
315
|
-
var grownW = Math.max(curW, state.colMax[absCol] || 0);
|
|
316
|
-
var infoH = (0, _modules.getCellTextInfo)(cell, measureCtx, ctx, {
|
|
317
|
-
r: absRow,
|
|
318
|
-
c: absCol,
|
|
319
|
-
cellWidth: grownW,
|
|
320
|
-
cellHeight: (_c = (_b = rowHeightList[absRow]) !== null && _b !== void 0 ? _b : file.defaultRowHeight) !== null && _c !== void 0 ? _c : 19
|
|
321
|
-
}, ctx);
|
|
322
|
-
var h = Math.ceil(((_d = infoH === null || infoH === void 0 ? void 0 : infoH.textHeightAll) !== null && _d !== void 0 ? _d : 0) + V_PAD);
|
|
323
|
-
if (h > 0) addRowSample(state, absRow, h);
|
|
324
|
-
if (hyperlink) {
|
|
325
|
-
(0, _modules.saveHyperlink)(ctx, absRow, absCol, hyperlink.href, "webpage", hyperlink.display);
|
|
326
|
-
}
|
|
327
|
-
applyBordersAndMerges(td, r, c, absRow, absCol, rowspan, colspan, borderInfo, data);
|
|
328
|
-
if (rowspan > 1 || colspan > 1) {
|
|
329
|
-
data[r][c].mc = {
|
|
330
|
-
rs: rowspan,
|
|
331
|
-
cs: colspan,
|
|
332
|
-
r: absRow,
|
|
333
|
-
c: absCol
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
c++;
|
|
337
|
-
});
|
|
338
|
-
r++;
|
|
339
|
-
});
|
|
340
|
-
applyAutoFitToConfig(ctx, sheetIdx, state, 1200);
|
|
341
|
-
ctx.luckysheet_selection_range = [];
|
|
342
|
-
pasteHandler(ctx, data, borderInfo);
|
|
343
|
-
ele.remove();
|
|
344
|
-
}
|