px-jspreadsheet-ce 0.0.5 → 0.0.7
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/dist/index.d.ts +2 -0
- package/dist/index.js +133 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
- package/src/index.js +2 -0
- package/src/utils/factory.js +1 -0
- package/src/utils/internal.js +4 -1
- package/src/utils/worksheets.js +48 -16
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1773,7 +1773,10 @@ const createCell = function (i, j, value) {
|
|
|
1773
1773
|
td.innerHTML = value;
|
|
1774
1774
|
}
|
|
1775
1775
|
if (typeof config.type.createCell == 'function') {
|
|
1776
|
-
config.type.createCell(td, value, parseInt(i), parseInt(j), obj, config);
|
|
1776
|
+
const result = config.type.createCell(td, value, parseInt(i), parseInt(j), obj, config);
|
|
1777
|
+
if (result && typeof result.mount === 'function' && typeof result.unmount === 'function') {
|
|
1778
|
+
obj.vueApps.push(result);
|
|
1779
|
+
}
|
|
1777
1780
|
}
|
|
1778
1781
|
}
|
|
1779
1782
|
|
|
@@ -1784,12 +1787,12 @@ const createCell = function (i, j, value) {
|
|
|
1784
1787
|
|
|
1785
1788
|
if (obj.options.freezeRows > j) {
|
|
1786
1789
|
td.classList.add('jss_frozen_row');
|
|
1787
|
-
td.style.top = (0,_internalHelpers_js__WEBPACK_IMPORTED_MODULE_7__/* .getFreezeRowTop */ .bI)(j, obj.options.rows);
|
|
1790
|
+
td.style.top = (0,_internalHelpers_js__WEBPACK_IMPORTED_MODULE_7__/* .getFreezeRowTop */ .bI)(j, obj.options.rows, obj.options.defaultRowHeight);
|
|
1788
1791
|
}
|
|
1789
1792
|
|
|
1790
1793
|
if (obj.options.freezeColumns > i) {
|
|
1791
1794
|
td.classList.add('jss_frozen');
|
|
1792
|
-
td.style.left = (0,_internalHelpers_js__WEBPACK_IMPORTED_MODULE_7__/* .getFreezeColumnLeft */ .FD)(i, obj.options.columns);
|
|
1795
|
+
td.style.left = (0,_internalHelpers_js__WEBPACK_IMPORTED_MODULE_7__/* .getFreezeColumnLeft */ .FD)(i, obj.options.columns, obj.options.defaultColWidth);
|
|
1793
1796
|
}
|
|
1794
1797
|
|
|
1795
1798
|
// Text align
|
|
@@ -3538,23 +3541,23 @@ const getColumnNameFromId = function (cellId) {
|
|
|
3538
3541
|
* 获取静态的左侧距离
|
|
3539
3542
|
*
|
|
3540
3543
|
*/
|
|
3541
|
-
const getFreezeColumnLeft = function (colNumber, columns) {
|
|
3544
|
+
const getFreezeColumnLeft = function (colNumber, columns, defaultWidth) {
|
|
3542
3545
|
let left = 50; // 距离左侧的位置
|
|
3543
3546
|
while (colNumber > 0) {
|
|
3544
3547
|
const obj = columns[colNumber - 1]; // 左侧单元格
|
|
3545
3548
|
if (obj.type !== 'hidden') {
|
|
3546
|
-
left += parseInt(obj.width);
|
|
3549
|
+
left += parseInt(obj.width || defaultWidth);
|
|
3547
3550
|
}
|
|
3548
3551
|
colNumber -= 1;
|
|
3549
3552
|
}
|
|
3550
3553
|
return left + 'px';
|
|
3551
3554
|
};
|
|
3552
3555
|
|
|
3553
|
-
const getFreezeRowTop = function (rowNumber, rows) {
|
|
3556
|
+
const getFreezeRowTop = function (rowNumber, rows, defaultHeight) {
|
|
3554
3557
|
let top = 30; // 距离顶部的位置
|
|
3555
3558
|
while (rowNumber > 0) {
|
|
3556
3559
|
const obj = rows[rowNumber - 1]; // 左侧单元格
|
|
3557
|
-
top += parseInt(obj.height);
|
|
3560
|
+
top += parseInt(obj.height || defaultHeight);
|
|
3558
3561
|
rowNumber -= 1;
|
|
3559
3562
|
}
|
|
3560
3563
|
return top + 'px';
|
|
@@ -10280,6 +10283,7 @@ const isReadOnly = function (x, y) {
|
|
|
10280
10283
|
|
|
10281
10284
|
|
|
10282
10285
|
|
|
10286
|
+
|
|
10283
10287
|
|
|
10284
10288
|
|
|
10285
10289
|
const setWorksheetFunctions = function (worksheet) {
|
|
@@ -10293,7 +10297,7 @@ const setWorksheetFunctions = function (worksheet) {
|
|
|
10293
10297
|
const createTable = function () {
|
|
10294
10298
|
let obj = this;
|
|
10295
10299
|
|
|
10296
|
-
setWorksheetFunctions(obj);
|
|
10300
|
+
setWorksheetFunctions(obj); // ??
|
|
10297
10301
|
|
|
10298
10302
|
// Elements
|
|
10299
10303
|
obj.table = document.createElement('table');
|
|
@@ -10555,6 +10559,57 @@ const createTable = function () {
|
|
|
10555
10559
|
}
|
|
10556
10560
|
};
|
|
10557
10561
|
|
|
10562
|
+
// check scope
|
|
10563
|
+
const isCellRange = (str) => /\w+:[\w-]/.test(str);
|
|
10564
|
+
const getCellRange = (str, size = 1) => {
|
|
10565
|
+
// 'A3:-'
|
|
10566
|
+
if (str.endsWith(':-')) {
|
|
10567
|
+
const [start] = str.split(':');
|
|
10568
|
+
const startCoord = (0,helpers.getCoordsFromCellName)(start);
|
|
10569
|
+
return [...startCoord, size - 1, startCoord[1]];
|
|
10570
|
+
}
|
|
10571
|
+
|
|
10572
|
+
return (0,helpers.getCoordsFromRange)(str);
|
|
10573
|
+
};
|
|
10574
|
+
|
|
10575
|
+
/**
|
|
10576
|
+
* 将对象中的范围键(如 "A1:C1")展开为独立单元格键
|
|
10577
|
+
* @param {Object} targetMap - 需要处理的目标对象 (如 obj.options.cells 或 obj.options.style)
|
|
10578
|
+
* @param {Object} size - 表格尺寸数据 (getCellRange 需要用到)
|
|
10579
|
+
*/
|
|
10580
|
+
const expandRangeProperties = (targetMap, size) => {
|
|
10581
|
+
// 1. 边界检查:如果对象为空,直接返回
|
|
10582
|
+
if (!targetMap) return;
|
|
10583
|
+
|
|
10584
|
+
// 2. 获取所有键并筛选出是范围格式的键
|
|
10585
|
+
const rangeKeys = Object.keys(targetMap).filter(isCellRange);
|
|
10586
|
+
|
|
10587
|
+
rangeKeys.forEach((key) => {
|
|
10588
|
+
const val = targetMap[key]; // 获取该范围对应的值 (样式或数据)
|
|
10589
|
+
const range = getCellRange(key, size); // 解析范围 [sx, sy, ex, ey]
|
|
10590
|
+
|
|
10591
|
+
const [sx, sy, ex, ey] = range;
|
|
10592
|
+
|
|
10593
|
+
// 3. 优化逻辑:使用双重循环。
|
|
10594
|
+
// 原代码分别处理行和列,双重循环可以同时涵盖:
|
|
10595
|
+
// - 单行 (sy === ey)
|
|
10596
|
+
// - 单列 (sx === ex)
|
|
10597
|
+
// - 矩形区域 (既跨行也跨列,如 A1:B2)
|
|
10598
|
+
for (let x = sx; x <= ex; x++) {
|
|
10599
|
+
for (let y = sy; y <= ey; y++) {
|
|
10600
|
+
const cellName = (0,helpers.getCellNameFromCoords)(x, y);
|
|
10601
|
+
// 只有当目标单元格不存在或是为了覆盖时赋值
|
|
10602
|
+
// 这里直接赋值,保留原值引用的逻辑
|
|
10603
|
+
targetMap[cellName] = val;
|
|
10604
|
+
}
|
|
10605
|
+
}
|
|
10606
|
+
|
|
10607
|
+
// 可选:展开后是否需要删除原始的范围 key?
|
|
10608
|
+
// 如果不需要保留 "A1:B1" 这种键,可以解开下面这行的注释
|
|
10609
|
+
delete targetMap[key];
|
|
10610
|
+
});
|
|
10611
|
+
};
|
|
10612
|
+
|
|
10558
10613
|
/**
|
|
10559
10614
|
* Prepare the jspreadsheet table
|
|
10560
10615
|
*
|
|
@@ -10639,6 +10694,10 @@ const prepareTable = function () {
|
|
|
10639
10694
|
}
|
|
10640
10695
|
}
|
|
10641
10696
|
|
|
10697
|
+
// cells
|
|
10698
|
+
expandRangeProperties(obj.options.cells, size);
|
|
10699
|
+
// style
|
|
10700
|
+
expandRangeProperties(obj.options.style, size);
|
|
10642
10701
|
// Create the table when is ready
|
|
10643
10702
|
if (!multiple.length) {
|
|
10644
10703
|
createTable.call(obj);
|
|
@@ -10679,7 +10738,7 @@ const buildWorksheet = async function () {
|
|
|
10679
10738
|
}
|
|
10680
10739
|
|
|
10681
10740
|
libraryBase.jspreadsheet.current = obj;
|
|
10682
|
-
|
|
10741
|
+
// prepareTable
|
|
10683
10742
|
const promises = [];
|
|
10684
10743
|
|
|
10685
10744
|
// Load the table data based on an CSV file
|
|
@@ -10808,8 +10867,62 @@ const deleteWorksheet = function (position) {
|
|
|
10808
10867
|
obj.parent.element.tabs.remove(position);
|
|
10809
10868
|
|
|
10810
10869
|
const removedWorksheet = obj.parent.worksheets.splice(position, 1)[0];
|
|
10811
|
-
|
|
10812
10870
|
dispatch/* default */.A.call(obj.parent, 'ondeleteworksheet', removedWorksheet, position);
|
|
10871
|
+
|
|
10872
|
+
// 卸载vue实例
|
|
10873
|
+
obj.vueApps.forEach(function (app) {
|
|
10874
|
+
app.unmount();
|
|
10875
|
+
});
|
|
10876
|
+
|
|
10877
|
+
obj.content.onscroll = null;
|
|
10878
|
+
obj.content.onwheel = null;
|
|
10879
|
+
obj.searchInput.onfocus = null;
|
|
10880
|
+
if (obj.paginationDropdown) {
|
|
10881
|
+
obj.paginationDropdown.onchange = null;
|
|
10882
|
+
}
|
|
10883
|
+
|
|
10884
|
+
obj.textarea.remove();
|
|
10885
|
+
obj.textarea = null;
|
|
10886
|
+
|
|
10887
|
+
if (obj.element) {
|
|
10888
|
+
delete obj.element.jssWorksheet;
|
|
10889
|
+
delete obj.element.jspreadsheet;
|
|
10890
|
+
obj.element = null;
|
|
10891
|
+
}
|
|
10892
|
+
|
|
10893
|
+
obj.headers = null;
|
|
10894
|
+
obj.cols = null;
|
|
10895
|
+
obj.records = null;
|
|
10896
|
+
obj.options = null;
|
|
10897
|
+
|
|
10898
|
+
Object.keys(obj).forEach((key) => {
|
|
10899
|
+
if (Object.hasOwn(obj, key)) {
|
|
10900
|
+
obj[key] = null;
|
|
10901
|
+
}
|
|
10902
|
+
});
|
|
10903
|
+
};
|
|
10904
|
+
|
|
10905
|
+
const updateWorksheet = function (options) {
|
|
10906
|
+
const obj = this;
|
|
10907
|
+
|
|
10908
|
+
// Reset selection
|
|
10909
|
+
obj.resetSelection();
|
|
10910
|
+
|
|
10911
|
+
// 卸载vue实例
|
|
10912
|
+
obj.vueApps.forEach(function (app) {
|
|
10913
|
+
app.unmount();
|
|
10914
|
+
});
|
|
10915
|
+
obj.vueApps = [];
|
|
10916
|
+
|
|
10917
|
+
obj.element.removeChild(obj.content);
|
|
10918
|
+
obj.element.removeChild(obj.pagination);
|
|
10919
|
+
obj.element.removeChild(obj.ads);
|
|
10920
|
+
|
|
10921
|
+
obj.options = options;
|
|
10922
|
+
obj.history = [];
|
|
10923
|
+
obj.historyIndex = -1;
|
|
10924
|
+
// Prepare table
|
|
10925
|
+
prepareTable.call(obj);
|
|
10813
10926
|
};
|
|
10814
10927
|
|
|
10815
10928
|
const worksheetPublicMethods = [
|
|
@@ -10929,6 +11042,7 @@ const worksheetPublicMethods = [
|
|
|
10929
11042
|
['createWorksheet', createWorksheet],
|
|
10930
11043
|
['openWorksheet', openWorksheet],
|
|
10931
11044
|
['deleteWorksheet', deleteWorksheet],
|
|
11045
|
+
['updateWorksheet', updateWorksheet],
|
|
10932
11046
|
[
|
|
10933
11047
|
'copy',
|
|
10934
11048
|
function (cut) {
|
|
@@ -11027,6 +11141,7 @@ const createWorksheets = async function (spreadsheet, options, el) {
|
|
|
11027
11141
|
|
|
11028
11142
|
let sheetNumber = 1;
|
|
11029
11143
|
|
|
11144
|
+
// worksheetName
|
|
11030
11145
|
for (let i = 0; i < o.length; i++) {
|
|
11031
11146
|
if (!o[i].worksheetName) {
|
|
11032
11147
|
o[i].worksheetName = 'Sheet' + sheetNumber++;
|
|
@@ -11043,10 +11158,12 @@ const createWorksheets = async function (spreadsheet, options, el) {
|
|
|
11043
11158
|
|
|
11044
11159
|
const tabs = jSuites.tabs(el, tabsOptions);
|
|
11045
11160
|
|
|
11161
|
+
// global style
|
|
11046
11162
|
const spreadsheetStyles = options.style;
|
|
11047
11163
|
delete options.style;
|
|
11048
11164
|
|
|
11049
11165
|
for (let i = 0; i < o.length; i++) {
|
|
11166
|
+
// handle global style
|
|
11050
11167
|
if (o[i].style) {
|
|
11051
11168
|
Object.entries(o[i].style).forEach(function ([cellName, value]) {
|
|
11052
11169
|
if (typeof value === 'number') {
|
|
@@ -11063,6 +11180,7 @@ const createWorksheets = async function (spreadsheet, options, el) {
|
|
|
11063
11180
|
formula: [],
|
|
11064
11181
|
history: [],
|
|
11065
11182
|
selection: [],
|
|
11183
|
+
vueApps: [],
|
|
11066
11184
|
historyIndex: -1,
|
|
11067
11185
|
});
|
|
11068
11186
|
|
|
@@ -11074,6 +11192,7 @@ const createWorksheets = async function (spreadsheet, options, el) {
|
|
|
11074
11192
|
};
|
|
11075
11193
|
|
|
11076
11194
|
factory.spreadsheet = async function (el, options, worksheets) {
|
|
11195
|
+
// html table
|
|
11077
11196
|
if (el.tagName == 'TABLE') {
|
|
11078
11197
|
if (!options) {
|
|
11079
11198
|
options = {};
|
|
@@ -11181,7 +11300,6 @@ factory.worksheet = function (spreadsheet, options, position) {
|
|
|
11181
11300
|
|
|
11182
11301
|
;// ./src/index.js
|
|
11183
11302
|
|
|
11184
|
-
// import './jspreadsheet.css';
|
|
11185
11303
|
|
|
11186
11304
|
|
|
11187
11305
|
|
|
@@ -11241,6 +11359,8 @@ libraryBase.jspreadsheet.destroy = function (element, destroyEventHandlers) {
|
|
|
11241
11359
|
if (element.spreadsheet) {
|
|
11242
11360
|
const spreadsheetIndex = libraryBase.jspreadsheet.spreadsheet.indexOf(element.spreadsheet);
|
|
11243
11361
|
libraryBase.jspreadsheet.spreadsheet.splice(spreadsheetIndex, 1);
|
|
11362
|
+
element.spreadsheet.worksheets.forEach((sheet, idx) => sheet.deleteWorksheet(idx));
|
|
11363
|
+
element.spreadsheet.worksheets = null;
|
|
11244
11364
|
|
|
11245
11365
|
const root = element.spreadsheet.config.root || document;
|
|
11246
11366
|
|
|
@@ -11259,6 +11379,8 @@ libraryBase.jspreadsheet.destroyAll = function () {
|
|
|
11259
11379
|
|
|
11260
11380
|
libraryBase.jspreadsheet.destroy(spreadsheet.element);
|
|
11261
11381
|
}
|
|
11382
|
+
libraryBase.jspreadsheet.current = null;
|
|
11383
|
+
libraryBase.jspreadsheet.spreadsheet = [];
|
|
11262
11384
|
};
|
|
11263
11385
|
|
|
11264
11386
|
libraryBase.jspreadsheet.current = null;
|