@odoo/o-spreadsheet 17.0.9 → 17.0.10
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/o-spreadsheet.cjs.js +68 -54
- package/dist/o-spreadsheet.d.ts +8 -3
- package/dist/o-spreadsheet.esm.js +68 -54
- package/dist/o-spreadsheet.iife.js +68 -54
- package/dist/o-spreadsheet.iife.min.js +252 -259
- package/dist/o_spreadsheet.xml +3 -3
- package/package.json +1 -1
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* This file is generated by o-spreadsheet build tools. Do not edit it.
|
|
4
4
|
* @see https://github.com/odoo/o-spreadsheet
|
|
5
|
-
* @version 17.0.
|
|
6
|
-
* @date 2024-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 17.0.10
|
|
6
|
+
* @date 2024-02-02T13:48:28.727Z
|
|
7
|
+
* @hash be06aa9
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -4933,14 +4933,8 @@
|
|
|
4933
4933
|
: undefined));
|
|
4934
4934
|
}
|
|
4935
4935
|
}
|
|
4936
|
-
else if (zone.left === zone.right && zone.top === zone.bottom) {
|
|
4937
|
-
// A single cell. If it's only the title, the dataset is not added.
|
|
4938
|
-
if (!dataSetsHaveTitle) {
|
|
4939
|
-
dataSets.push(createDataSet(getters, dataSetSheetId, zone, undefined));
|
|
4940
|
-
}
|
|
4941
|
-
}
|
|
4942
4936
|
else {
|
|
4943
|
-
/* 1 row or 1 column */
|
|
4937
|
+
/* 1 cell, 1 row or 1 column */
|
|
4944
4938
|
dataSets.push(createDataSet(getters, dataSetSheetId, zone, dataSetsHaveTitle
|
|
4945
4939
|
? {
|
|
4946
4940
|
top: zone.top,
|
|
@@ -4989,8 +4983,10 @@
|
|
|
4989
4983
|
}
|
|
4990
4984
|
const dataRange = ds.dataRange.clone({ zone: dataZone });
|
|
4991
4985
|
return {
|
|
4992
|
-
label: ds.labelCell
|
|
4993
|
-
|
|
4986
|
+
label: ds.labelCell
|
|
4987
|
+
? getters.getRangeString(ds.labelCell, "forceSheetReference", { useFixedReference: true })
|
|
4988
|
+
: undefined,
|
|
4989
|
+
range: getters.getRangeString(dataRange, "forceSheetReference", { useFixedReference: true }),
|
|
4994
4990
|
};
|
|
4995
4991
|
}
|
|
4996
4992
|
function toExcelLabelRange(getters, labelRange, shouldRemoveFirstLabel) {
|
|
@@ -5003,7 +4999,7 @@
|
|
|
5003
4999
|
zone.top = zone.top + 1;
|
|
5004
5000
|
}
|
|
5005
5001
|
const range = labelRange.clone({ zone });
|
|
5006
|
-
return getters.getRangeString(range, "forceSheetReference");
|
|
5002
|
+
return getters.getRangeString(range, "forceSheetReference", { useFixedReference: true });
|
|
5007
5003
|
}
|
|
5008
5004
|
/**
|
|
5009
5005
|
* Transform a chart definition which supports dataSets (dataSets and LabelRange)
|
|
@@ -8593,7 +8589,7 @@
|
|
|
8593
8589
|
return undefined;
|
|
8594
8590
|
const dataSets = this.dataSets
|
|
8595
8591
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
8596
|
-
.filter((ds) => ds.range !== ""
|
|
8592
|
+
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
8597
8593
|
const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
|
|
8598
8594
|
return {
|
|
8599
8595
|
...this.getDefinition(),
|
|
@@ -9171,7 +9167,7 @@
|
|
|
9171
9167
|
return undefined;
|
|
9172
9168
|
const dataSets = this.dataSets
|
|
9173
9169
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
9174
|
-
.filter((ds) => ds.range !== ""
|
|
9170
|
+
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
9175
9171
|
const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
|
|
9176
9172
|
return {
|
|
9177
9173
|
...this.getDefinition(),
|
|
@@ -9477,7 +9473,7 @@
|
|
|
9477
9473
|
return undefined;
|
|
9478
9474
|
const dataSets = this.dataSets
|
|
9479
9475
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
9480
|
-
.filter((ds) => ds.range !== ""
|
|
9476
|
+
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
9481
9477
|
const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
|
|
9482
9478
|
return {
|
|
9483
9479
|
...this.getDefinition(),
|
|
@@ -19920,19 +19916,20 @@
|
|
|
19920
19916
|
const formatNumberCurrency = createFormatActionSpec({
|
|
19921
19917
|
name: _t("Currency"),
|
|
19922
19918
|
descriptionValue: 1000.12,
|
|
19923
|
-
format: (env) => env.model.config.defaultCurrencyFormat,
|
|
19919
|
+
format: (env) => env.model.config.defaultCurrencyFormat ?? DEFAULT_CURRENCY_FORMAT,
|
|
19924
19920
|
});
|
|
19925
19921
|
const formatNumberCurrencyRounded = {
|
|
19926
19922
|
...createFormatActionSpec({
|
|
19927
19923
|
name: _t("Currency rounded"),
|
|
19928
19924
|
descriptionValue: 1000,
|
|
19929
|
-
format: (env) => roundFormat(env.model.config.defaultCurrencyFormat),
|
|
19925
|
+
format: (env) => roundFormat(env.model.config.defaultCurrencyFormat ?? DEFAULT_CURRENCY_FORMAT),
|
|
19930
19926
|
}),
|
|
19931
19927
|
isVisible: (env) => {
|
|
19932
19928
|
const currencyFormat = env.model.config.defaultCurrencyFormat;
|
|
19933
|
-
return currencyFormat !== roundFormat(currencyFormat);
|
|
19929
|
+
return currencyFormat !== roundFormat(currencyFormat ?? DEFAULT_CURRENCY_FORMAT);
|
|
19934
19930
|
},
|
|
19935
19931
|
};
|
|
19932
|
+
const DEFAULT_CURRENCY_FORMAT = "[$$]#,##0.00";
|
|
19936
19933
|
const EXAMPLE_DATE = parseLiteral("2023/09/26 10:43:00 PM", DEFAULT_LOCALE);
|
|
19937
19934
|
const formatCustomCurrency = {
|
|
19938
19935
|
name: _t("Custom currency"),
|
|
@@ -29352,6 +29349,7 @@
|
|
|
29352
29349
|
GROUP_HEADERS: groupHeadersMenuRegistry,
|
|
29353
29350
|
UNGROUP_HEADERS: unGroupHeadersMenuRegistry,
|
|
29354
29351
|
};
|
|
29352
|
+
const MODIFIER_KEYS = ["Shift", "Control", "Alt", "Meta"];
|
|
29355
29353
|
// -----------------------------------------------------------------------------
|
|
29356
29354
|
// JS
|
|
29357
29355
|
// -----------------------------------------------------------------------------
|
|
@@ -29724,16 +29722,15 @@
|
|
|
29724
29722
|
}
|
|
29725
29723
|
}
|
|
29726
29724
|
onKeydown(ev) {
|
|
29727
|
-
const eventKey = ev.key.toUpperCase();
|
|
29728
29725
|
let keyDownString = "";
|
|
29729
|
-
if (
|
|
29730
|
-
|
|
29731
|
-
|
|
29732
|
-
|
|
29733
|
-
|
|
29734
|
-
|
|
29735
|
-
|
|
29736
|
-
|
|
29726
|
+
if (!MODIFIER_KEYS.includes(ev.key)) {
|
|
29727
|
+
if (isCtrlKey(ev))
|
|
29728
|
+
keyDownString += "CTRL+";
|
|
29729
|
+
if (ev.altKey)
|
|
29730
|
+
keyDownString += "ALT+";
|
|
29731
|
+
if (ev.shiftKey)
|
|
29732
|
+
keyDownString += "SHIFT+";
|
|
29733
|
+
}
|
|
29737
29734
|
keyDownString += ev.key.toUpperCase();
|
|
29738
29735
|
let handler = this.keyDownMapping[keyDownString];
|
|
29739
29736
|
if (handler) {
|
|
@@ -35571,6 +35568,9 @@
|
|
|
35571
35568
|
format: cell.format ? getItemId(cell.format, formats) : undefined,
|
|
35572
35569
|
content: cell.content || undefined,
|
|
35573
35570
|
};
|
|
35571
|
+
if (cell instanceof FormulaCellWithDependencies) {
|
|
35572
|
+
cells[xc].content = cell.contentWithFixedReferences || undefined;
|
|
35573
|
+
}
|
|
35574
35574
|
}
|
|
35575
35575
|
_sheet.cells = cells;
|
|
35576
35576
|
}
|
|
@@ -35614,13 +35614,13 @@
|
|
|
35614
35614
|
/*
|
|
35615
35615
|
* Reconstructs the original formula string based on a normalized form and its dependencies
|
|
35616
35616
|
*/
|
|
35617
|
-
getFormulaCellContent(sheetId, compiledFormula, dependencies) {
|
|
35617
|
+
getFormulaCellContent(sheetId, compiledFormula, dependencies, useFixedReference = false) {
|
|
35618
35618
|
const ranges = dependencies || compiledFormula.dependencies;
|
|
35619
35619
|
let rangeIndex = 0;
|
|
35620
35620
|
return concat(compiledFormula.tokens.map((token) => {
|
|
35621
35621
|
if (token.type === "REFERENCE") {
|
|
35622
35622
|
const range = ranges[rangeIndex++];
|
|
35623
|
-
return this.getters.getRangeString(range, sheetId);
|
|
35623
|
+
return this.getters.getRangeString(range, sheetId, { useFixedReference });
|
|
35624
35624
|
}
|
|
35625
35625
|
return token.value;
|
|
35626
35626
|
}));
|
|
@@ -35889,6 +35889,18 @@
|
|
|
35889
35889
|
get content() {
|
|
35890
35890
|
return concat(this.compiledFormula.tokens.map((token) => token.value));
|
|
35891
35891
|
}
|
|
35892
|
+
get contentWithFixedReferences() {
|
|
35893
|
+
let rangeIndex = 0;
|
|
35894
|
+
return concat(this.compiledFormula.tokens.map((token) => {
|
|
35895
|
+
if (token.type === "REFERENCE") {
|
|
35896
|
+
const index = rangeIndex++;
|
|
35897
|
+
return this.getRangeString(this.compiledFormula.dependencies[index], this.sheetId, {
|
|
35898
|
+
useFixedReference: true,
|
|
35899
|
+
});
|
|
35900
|
+
}
|
|
35901
|
+
return token.value;
|
|
35902
|
+
}));
|
|
35903
|
+
}
|
|
35892
35904
|
}
|
|
35893
35905
|
class RangeReferenceToken {
|
|
35894
35906
|
getValue;
|
|
@@ -36193,7 +36205,13 @@
|
|
|
36193
36205
|
}
|
|
36194
36206
|
}
|
|
36195
36207
|
exportForExcel(data) {
|
|
36196
|
-
|
|
36208
|
+
if (data.sheets) {
|
|
36209
|
+
for (let sheet of data.sheets) {
|
|
36210
|
+
if (this.cfRules[sheet.id]) {
|
|
36211
|
+
sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, { useFixedReference: true }));
|
|
36212
|
+
}
|
|
36213
|
+
}
|
|
36214
|
+
}
|
|
36197
36215
|
}
|
|
36198
36216
|
// ---------------------------------------------------------------------------
|
|
36199
36217
|
// Getters
|
|
@@ -36258,11 +36276,11 @@
|
|
|
36258
36276
|
// ---------------------------------------------------------------------------
|
|
36259
36277
|
// Private
|
|
36260
36278
|
// ---------------------------------------------------------------------------
|
|
36261
|
-
mapToConditionalFormat(sheetId, cf) {
|
|
36279
|
+
mapToConditionalFormat(sheetId, cf, { useFixedReference } = { useFixedReference: false }) {
|
|
36262
36280
|
return {
|
|
36263
36281
|
...cf,
|
|
36264
36282
|
ranges: cf.ranges.map((range) => {
|
|
36265
|
-
return this.getters.getRangeString(range, sheetId);
|
|
36283
|
+
return this.getters.getRangeString(range, sheetId, { useFixedReference });
|
|
36266
36284
|
}),
|
|
36267
36285
|
};
|
|
36268
36286
|
}
|
|
@@ -38330,8 +38348,10 @@
|
|
|
38330
38348
|
*
|
|
38331
38349
|
* @param range the range (received from getRangeFromXC or getRangeFromZone)
|
|
38332
38350
|
* @param forSheetId the id of the sheet where the range string is supposed to be used.
|
|
38351
|
+
* @param options
|
|
38352
|
+
* @param options.useFixedReference if true, the range will be returned with fixed row and column
|
|
38333
38353
|
*/
|
|
38334
|
-
getRangeString(range, forSheetId) {
|
|
38354
|
+
getRangeString(range, forSheetId, options = { useFixedReference: false }) {
|
|
38335
38355
|
if (!range) {
|
|
38336
38356
|
return INCORRECT_RANGE_STRING;
|
|
38337
38357
|
}
|
|
@@ -38358,7 +38378,7 @@
|
|
|
38358
38378
|
if (prefixSheet && !sheetName) {
|
|
38359
38379
|
return INCORRECT_RANGE_STRING;
|
|
38360
38380
|
}
|
|
38361
|
-
let rangeString = this.getRangePartString(rangeImpl, 0);
|
|
38381
|
+
let rangeString = this.getRangePartString(rangeImpl, 0, options);
|
|
38362
38382
|
if (rangeImpl.parts && rangeImpl.parts.length === 2) {
|
|
38363
38383
|
// this if converts A2:A2 into A2 except if any part of the original range had fixed row or column (with $)
|
|
38364
38384
|
if (rangeImpl.zone.top !== rangeImpl.zone.bottom ||
|
|
@@ -38368,7 +38388,7 @@
|
|
|
38368
38388
|
rangeImpl.parts[1].rowFixed ||
|
|
38369
38389
|
rangeImpl.parts[1].colFixed) {
|
|
38370
38390
|
rangeString += ":";
|
|
38371
|
-
rangeString += this.getRangePartString(rangeImpl, 1);
|
|
38391
|
+
rangeString += this.getRangePartString(rangeImpl, 1, options);
|
|
38372
38392
|
}
|
|
38373
38393
|
}
|
|
38374
38394
|
return `${prefixSheet ? sheetName + "!" : ""}${rangeString}`;
|
|
@@ -38409,13 +38429,13 @@
|
|
|
38409
38429
|
/**
|
|
38410
38430
|
* Get a Xc string that represent a part of a range
|
|
38411
38431
|
*/
|
|
38412
|
-
getRangePartString(range, part) {
|
|
38432
|
+
getRangePartString(range, part, options = { useFixedReference: false }) {
|
|
38413
38433
|
const colFixed = range.parts && range.parts[part]?.colFixed ? "$" : "";
|
|
38414
38434
|
const col = part === 0 ? numberToLetters(range.zone.left) : numberToLetters(range.zone.right);
|
|
38415
38435
|
const rowFixed = range.parts && range.parts[part]?.rowFixed ? "$" : "";
|
|
38416
38436
|
const row = part === 0 ? String(range.zone.top + 1) : String(range.zone.bottom + 1);
|
|
38417
38437
|
let str = "";
|
|
38418
|
-
if (range.isFullCol) {
|
|
38438
|
+
if (range.isFullCol && !options.useFixedReference) {
|
|
38419
38439
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
38420
38440
|
str = colFixed + col + rowFixed + row;
|
|
38421
38441
|
}
|
|
@@ -38423,7 +38443,7 @@
|
|
|
38423
38443
|
str = colFixed + col;
|
|
38424
38444
|
}
|
|
38425
38445
|
}
|
|
38426
|
-
else if (range.isFullRow) {
|
|
38446
|
+
else if (range.isFullRow && !options.useFixedReference) {
|
|
38427
38447
|
if (part === 0 && range.unboundedZone.hasHeader) {
|
|
38428
38448
|
str = colFixed + col + rowFixed + row;
|
|
38429
38449
|
}
|
|
@@ -54950,12 +54970,7 @@
|
|
|
54950
54970
|
attrs.push(["t", "str"]);
|
|
54951
54971
|
cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
|
|
54952
54972
|
}
|
|
54953
|
-
node = escapeXml /*xml*/
|
|
54954
|
-
<f>
|
|
54955
|
-
${XlsxFormula}
|
|
54956
|
-
</f>
|
|
54957
|
-
${cycle}
|
|
54958
|
-
`;
|
|
54973
|
+
node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
|
|
54959
54974
|
return { attrs, node };
|
|
54960
54975
|
}
|
|
54961
54976
|
function addContent(content, sharedStrings, forceString = false) {
|
|
@@ -55774,11 +55789,10 @@
|
|
|
55774
55789
|
({ attrs: additionalAttrs, node: cellNode } = addContent(cell.content, construct.sharedStrings, isTableHeader));
|
|
55775
55790
|
}
|
|
55776
55791
|
attributes.push(...additionalAttrs);
|
|
55777
|
-
|
|
55778
|
-
|
|
55779
|
-
|
|
55780
|
-
|
|
55781
|
-
`);
|
|
55792
|
+
// prettier-ignore
|
|
55793
|
+
cellNodes.push(escapeXml /*xml*/ `<c ${formatAttributes(attributes)}>
|
|
55794
|
+
${cellNode}
|
|
55795
|
+
</c>`);
|
|
55782
55796
|
}
|
|
55783
55797
|
}
|
|
55784
55798
|
if (cellNodes.length || row.size !== DEFAULT_CELL_HEIGHT || row.isHidden) {
|
|
@@ -56374,7 +56388,6 @@
|
|
|
56374
56388
|
...config,
|
|
56375
56389
|
mode: config.mode || "normal",
|
|
56376
56390
|
custom: config.custom || {},
|
|
56377
|
-
defaultCurrencyFormat: config.defaultCurrencyFormat || "[$$]#,##0.00",
|
|
56378
56391
|
external: this.setupExternalConfig(config.external || {}),
|
|
56379
56392
|
transportService,
|
|
56380
56393
|
client,
|
|
@@ -56412,6 +56425,7 @@
|
|
|
56412
56425
|
custom: this.config.custom,
|
|
56413
56426
|
uiActions: this.config,
|
|
56414
56427
|
session: this.session,
|
|
56428
|
+
defaultCurrencyFormat: this.config.defaultCurrencyFormat,
|
|
56415
56429
|
};
|
|
56416
56430
|
}
|
|
56417
56431
|
// ---------------------------------------------------------------------------
|
|
@@ -56784,9 +56798,9 @@
|
|
|
56784
56798
|
exports.tokenize = tokenize;
|
|
56785
56799
|
|
|
56786
56800
|
|
|
56787
|
-
__info__.version = "17.0.
|
|
56788
|
-
__info__.date = "2024-
|
|
56789
|
-
__info__.hash = "
|
|
56801
|
+
__info__.version = "17.0.10";
|
|
56802
|
+
__info__.date = "2024-02-02T13:48:28.727Z";
|
|
56803
|
+
__info__.hash = "be06aa9";
|
|
56790
56804
|
|
|
56791
56805
|
|
|
56792
56806
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|