@talrace/ngx-noder 19.0.35 → 19.0.37
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/fesm2022/talrace-ngx-noder.mjs +762 -1315
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/editor/components/external-element/external.component.d.ts +2 -0
- package/lib/editor/components/shared/services/custom-content.service.d.ts +1 -8
- package/lib/editor/content/constants/display-values.const.d.ts +6 -2
- package/lib/editor/content/constants/editor.const.d.ts +3 -1
- package/lib/editor/content/display-data/display-data.d.ts +10 -29
- package/lib/editor/content/display-data/display-token.model.d.ts +8 -17
- package/lib/editor/content/display-data/general-properties.model.d.ts +3 -2
- package/lib/editor/content/display-data/indent.model.d.ts +2 -1
- package/lib/editor/content/display-data/line-info.model.d.ts +3 -3
- package/lib/editor/content/display-data/paragraph-info.interface.d.ts +1 -1
- package/lib/editor/content/display-data/text-line-info.d.ts +1 -14
- package/lib/editor/content/helpers/display-token.helper.d.ts +9 -3
- package/lib/editor/content/helpers/line-info.helper.d.ts +10 -0
- package/lib/editor/display/layers/text.layer.d.ts +2 -4
- package/lib/editor/display/rendering.helper.d.ts +4 -13
- package/lib/editor/gadgets/font-metrics/font-metric-size.interface.d.ts +0 -4
- package/lib/editor/gadgets/numbering/numbering.helper.d.ts +16 -7
- package/lib/editor/gadgets/page-break/break.helper.d.ts +1 -2
- package/lib/editor/positioning/cursor-position.interface.d.ts +3 -7
- package/lib/editor/positioning/position.helper.d.ts +0 -3
- package/lib/models/generated/heading.model.d.ts +2 -0
- package/lib/models/generated/table-style.model.d.ts +13 -0
- package/lib/models/generated/table.model.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns/_menu-dropdowns.theme.scss +0 -4
- package/lib/editor/components/tab/tab.helper.d.ts +0 -4
- package/lib/editor/content/display-data/format-ext.model.d.ts +0 -5
- package/lib/editor/display/print/print.rendering.helper.d.ts +0 -6
- package/lib/editor/positioning/line-width.helper.d.ts +0 -5
|
@@ -81,6 +81,25 @@ class ParagraphStyleModel {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
class MarginsModel {
|
|
85
|
+
constructor(fields) {
|
|
86
|
+
if (fields) {
|
|
87
|
+
Object.assign(this, fields);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
class TableStyleModel {
|
|
93
|
+
constructor(fields) {
|
|
94
|
+
if (fields) {
|
|
95
|
+
if (fields.margins) {
|
|
96
|
+
fields.margins = new MarginsModel(fields.margins);
|
|
97
|
+
}
|
|
98
|
+
Object.assign(this, fields);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
84
103
|
class TextStyleModel {
|
|
85
104
|
constructor(fields) {
|
|
86
105
|
if (fields) {
|
|
@@ -95,6 +114,9 @@ class HeadingModel {
|
|
|
95
114
|
if (fields.paragraphStyle) {
|
|
96
115
|
fields.paragraphStyle = new ParagraphStyleModel(fields.paragraphStyle);
|
|
97
116
|
}
|
|
117
|
+
if (fields.tableStyle) {
|
|
118
|
+
fields.tableStyle = new TableStyleModel(fields.tableStyle);
|
|
119
|
+
}
|
|
98
120
|
if (fields.textStyle) {
|
|
99
121
|
fields.textStyle = new TextStyleModel(fields.textStyle);
|
|
100
122
|
}
|
|
@@ -103,6 +125,21 @@ class HeadingModel {
|
|
|
103
125
|
}
|
|
104
126
|
}
|
|
105
127
|
|
|
128
|
+
class MarginModel {
|
|
129
|
+
constructor(fields) {
|
|
130
|
+
this.left = DocumentInfo.paddingLeft;
|
|
131
|
+
this.right = DocumentInfo.paddingRight;
|
|
132
|
+
this.top = DocumentInfo.paddingTop;
|
|
133
|
+
this.bottom = DocumentInfo.paddingBottom;
|
|
134
|
+
this.header = DocumentInfo.paddingHeader;
|
|
135
|
+
this.footer = DocumentInfo.paddingFooter;
|
|
136
|
+
if (!fields) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
Object.assign(this, fields);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
106
143
|
var VerticalAlignment;
|
|
107
144
|
(function (VerticalAlignment) {
|
|
108
145
|
VerticalAlignment[VerticalAlignment["None"] = 0] = "None";
|
|
@@ -125,7 +162,7 @@ const DEFAULT_TOOLBAR_STYLES = () => ({
|
|
|
125
162
|
const DEFAULT_BACKGROUND_COLOR = 'transparent';
|
|
126
163
|
const DEFAULT_FONT_FAMILY = 'Times New Roman';
|
|
127
164
|
const DEFAULT_FONT_SIZE = 11;
|
|
128
|
-
const DEFAULT_FONT_COLOR = '#
|
|
165
|
+
const DEFAULT_FONT_COLOR = '#000000';
|
|
129
166
|
const HYPERLINK_FONT_COLOR = '#0000EE';
|
|
130
167
|
const DEFAULT_HEADING_STYLE_ID = 'Default';
|
|
131
168
|
const HYPERLINK_HEADING_STYLE_ID = 'Hyperlink';
|
|
@@ -180,6 +217,12 @@ const NEW_LINE_MARKUP = '\n';
|
|
|
180
217
|
const DEFAULT_TAB_WIDTH = 48;
|
|
181
218
|
const DEFAULT_OFFSET_AFTER_NUMBERING_MARKER = 20;
|
|
182
219
|
const DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER = 0.4;
|
|
220
|
+
const DEFAULT_TABLE_MARGINS = new MarginModel({
|
|
221
|
+
top: 0,
|
|
222
|
+
left: 7,
|
|
223
|
+
right: 7,
|
|
224
|
+
bottom: 0
|
|
225
|
+
});
|
|
183
226
|
|
|
184
227
|
var PageType;
|
|
185
228
|
(function (PageType) {
|
|
@@ -487,11 +530,7 @@ class FontMetrics {
|
|
|
487
530
|
return {
|
|
488
531
|
width: textMetrics.width,
|
|
489
532
|
height: textMetrics.fontBoundingBoxAscent + textMetrics.fontBoundingBoxDescent,
|
|
490
|
-
baseline: fontBaseLine.baseline,
|
|
491
|
-
content: fontBaseLine.content,
|
|
492
533
|
font: fontBaseLine.font,
|
|
493
|
-
line: fontBaseLine.line,
|
|
494
|
-
multiplier: fontBaseLine.multiplier,
|
|
495
534
|
ascent: textMetrics.fontBoundingBoxAscent,
|
|
496
535
|
descent: textMetrics.fontBoundingBoxDescent
|
|
497
536
|
};
|
|
@@ -1304,6 +1343,10 @@ class ExternalComponent extends BaseNoderComponent {
|
|
|
1304
1343
|
constructor() {
|
|
1305
1344
|
super(...arguments);
|
|
1306
1345
|
this.focusSidenav = true;
|
|
1346
|
+
this.isText = false;
|
|
1347
|
+
}
|
|
1348
|
+
getText() {
|
|
1349
|
+
return '';
|
|
1307
1350
|
}
|
|
1308
1351
|
skipSidenav() {
|
|
1309
1352
|
return this.editorService.isViewOnly;
|
|
@@ -1660,11 +1703,11 @@ const CUSTOM_ELEMENT_MARKER = '*';
|
|
|
1660
1703
|
const TABLE_MARKER = '#';
|
|
1661
1704
|
|
|
1662
1705
|
class BreakHelper {
|
|
1663
|
-
static getBreakType(
|
|
1706
|
+
static getBreakType(breaks, char, insertIndex) {
|
|
1664
1707
|
if (char !== CUSTOM_ELEMENT_MARKER) {
|
|
1665
1708
|
return null;
|
|
1666
1709
|
}
|
|
1667
|
-
return
|
|
1710
|
+
return breaks.find(x => x.insertIndex === insertIndex)?.breakType ?? null;
|
|
1668
1711
|
}
|
|
1669
1712
|
static removeBreakMarker(breaks, text, fragmentStartIndex) {
|
|
1670
1713
|
const index = text.at(-1) === NEW_LINE_MARKUP ? -2 : -1;
|
|
@@ -2773,14 +2816,6 @@ class BreakOperationsHelper {
|
|
|
2773
2816
|
}
|
|
2774
2817
|
}
|
|
2775
2818
|
|
|
2776
|
-
class MarginsModel {
|
|
2777
|
-
constructor(fields) {
|
|
2778
|
-
if (fields) {
|
|
2779
|
-
Object.assign(this, fields);
|
|
2780
|
-
}
|
|
2781
|
-
}
|
|
2782
|
-
}
|
|
2783
|
-
|
|
2784
2819
|
class CellModel {
|
|
2785
2820
|
constructor(fields) {
|
|
2786
2821
|
if (fields) {
|
|
@@ -2892,7 +2927,7 @@ class RangeElementHelper {
|
|
|
2892
2927
|
element.startIndex += length;
|
|
2893
2928
|
element.endIndex += length;
|
|
2894
2929
|
}
|
|
2895
|
-
else if (element.endIndex
|
|
2930
|
+
else if (element.endIndex > index) {
|
|
2896
2931
|
element.endIndex += length;
|
|
2897
2932
|
}
|
|
2898
2933
|
}
|
|
@@ -4749,7 +4784,7 @@ class TableOperationsHelper {
|
|
|
4749
4784
|
});
|
|
4750
4785
|
columns.push(column);
|
|
4751
4786
|
}
|
|
4752
|
-
const table = new TableModel({ insertIndex: insertIndex, alignment: 0, rows, columns });
|
|
4787
|
+
const table = new TableModel({ insertIndex: insertIndex, alignment: 0, rows, columns, margins: DEFAULT_TABLE_MARGINS });
|
|
4753
4788
|
IndexedElementOperationsHelper.insertContent(tables, insertIndex, 1);
|
|
4754
4789
|
const index = tables.findIndex(x => x.insertIndex > table.insertIndex);
|
|
4755
4790
|
if (index < 0) {
|
|
@@ -5915,24 +5950,191 @@ class PageHelper {
|
|
|
5915
5950
|
}
|
|
5916
5951
|
}
|
|
5917
5952
|
|
|
5918
|
-
|
|
5919
|
-
|
|
5920
|
-
|
|
5921
|
-
|
|
5922
|
-
|
|
5923
|
-
|
|
5924
|
-
|
|
5925
|
-
}
|
|
5953
|
+
class NumberingDataModel {
|
|
5954
|
+
constructor(fields) {
|
|
5955
|
+
if (!fields) {
|
|
5956
|
+
return;
|
|
5957
|
+
}
|
|
5958
|
+
Object.assign(this, fields);
|
|
5959
|
+
}
|
|
5960
|
+
}
|
|
5961
|
+
|
|
5962
|
+
class NumberingParagraphStyleModel extends ParagraphStyleModel {
|
|
5963
|
+
constructor(fields) {
|
|
5964
|
+
super();
|
|
5965
|
+
this.numberingType = null;
|
|
5966
|
+
this.numberingLevelsStyles = null;
|
|
5967
|
+
if (!fields) {
|
|
5968
|
+
return;
|
|
5969
|
+
}
|
|
5970
|
+
Object.assign(this, fields);
|
|
5971
|
+
}
|
|
5972
|
+
}
|
|
5926
5973
|
|
|
5927
|
-
class
|
|
5928
|
-
static
|
|
5929
|
-
|
|
5930
|
-
|
|
5931
|
-
|
|
5932
|
-
|
|
5933
|
-
|
|
5934
|
-
|
|
5935
|
-
|
|
5974
|
+
class NumberingHelper {
|
|
5975
|
+
static addValueToNumberingInfo(numberingId, numberingInfo, numberingLevels) {
|
|
5976
|
+
if (numberingInfo[numberingId]) {
|
|
5977
|
+
return;
|
|
5978
|
+
}
|
|
5979
|
+
numberingInfo[numberingId] = [];
|
|
5980
|
+
for (let numberingLevel of numberingLevels) {
|
|
5981
|
+
numberingInfo[numberingId][numberingLevel.level] = {
|
|
5982
|
+
markerIndex: numberingLevel.startValue,
|
|
5983
|
+
start: numberingLevel.startValue,
|
|
5984
|
+
needToRecalculate: true,
|
|
5985
|
+
needToCalculateFirstMarker: false
|
|
5986
|
+
};
|
|
5987
|
+
}
|
|
5988
|
+
}
|
|
5989
|
+
static setNumberingNeedToRecalculate(numberingInfo, numberingId) {
|
|
5990
|
+
numberingInfo[numberingId].forEach(x => {
|
|
5991
|
+
x.needToRecalculate = true;
|
|
5992
|
+
x.markerIndex = x.start;
|
|
5993
|
+
x.needToCalculateFirstMarker = false;
|
|
5994
|
+
});
|
|
5995
|
+
}
|
|
5996
|
+
static setAllNumberingIsCalculated(numberingInfo) {
|
|
5997
|
+
for (let numberingId in numberingInfo) {
|
|
5998
|
+
numberingInfo[numberingId].forEach(x => {
|
|
5999
|
+
x.needToRecalculate = false;
|
|
6000
|
+
x.needToCalculateFirstMarker = false;
|
|
6001
|
+
});
|
|
6002
|
+
}
|
|
6003
|
+
}
|
|
6004
|
+
static getStyles(paragraphStyle, numberings) {
|
|
6005
|
+
const numberingLevels = numberings.find(x => x.numberingId === paragraphStyle.numberingId).levels;
|
|
6006
|
+
const numberingLevelsStyles = numberingLevels.reduce((prev, next) => `${prev}${next.marker}${next.markerType}`, '');
|
|
6007
|
+
const level = numberingLevels.find(x => x.level === paragraphStyle.numberingLevel);
|
|
6008
|
+
return new NumberingParagraphStyleModel({ ...paragraphStyle, numberingType: level.markerType, numberingLevelsStyles });
|
|
6009
|
+
}
|
|
6010
|
+
static findNumberingLevel(numberings, id, level) {
|
|
6011
|
+
const numbering = numberings.find(x => x.numberingId === id);
|
|
6012
|
+
return numbering?.levels.find(x => x.level === level);
|
|
6013
|
+
}
|
|
6014
|
+
static findNumberingLevels(numberings, id) {
|
|
6015
|
+
const numbering = numberings.find(x => x.numberingId === id);
|
|
6016
|
+
return numbering?.levels;
|
|
6017
|
+
}
|
|
6018
|
+
static calculateNumberingInfo(numberingId, level, numberingInfo, numberings) {
|
|
6019
|
+
const numberingModel = this.findNumberingLevel(numberings, numberingId, level);
|
|
6020
|
+
if (numberingModel?.markerType === NumberingMarkerType.Bullet) {
|
|
6021
|
+
return;
|
|
6022
|
+
}
|
|
6023
|
+
this.calculateMarkerIndexes(numberingId, level, numberingInfo);
|
|
6024
|
+
}
|
|
6025
|
+
static calculateMarkerIndexes(numberingId, level, numberingInfo) {
|
|
6026
|
+
if (numberingInfo[numberingId][level].needToRecalculate) {
|
|
6027
|
+
if (numberingInfo[numberingId][level].needToCalculateFirstMarker) {
|
|
6028
|
+
numberingInfo[numberingId][level].markerIndex++;
|
|
6029
|
+
}
|
|
6030
|
+
else {
|
|
6031
|
+
numberingInfo[numberingId][level].needToCalculateFirstMarker = true;
|
|
6032
|
+
}
|
|
6033
|
+
for (let i = level + 1; i < numberingInfo[numberingId].length; i++) {
|
|
6034
|
+
numberingInfo[numberingId][i].markerIndex = numberingInfo[numberingId][i].start;
|
|
6035
|
+
numberingInfo[numberingId][i].needToCalculateFirstMarker = false;
|
|
6036
|
+
}
|
|
6037
|
+
for (let i = 0; i < level; i++) {
|
|
6038
|
+
if (numberingInfo[numberingId][i].markerIndex === numberingInfo[numberingId][i].start) {
|
|
6039
|
+
numberingInfo[numberingId][i].needToCalculateFirstMarker = true;
|
|
6040
|
+
}
|
|
6041
|
+
}
|
|
6042
|
+
}
|
|
6043
|
+
}
|
|
6044
|
+
static getMarker(levelModels, level, numberingId, numberingInfo) {
|
|
6045
|
+
let levelMarker = levelModels[level].marker;
|
|
6046
|
+
let index = levelMarker.indexOf('%');
|
|
6047
|
+
if (index === -1) {
|
|
6048
|
+
return levelMarker;
|
|
6049
|
+
}
|
|
6050
|
+
const splittedMarker = levelMarker.split('.');
|
|
6051
|
+
return this.createMarkerString(numberingInfo, numberingId, splittedMarker);
|
|
6052
|
+
}
|
|
6053
|
+
static createDataModel(numberings, paragraphs, paragraphIndex, numberingInfo) {
|
|
6054
|
+
const paragraph = paragraphs[paragraphIndex];
|
|
6055
|
+
const numberingId = paragraph?.paragraphStyle.numberingId;
|
|
6056
|
+
if (!numberingId) {
|
|
6057
|
+
return new NumberingDataModel({ numberingId: null });
|
|
6058
|
+
}
|
|
6059
|
+
const level = paragraph.paragraphStyle.numberingLevel;
|
|
6060
|
+
const numberingLevelModel = this.findNumberingLevels(numberings, numberingId);
|
|
6061
|
+
const marker = this.getMarker(numberingLevelModel, level, numberingId, numberingInfo);
|
|
6062
|
+
return new NumberingDataModel({ numberingId, level, marker });
|
|
6063
|
+
}
|
|
6064
|
+
static updateMarkerData(numberings, paragraph, paragraphTextStyle, paragraphStyle) {
|
|
6065
|
+
const numberingLevel = NumberingHelper.findNumberingLevel(numberings, paragraph.numberingData.numberingId, paragraph.numberingData.level);
|
|
6066
|
+
const markerTextStyle = ContentStyleHelper.combineTextStyles(numberingLevel.markerStyle, paragraphTextStyle);
|
|
6067
|
+
const markerSizes = NumberingHelper.getMarkerSizes(paragraph.numberingData.marker, markerTextStyle);
|
|
6068
|
+
paragraph.numberingData.markerTextStyle = markerTextStyle;
|
|
6069
|
+
paragraph.numberingData.width = markerSizes.width;
|
|
6070
|
+
paragraph.numberingData.height = markerSizes.height;
|
|
6071
|
+
const indentLeft = paragraphStyle.indentLeft !== null ? paragraphStyle.indentLeft : numberingLevel.indentLeft;
|
|
6072
|
+
let indent = 0;
|
|
6073
|
+
if (paragraphStyle.indentHanging === null && paragraphStyle.indentFirstLine === null) {
|
|
6074
|
+
indent = -numberingLevel.indentHanging;
|
|
6075
|
+
}
|
|
6076
|
+
else {
|
|
6077
|
+
indent = paragraphStyle.indentHanging !== null ? -paragraphStyle.indentHanging : paragraphStyle.indentFirstLine;
|
|
6078
|
+
}
|
|
6079
|
+
paragraph.numberingData.paddingLeft = indentLeft + indent;
|
|
6080
|
+
}
|
|
6081
|
+
static getMarkerSizes(marker, markerStyle) {
|
|
6082
|
+
let width = 0;
|
|
6083
|
+
let height = 0;
|
|
6084
|
+
const markerStylesString = ContentStyleHelper.getFontStylesString(markerStyle);
|
|
6085
|
+
for (let char of marker) {
|
|
6086
|
+
const markerCharSizes = FontMetrics.measureCharSize(char, markerStylesString);
|
|
6087
|
+
width += markerCharSizes.width;
|
|
6088
|
+
if (height < markerCharSizes.height) {
|
|
6089
|
+
height = markerCharSizes.height;
|
|
6090
|
+
}
|
|
6091
|
+
}
|
|
6092
|
+
return { height, width };
|
|
6093
|
+
}
|
|
6094
|
+
static updateNumberingInfo(numberingInfo, marker, numberingId, level) {
|
|
6095
|
+
const markerLevels = this.getLevelInfo(marker);
|
|
6096
|
+
const lastMarkerLevel = markerLevels.length - 1;
|
|
6097
|
+
numberingInfo[numberingId][level].markerIndex = markerLevels[lastMarkerLevel];
|
|
6098
|
+
numberingInfo[numberingId][level].needToRecalculate = true;
|
|
6099
|
+
}
|
|
6100
|
+
static getLevelInfo(input) {
|
|
6101
|
+
return input
|
|
6102
|
+
.split('.')
|
|
6103
|
+
.filter(x => !!x)
|
|
6104
|
+
.map(x => parseInt(x));
|
|
6105
|
+
}
|
|
6106
|
+
static createMarkerString(numberingInfo, numberingId, splittedMarker) {
|
|
6107
|
+
const markers = splittedMarker.map(x => {
|
|
6108
|
+
if (x === '') {
|
|
6109
|
+
return '';
|
|
6110
|
+
}
|
|
6111
|
+
if (x.indexOf('%') === -1) {
|
|
6112
|
+
return x;
|
|
6113
|
+
}
|
|
6114
|
+
const markerLevel = parseInt(x.slice(1));
|
|
6115
|
+
const markerIndex = numberingInfo[numberingId][markerLevel - 1]?.markerIndex;
|
|
6116
|
+
return `${markerIndex}`;
|
|
6117
|
+
});
|
|
6118
|
+
return markers.join('.');
|
|
6119
|
+
}
|
|
6120
|
+
static getMarkerOffset(paragraphSettings) {
|
|
6121
|
+
const numberingData = paragraphSettings.numberingData;
|
|
6122
|
+
const info = paragraphSettings.textLinesInfo[0];
|
|
6123
|
+
if (numberingData.numberingId === null) {
|
|
6124
|
+
return { offset: 0, markerWidth: 0 };
|
|
6125
|
+
}
|
|
6126
|
+
const offset = numberingData.width + numberingData.paddingLeft;
|
|
6127
|
+
let markerWidth = info.indentFirstLine !== null || (offset - info.indentLeft > 0 && offset - info.indentLeft < info.indent.markerWidth)
|
|
6128
|
+
? info.indent.markerWidth
|
|
6129
|
+
: 0;
|
|
6130
|
+
return { offset, markerWidth };
|
|
6131
|
+
}
|
|
6132
|
+
static getOffsetCausedByMarker(numberingData, info) {
|
|
6133
|
+
if (!info.isNumbering) {
|
|
6134
|
+
return 0;
|
|
6135
|
+
}
|
|
6136
|
+
const offset = numberingData.width + numberingData.paddingLeft - info.indentLeft;
|
|
6137
|
+
return info.indentFirstLine !== null || (offset > 0 && offset <= info.indent.markerWidth) ? info.indent.markerWidth : 0;
|
|
5936
6138
|
}
|
|
5937
6139
|
}
|
|
5938
6140
|
|
|
@@ -5960,8 +6162,8 @@ class PositionHelper {
|
|
|
5960
6162
|
paragraphIndex,
|
|
5961
6163
|
lineIndex,
|
|
5962
6164
|
lineTopOffset,
|
|
5963
|
-
|
|
5964
|
-
|
|
6165
|
+
lineHeight: paragraphLineInfo.height,
|
|
6166
|
+
lineAscent: paragraphLineInfo.ascent
|
|
5965
6167
|
};
|
|
5966
6168
|
}
|
|
5967
6169
|
static documentToScreen(session, paragraph, indexInParagraph) {
|
|
@@ -5999,34 +6201,14 @@ class PositionHelper {
|
|
|
5999
6201
|
static screenToPixel(session, row, column) {
|
|
6000
6202
|
const paragraphs = session.displayData.paragraphs;
|
|
6001
6203
|
const paragraphInfo = this.getParagraphInfoByRow(paragraphs, row);
|
|
6002
|
-
const tokens =
|
|
6003
|
-
let size = {
|
|
6004
|
-
width: 8,
|
|
6005
|
-
height: paragraphInfo.lineHeight,
|
|
6006
|
-
baseline: paragraphInfo.lineHeight,
|
|
6007
|
-
content: paragraphInfo.lineHeight,
|
|
6008
|
-
font: paragraphInfo.lineHeight,
|
|
6009
|
-
line: paragraphInfo.lineHeight,
|
|
6010
|
-
multiplier: paragraphInfo.lineHeight,
|
|
6011
|
-
ascent: 0,
|
|
6012
|
-
descent: 0
|
|
6013
|
-
};
|
|
6204
|
+
const tokens = session.displayData.getParagraphLineTokens(paragraphInfo.paragraphIndex, paragraphInfo.lineIndex);
|
|
6014
6205
|
let tokenIndex = column > 0 ? column - 1 : column;
|
|
6015
|
-
|
|
6016
|
-
size = tokens[tokenIndex];
|
|
6017
|
-
}
|
|
6018
|
-
const sizeNext = tokens[tokenIndex + 1];
|
|
6019
|
-
let sizeMax = { ...size };
|
|
6206
|
+
let sizeMax = { ...tokens[tokenIndex] };
|
|
6020
6207
|
let lineWidthToPosition = session.displayData.pagesFormat[0].pageFormatModel.marginLeft; // this value is the same for all page formats.
|
|
6021
|
-
const { paragraphIndex, lineIndex } = this.findLineInParagraphs(paragraphs, row);
|
|
6022
|
-
const lineInfo = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[lineIndex];
|
|
6023
6208
|
for (let currentColumn = 0; currentColumn < tokens.length; currentColumn++) {
|
|
6024
6209
|
const currentToken = tokens[currentColumn];
|
|
6025
6210
|
if (currentColumn < column) {
|
|
6026
6211
|
lineWidthToPosition += currentToken.width;
|
|
6027
|
-
if (currentToken.displayValue === DisplayValue.space && lineInfo.wordSpacing) {
|
|
6028
|
-
lineWidthToPosition += lineInfo.wordSpacing;
|
|
6029
|
-
}
|
|
6030
6212
|
}
|
|
6031
6213
|
if (sizeMax.ascent < currentToken.ascent) {
|
|
6032
6214
|
sizeMax = currentToken;
|
|
@@ -6037,18 +6219,14 @@ class PositionHelper {
|
|
|
6037
6219
|
}
|
|
6038
6220
|
const paragraph = paragraphs[paragraphInfo.paragraphIndex];
|
|
6039
6221
|
const paragraphTop = paragraph.paragraphSettings.distanceFromTop || 0;
|
|
6040
|
-
const
|
|
6041
|
-
const
|
|
6042
|
-
const markerWidth = this.getMarkerWidth(paragraph.paragraphSettings, paragraph.paragraphSettings.textLinesInfo[0], paragraphInfo.lineIndex);
|
|
6222
|
+
const info = paragraph.paragraphSettings.textLinesInfo[paragraphInfo.lineIndex];
|
|
6223
|
+
const markerOffset = NumberingHelper.getOffsetCausedByMarker(paragraph.paragraphSettings.numberingData, info); // todo: verify (case - 1) numbering paragraph with multi-lines; 2) marker is moved far left so it not affect line offset)
|
|
6043
6224
|
return {
|
|
6044
|
-
pageX: lineWidthToPosition +
|
|
6225
|
+
pageX: lineWidthToPosition + info.paddingLeft + info.offsetMargin + markerOffset,
|
|
6045
6226
|
pageY: paragraphTop + paragraphInfo.lineTopOffset - session.scrollTop,
|
|
6046
|
-
|
|
6047
|
-
|
|
6048
|
-
|
|
6049
|
-
sizeNext,
|
|
6050
|
-
firstChar: column === 0,
|
|
6051
|
-
lastChar: column === tokens.length - 1
|
|
6227
|
+
width: tokens[tokenIndex].width,
|
|
6228
|
+
height: paragraphInfo.lineHeight,
|
|
6229
|
+
ascent: paragraphInfo.lineAscent
|
|
6052
6230
|
};
|
|
6053
6231
|
}
|
|
6054
6232
|
/**
|
|
@@ -6084,24 +6262,17 @@ class PositionHelper {
|
|
|
6084
6262
|
static mapPixelToClosestTokenMidpoint(session, xPixel, paragraphIndex, lineIndex, leftOffset) {
|
|
6085
6263
|
const paragraphSettings = session.displayData.paragraphs[paragraphIndex].paragraphSettings;
|
|
6086
6264
|
const marginLeft = session.displayData.pagesFormat[0].pageFormatModel.marginLeft; // this value is the same for all page formats.
|
|
6087
|
-
const tokens =
|
|
6265
|
+
const tokens = session.displayData.getParagraphLineTokens(paragraphIndex, lineIndex);
|
|
6088
6266
|
const lineInfo = paragraphSettings.textLinesInfo[lineIndex];
|
|
6089
6267
|
const line = lineInfo.screenLine;
|
|
6090
|
-
if (tokens[0].
|
|
6268
|
+
if (tokens[0].isParagraph) {
|
|
6091
6269
|
return { line, indexInLine: 0 };
|
|
6092
6270
|
}
|
|
6093
6271
|
let indexInLine = 0;
|
|
6094
|
-
const
|
|
6095
|
-
let relativeX = xPixel - leftOffset - marginLeft - lineInfo.paddingLeft - lineInfo.offsetMargin -
|
|
6096
|
-
|
|
6097
|
-
|
|
6098
|
-
const token = tokens[indexInLine];
|
|
6099
|
-
const isSpace = token.displayValue === DisplayValue.space;
|
|
6100
|
-
const width = token.width + (isSpace ? wordSpacing : 0);
|
|
6101
|
-
if (relativeX < width / 2) {
|
|
6102
|
-
break;
|
|
6103
|
-
}
|
|
6104
|
-
relativeX -= width;
|
|
6272
|
+
const markerOffset = NumberingHelper.getOffsetCausedByMarker(paragraphSettings.numberingData, lineInfo);
|
|
6273
|
+
let relativeX = xPixel - leftOffset - marginLeft - lineInfo.paddingLeft - lineInfo.offsetMargin - markerOffset;
|
|
6274
|
+
while (indexInLine < tokens.length && relativeX >= tokens[indexInLine].width / 2) {
|
|
6275
|
+
relativeX -= tokens[indexInLine].width;
|
|
6105
6276
|
indexInLine++;
|
|
6106
6277
|
}
|
|
6107
6278
|
return { line, indexInLine };
|
|
@@ -6112,24 +6283,17 @@ class PositionHelper {
|
|
|
6112
6283
|
static mapPixelToNextTokenBoundary(session, xPixel, paragraphIndex, lineIndex, leftOffset) {
|
|
6113
6284
|
const paragraphSettings = session.displayData.paragraphs[paragraphIndex].paragraphSettings;
|
|
6114
6285
|
const marginLeft = session.displayData.pagesFormat[0].pageFormatModel.marginLeft; // this value is the same for all page formats.
|
|
6115
|
-
const tokens =
|
|
6286
|
+
const tokens = session.displayData.getParagraphLineTokens(paragraphIndex, lineIndex);
|
|
6116
6287
|
const lineInfo = paragraphSettings.textLinesInfo[lineIndex];
|
|
6117
6288
|
const line = lineInfo.screenLine;
|
|
6118
|
-
if (tokens[0].
|
|
6289
|
+
if (tokens[0].isParagraph) {
|
|
6119
6290
|
return { line, indexInLine: 0 };
|
|
6120
6291
|
}
|
|
6121
6292
|
let indexInLine = 0;
|
|
6122
|
-
const
|
|
6123
|
-
let relativeX = xPixel - leftOffset - marginLeft - lineInfo.paddingLeft - lineInfo.offsetMargin -
|
|
6124
|
-
|
|
6125
|
-
|
|
6126
|
-
const token = tokens[indexInLine];
|
|
6127
|
-
const isSpace = token.displayValue === DisplayValue.space;
|
|
6128
|
-
const width = token.width + (isSpace ? wordSpacing : 0);
|
|
6129
|
-
if (relativeX < width) {
|
|
6130
|
-
break;
|
|
6131
|
-
}
|
|
6132
|
-
relativeX -= width;
|
|
6293
|
+
const markerOffset = NumberingHelper.getOffsetCausedByMarker(paragraphSettings.numberingData, lineInfo);
|
|
6294
|
+
let relativeX = xPixel - leftOffset - marginLeft - lineInfo.paddingLeft - lineInfo.offsetMargin - markerOffset;
|
|
6295
|
+
while (indexInLine < tokens.length && relativeX >= tokens[indexInLine].width) {
|
|
6296
|
+
relativeX -= tokens[indexInLine].width;
|
|
6133
6297
|
indexInLine++;
|
|
6134
6298
|
}
|
|
6135
6299
|
return { line, indexInLine };
|
|
@@ -6151,38 +6315,19 @@ class PositionHelper {
|
|
|
6151
6315
|
const paragraphs = session.displayData.paragraphs;
|
|
6152
6316
|
const marginLeft = session.displayData.pagesFormat[0].pageFormatModel.marginLeft; // this value is the same for all page formats.
|
|
6153
6317
|
const { paragraphIndex, lineIndex } = PositionHelper.findLineInParagraphs(paragraphs, documentLine);
|
|
6154
|
-
|
|
6155
|
-
|
|
6156
|
-
|
|
6157
|
-
return column;
|
|
6158
|
-
}
|
|
6159
|
-
const textLineInfo = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[lineIndex];
|
|
6160
|
-
const wordSpacing = textLineInfo.wordSpacing ?? 0;
|
|
6161
|
-
const markerWidth = this.getMarkerWidth(paragraphs[paragraphIndex].paragraphSettings, textLineInfo, lineIndex);
|
|
6162
|
-
let width = positionWidth - textLineInfo.paddingLeft - marginLeft - textLineInfo.offsetMargin - markerWidth;
|
|
6163
|
-
while (column < tokens.length) {
|
|
6164
|
-
const token = tokens[column];
|
|
6165
|
-
if (width < token.width) {
|
|
6166
|
-
break;
|
|
6167
|
-
}
|
|
6168
|
-
const isSpace = token.displayValue === DisplayValue.space;
|
|
6169
|
-
width -= token.width + (isSpace ? wordSpacing : 0);
|
|
6170
|
-
column++;
|
|
6318
|
+
const tokens = session.displayData.getParagraphLineTokens(paragraphIndex, lineIndex);
|
|
6319
|
+
if (tokens[0].isParagraph) {
|
|
6320
|
+
return 0;
|
|
6171
6321
|
}
|
|
6172
|
-
|
|
6173
|
-
|
|
6174
|
-
|
|
6175
|
-
|
|
6176
|
-
|
|
6177
|
-
|
|
6178
|
-
|
|
6179
|
-
lineIndex === 0 &&
|
|
6180
|
-
(textLineInfo.indentFirstLine !== null ||
|
|
6181
|
-
(numberingOffsetLeft - textLineInfo.indentLeft > 0 &&
|
|
6182
|
-
numberingOffsetLeft - textLineInfo.indentLeft <= textLineInfo.markerWidth))) {
|
|
6183
|
-
return textLineInfo.markerWidth;
|
|
6322
|
+
let index = 0;
|
|
6323
|
+
const lineInfo = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[lineIndex];
|
|
6324
|
+
const markerOffset = NumberingHelper.getOffsetCausedByMarker(paragraphs[paragraphIndex].paragraphSettings.numberingData, lineInfo);
|
|
6325
|
+
let width = positionWidth - lineInfo.paddingLeft - marginLeft - lineInfo.offsetMargin - markerOffset;
|
|
6326
|
+
while (index < tokens.length && width >= tokens[index].width) {
|
|
6327
|
+
width -= tokens[index].width;
|
|
6328
|
+
index++;
|
|
6184
6329
|
}
|
|
6185
|
-
return
|
|
6330
|
+
return index;
|
|
6186
6331
|
}
|
|
6187
6332
|
}
|
|
6188
6333
|
|
|
@@ -6233,15 +6378,6 @@ class EdgeElementModel {
|
|
|
6233
6378
|
}
|
|
6234
6379
|
}
|
|
6235
6380
|
|
|
6236
|
-
class FormatExtModel extends FormatModel {
|
|
6237
|
-
constructor(fields) {
|
|
6238
|
-
super(fields);
|
|
6239
|
-
if (fields) {
|
|
6240
|
-
Object.assign(this, fields);
|
|
6241
|
-
}
|
|
6242
|
-
}
|
|
6243
|
-
}
|
|
6244
|
-
|
|
6245
6381
|
class ScalingHelper {
|
|
6246
6382
|
static getRatio(current, original) {
|
|
6247
6383
|
return parseFloat((current / original).toFixed(1));
|
|
@@ -6255,100 +6391,55 @@ class RenderingHelper {
|
|
|
6255
6391
|
static createLineElement(lineInfo, numberingOffsetLeft, scalingRatio) {
|
|
6256
6392
|
let lineEl = document.createElement('div');
|
|
6257
6393
|
lineEl.className = 'noder-line';
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6262
|
-
|
|
6263
|
-
if (lineInfo.wordSpacing) {
|
|
6264
|
-
styleString += `word-spacing:${lineInfo.wordSpacing}px;`;
|
|
6265
|
-
}
|
|
6266
|
-
lineEl.setAttribute('style', styleString);
|
|
6267
|
-
lineEl.setAttribute('screen-index', `${lineInfo.screenLine}`);
|
|
6268
|
-
}
|
|
6394
|
+
const paddingLeft = ScalingHelper.scale(lineInfo.paddingLeft, scalingRatio);
|
|
6395
|
+
const marginLeft = numberingOffsetLeft !== null ? -numberingOffsetLeft : 0;
|
|
6396
|
+
let styleString = `padding-left:${paddingLeft}px;height:${lineInfo.height + lineInfo.offsetAfter}px;margin-top:${lineInfo.offsetBefore}px;margin-bottom:${lineInfo.endPageOffset}px;margin-left:${marginLeft}px;background-color:${lineInfo.backgroundColor};`;
|
|
6397
|
+
lineEl.setAttribute('style', styleString);
|
|
6398
|
+
lineEl.setAttribute('screen-index', `${lineInfo.screenLine}`);
|
|
6269
6399
|
return lineEl;
|
|
6270
6400
|
}
|
|
6271
|
-
static
|
|
6272
|
-
const
|
|
6273
|
-
|
|
6274
|
-
|
|
6275
|
-
|
|
6276
|
-
|
|
6277
|
-
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6283
|
-
|
|
6284
|
-
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
|
|
6288
|
-
|
|
6289
|
-
|
|
6290
|
-
|
|
6291
|
-
|
|
6292
|
-
|
|
6293
|
-
|
|
6294
|
-
|
|
6295
|
-
|
|
6296
|
-
|
|
6297
|
-
|
|
6298
|
-
|
|
6299
|
-
|
|
6300
|
-
|
|
6301
|
-
|
|
6302
|
-
|
|
6303
|
-
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6308
|
-
const fragmentDocumentDistance = new DistanceModel({ start: fragmentDocumentStartIndex, end: fragmentDocumentEndIndex });
|
|
6309
|
-
const fragmentStartIndex = distance.start > formatExt.startIndex ? distance.start - formatExt.startIndex : 0;
|
|
6310
|
-
const fragmentEndIndex = formatExt.endIndex < beforeSplitDocumentIndex
|
|
6311
|
-
? fragmentStartIndex + formatExt.endIndex - formatExt.startIndex
|
|
6312
|
-
: distance.start + beforeSplitIndex - formatExt.startIndex;
|
|
6313
|
-
const fragmentDistance = new DistanceModel({ start: fragmentStartIndex, end: fragmentEndIndex });
|
|
6314
|
-
isLastLineFragment = split === fragmentDocumentDistance.end + 1;
|
|
6315
|
-
paragraphChars += this.renderFormatContent(valueFragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks, lineInfo, isLastLineFragment);
|
|
6316
|
-
lineEl.appendChild(valueFragment);
|
|
6317
|
-
let nextFragmentStartIndex = fragmentEndIndex + 1;
|
|
6318
|
-
while (paragraphChars === split && nextFragmentStartIndex !== distance.end) {
|
|
6319
|
-
split = splits[++splitIndex];
|
|
6320
|
-
lineInfo = currentParagraph.textLinesInfo[splitIndex];
|
|
6321
|
-
const nextFragmentDocumentStartIndex = fragmentDocumentStartIndex + nextFragmentStartIndex - fragmentStartIndex;
|
|
6322
|
-
lineEl = RenderingHelper.createLineElement(lineInfo, numberingOffsetLeft, scalingRatio);
|
|
6323
|
-
if (split > formatExt.endIndex) {
|
|
6324
|
-
const nextFragmentEndIndex = formatExt.content.length - 1;
|
|
6325
|
-
const nextFragmentDistance = new DistanceModel({ start: nextFragmentStartIndex, end: nextFragmentEndIndex });
|
|
6326
|
-
const nextFragmentDocumentEndIndex = nextFragmentDocumentStartIndex + nextFragmentEndIndex - nextFragmentStartIndex;
|
|
6327
|
-
const nextFragmentDocumentDistance = new DistanceModel({
|
|
6328
|
-
start: nextFragmentDocumentStartIndex,
|
|
6329
|
-
end: nextFragmentDocumentEndIndex
|
|
6330
|
-
});
|
|
6331
|
-
isLastLineFragment = split === nextFragmentDocumentDistance.end + 1;
|
|
6332
|
-
paragraphChars += this.renderFormatContent(valueFragment, formatExt, nextFragmentDocumentDistance, nextFragmentDistance, customContentService, customComponents, breaks, lineInfo, isLastLineFragment);
|
|
6333
|
-
lineEl.appendChild(valueFragment);
|
|
6401
|
+
static renderParagraph(domContent, paragraph, formats, customContentService, customComponents, scalingRatio, breaks = []) {
|
|
6402
|
+
const { offset, markerWidth } = NumberingHelper.getMarkerOffset(paragraph.paragraphSettings);
|
|
6403
|
+
const lineInfos = paragraph.paragraphSettings.textLinesInfo;
|
|
6404
|
+
const start = paragraph.startIndex;
|
|
6405
|
+
const end = paragraph.startIndex + paragraph.content.length;
|
|
6406
|
+
const fragment = DomHelper.createFragment(domContent.currentElement);
|
|
6407
|
+
let lineIndex = 0;
|
|
6408
|
+
let renderedCount = 0;
|
|
6409
|
+
let lineEl = RenderingHelper.createLineElement(paragraph.paragraphSettings.textLinesInfo[0], offset - markerWidth, scalingRatio);
|
|
6410
|
+
for (const format of formats) {
|
|
6411
|
+
do {
|
|
6412
|
+
const lineEnd = paragraph.nextLineIndexes[lineIndex]
|
|
6413
|
+
? paragraph.startIndex + paragraph.nextLineIndexes[lineIndex] - 1
|
|
6414
|
+
: end;
|
|
6415
|
+
let fragmentEnd = format.endIndex < lineEnd ? format.endIndex : lineEnd;
|
|
6416
|
+
let wordSpacing = lineInfos[lineIndex].wordSpacing;
|
|
6417
|
+
if (wordSpacing) {
|
|
6418
|
+
const lineStart = lineIndex > 0 ? paragraph.nextLineIndexes[lineIndex - 1] : 0;
|
|
6419
|
+
const lineStartIndex = start + lineStart;
|
|
6420
|
+
const wordSpacingStart = lineInfos[lineIndex].wordSpacingStart;
|
|
6421
|
+
const wordSpacingEnd = lineInfos[lineIndex].wordSpacingEnd;
|
|
6422
|
+
if (renderedCount - lineStart < wordSpacingStart && lineStartIndex + wordSpacingStart < fragmentEnd) {
|
|
6423
|
+
fragmentEnd = lineStartIndex + wordSpacingStart;
|
|
6424
|
+
}
|
|
6425
|
+
else if (renderedCount - lineStart < wordSpacingEnd && lineStartIndex + wordSpacingEnd < fragmentEnd) {
|
|
6426
|
+
fragmentEnd = lineStartIndex + wordSpacingEnd;
|
|
6427
|
+
}
|
|
6428
|
+
if (renderedCount - lineStart < wordSpacingStart || renderedCount - lineStart > wordSpacingEnd) {
|
|
6429
|
+
wordSpacing = null;
|
|
6430
|
+
}
|
|
6431
|
+
}
|
|
6432
|
+
const fragmentLength = fragmentEnd - start - renderedCount + 1;
|
|
6433
|
+
this.renderFormatContent(fragment, format.textStyle, start + renderedCount, fragmentEnd, paragraph.content.substring(renderedCount, renderedCount + fragmentLength), customContentService, customComponents, breaks, wordSpacing);
|
|
6434
|
+
lineEl.appendChild(fragment);
|
|
6435
|
+
renderedCount += fragmentLength;
|
|
6436
|
+
if (paragraph.nextLineIndexes.length > lineIndex && start + renderedCount > lineEnd) {
|
|
6437
|
+
lineIndex++;
|
|
6334
6438
|
domContent.parentNode.appendChild(lineEl);
|
|
6335
|
-
|
|
6439
|
+
lineEl = RenderingHelper.createLineElement(lineInfos[lineIndex], offset, scalingRatio);
|
|
6336
6440
|
}
|
|
6337
|
-
|
|
6338
|
-
|
|
6339
|
-
const nextFragmentEndIndex = nextFragmentStartIndex + textIndexLength;
|
|
6340
|
-
const nextFragmentDistance = new DistanceModel({ start: nextFragmentStartIndex, end: nextFragmentEndIndex });
|
|
6341
|
-
const nextFragmentDocumentDistance = new DistanceModel({
|
|
6342
|
-
start: nextFragmentDocumentStartIndex,
|
|
6343
|
-
end: nextFragmentDocumentEndIndex
|
|
6344
|
-
});
|
|
6345
|
-
isLastLineFragment = split === nextFragmentDocumentDistance.end + 1;
|
|
6346
|
-
const renderedChars = this.renderFormatContent(valueFragment, formatExt, nextFragmentDocumentDistance, nextFragmentDistance, customContentService, customComponents, breaks, lineInfo, isLastLineFragment);
|
|
6347
|
-
lineEl.appendChild(valueFragment);
|
|
6348
|
-
domContent.parentNode.appendChild(lineEl);
|
|
6349
|
-
nextFragmentStartIndex += renderedChars;
|
|
6350
|
-
paragraphChars += renderedChars;
|
|
6351
|
-
}
|
|
6441
|
+
} while (renderedCount < paragraph.content.length && format.endIndex > start + renderedCount);
|
|
6442
|
+
domContent.parentNode.appendChild(lineEl);
|
|
6352
6443
|
}
|
|
6353
6444
|
}
|
|
6354
6445
|
static renderNumberingMarker(paragraph, layerElement, scalingRatio) {
|
|
@@ -6365,11 +6456,7 @@ class RenderingHelper {
|
|
|
6365
6456
|
const numberingLineEl = this.createLineElement(markerLineInfo, 0, scalingRatio);
|
|
6366
6457
|
const markerFragment = DomHelper.createFragment(layerElement);
|
|
6367
6458
|
const marker = paragraph.numberingData.marker;
|
|
6368
|
-
|
|
6369
|
-
textStyle: paragraph.numberingData.markerTextStyle,
|
|
6370
|
-
content: marker
|
|
6371
|
-
});
|
|
6372
|
-
this.renderText(markerFragment, markerExtModel, marker);
|
|
6459
|
+
this.renderText(markerFragment, paragraph.numberingData.markerTextStyle, marker, null);
|
|
6373
6460
|
numberingLineEl.appendChild(markerFragment);
|
|
6374
6461
|
return numberingLineEl;
|
|
6375
6462
|
}
|
|
@@ -6378,60 +6465,35 @@ class RenderingHelper {
|
|
|
6378
6465
|
containerElement.className = className;
|
|
6379
6466
|
return containerElement;
|
|
6380
6467
|
}
|
|
6381
|
-
static renderFormatContent(fragment,
|
|
6382
|
-
let textFragment = formatExt.content.substring(fragmentDistance.start, fragmentDistance.end + 1);
|
|
6468
|
+
static renderFormatContent(fragment, textStyle, start, end, textFragment, customContentService, customComponents, breaks, wordSpacing) {
|
|
6383
6469
|
if (!textFragment) {
|
|
6384
|
-
return 0;
|
|
6385
|
-
}
|
|
6386
|
-
const textFragmentWithoutBreaks = BreakHelper.removeBreakMarker(breaks, textFragment, fragmentDocumentDistance.start);
|
|
6387
|
-
if (customContentService.isFragmentContainComponent(customComponents, textFragment, fragmentDocumentDistance)) {
|
|
6388
|
-
this.renderTextWithCustomContent(fragment, formatExt, fragmentDocumentDistance, textFragmentWithoutBreaks, customContentService, customComponents, lineInfo);
|
|
6389
|
-
}
|
|
6390
|
-
else if (isLastLineFragment) {
|
|
6391
|
-
this.renderTextWithSpacingHandling(fragment, formatExt, textFragmentWithoutBreaks, lineInfo);
|
|
6392
|
-
}
|
|
6393
|
-
else {
|
|
6394
|
-
const paddingLeft = textFragment.startsWith(' ') && lineInfo.wordSpacing ? lineInfo.wordSpacing : null;
|
|
6395
|
-
this.renderText(fragment, formatExt, textFragmentWithoutBreaks, paddingLeft);
|
|
6396
|
-
}
|
|
6397
|
-
return textFragment.length;
|
|
6398
|
-
}
|
|
6399
|
-
static renderTextWithCustomContent(fragment, formatExt, fragmentDocumentDistance, textFragment, customContentService, customComponents, lineInfo) {
|
|
6400
|
-
const components = customContentService.getComponents(customComponents, fragmentDocumentDistance);
|
|
6401
|
-
if (!components.length) {
|
|
6402
|
-
this.renderTextWithSpacingHandling(fragment, formatExt, textFragment, lineInfo);
|
|
6403
6470
|
return;
|
|
6404
6471
|
}
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
|
|
6408
|
-
|
|
6409
|
-
nextTextFragment =
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6472
|
+
const textFragmentWithoutBreaks = BreakHelper.removeBreakMarker(breaks, textFragment, start);
|
|
6473
|
+
const components = customContentService.getComponents(customComponents, start, end);
|
|
6474
|
+
if (components.length) {
|
|
6475
|
+
let newTextFragmentStartIndex = start;
|
|
6476
|
+
let nextTextFragment = textFragmentWithoutBreaks;
|
|
6477
|
+
for (const component of components) {
|
|
6478
|
+
const textBeforeElement = nextTextFragment.substring(0, component.instance.insertIndex - newTextFragmentStartIndex);
|
|
6479
|
+
nextTextFragment = nextTextFragment.substring(textBeforeElement.length + 1, nextTextFragment.length);
|
|
6480
|
+
newTextFragmentStartIndex = newTextFragmentStartIndex + (textBeforeElement.length ? textBeforeElement.length + 1 : 1);
|
|
6481
|
+
if (textBeforeElement.length) {
|
|
6482
|
+
this.renderText(fragment, textStyle, textBeforeElement, wordSpacing);
|
|
6483
|
+
}
|
|
6484
|
+
customContentService.componentService.attachComponent(fragment, component);
|
|
6485
|
+
}
|
|
6486
|
+
if (nextTextFragment.length) {
|
|
6487
|
+
this.renderText(fragment, textStyle, nextTextFragment, wordSpacing);
|
|
6414
6488
|
}
|
|
6415
|
-
this.attachComponent(fragment, component, customContentService);
|
|
6416
|
-
}
|
|
6417
|
-
if (nextTextFragment.length) {
|
|
6418
|
-
this.renderTextWithSpacingHandling(fragment, formatExt, nextTextFragment, lineInfo);
|
|
6419
|
-
}
|
|
6420
|
-
}
|
|
6421
|
-
static renderTextWithSpacingHandling(fragment, formatExt, textFragment, lineInfo) {
|
|
6422
|
-
const paddingLeft = textFragment.startsWith(' ') && lineInfo.wordSpacing ? lineInfo.wordSpacing : null;
|
|
6423
|
-
if (lineInfo.wordSpacing && textFragment.endsWith(' ')) {
|
|
6424
|
-
this.renderText(fragment, formatExt, textFragment.slice(0, -1), paddingLeft);
|
|
6425
|
-
this.renderText(fragment, formatExt, ' ');
|
|
6426
6489
|
}
|
|
6427
6490
|
else {
|
|
6428
|
-
this.renderText(fragment,
|
|
6491
|
+
this.renderText(fragment, textStyle, textFragmentWithoutBreaks, wordSpacing);
|
|
6429
6492
|
}
|
|
6430
6493
|
}
|
|
6431
|
-
static renderText(fragment,
|
|
6494
|
+
static renderText(fragment, textStyle, content, wordSpacing) {
|
|
6432
6495
|
const span = document.createElement('span');
|
|
6433
|
-
|
|
6434
|
-
if (textFragment === NEW_LINE_MARKUP) {
|
|
6496
|
+
if (content === NEW_LINE_MARKUP) {
|
|
6435
6497
|
span.className = 'paragraph-symbol';
|
|
6436
6498
|
}
|
|
6437
6499
|
if (textStyle.headingStyleId === HYPERLINK_HEADING_STYLE_ID) {
|
|
@@ -6446,21 +6508,14 @@ class RenderingHelper {
|
|
|
6446
6508
|
};
|
|
6447
6509
|
span.onmouseleave = () => span.classList.remove('hyperlink-hover');
|
|
6448
6510
|
}
|
|
6449
|
-
span.textContent =
|
|
6511
|
+
span.textContent = content;
|
|
6450
6512
|
let styleString = ContentStyleHelper.getTextStylesString(textStyle);
|
|
6451
|
-
if (
|
|
6452
|
-
styleString += `
|
|
6513
|
+
if (wordSpacing) {
|
|
6514
|
+
styleString += `word-spacing:${wordSpacing}px;`;
|
|
6453
6515
|
}
|
|
6454
6516
|
span.setAttribute('style', styleString);
|
|
6455
6517
|
fragment.appendChild(span);
|
|
6456
6518
|
}
|
|
6457
|
-
static getTextIndexLengthForInsert(formatExt, fragmentDocumentStartIndex, paragraphDistance, split, paragraphChars) {
|
|
6458
|
-
const maxLength = Math.max(paragraphDistance.end - paragraphChars - paragraphDistance.start, 0);
|
|
6459
|
-
return (Math.min(split - paragraphChars || Number.MAX_VALUE, maxLength, formatExt.endIndex - fragmentDocumentStartIndex + 1, formatExt.content.length) - 1);
|
|
6460
|
-
}
|
|
6461
|
-
static attachComponent(fragment, component, customContentService) {
|
|
6462
|
-
customContentService.componentService.attachComponent(fragment, component);
|
|
6463
|
-
}
|
|
6464
6519
|
}
|
|
6465
6520
|
|
|
6466
6521
|
class EdgesLayer {
|
|
@@ -6775,12 +6830,6 @@ class PrintPagesLayer extends PagesLayer {
|
|
|
6775
6830
|
}
|
|
6776
6831
|
}
|
|
6777
6832
|
|
|
6778
|
-
class PrintRenderingHelper extends RenderingHelper {
|
|
6779
|
-
static attachComponent(fragment, component, customContentService) {
|
|
6780
|
-
customContentService.componentService.cloneAndAttachComponent(fragment, component);
|
|
6781
|
-
}
|
|
6782
|
-
}
|
|
6783
|
-
|
|
6784
6833
|
class Lines {
|
|
6785
6834
|
get length() {
|
|
6786
6835
|
return this.cells.length;
|
|
@@ -7056,10 +7105,9 @@ class ParagraphHelper {
|
|
|
7056
7105
|
}
|
|
7057
7106
|
|
|
7058
7107
|
class TextLayer {
|
|
7059
|
-
constructor(parentElement, session
|
|
7108
|
+
constructor(parentElement, session) {
|
|
7060
7109
|
this.parentElement = parentElement;
|
|
7061
7110
|
this.session = session;
|
|
7062
|
-
this.renderingHelper = renderingHelper;
|
|
7063
7111
|
this.pagesCountChangedHandler = (event) => {
|
|
7064
7112
|
this.lines.setSizes(event.pagesCount, event.pageHeight);
|
|
7065
7113
|
};
|
|
@@ -7134,46 +7182,22 @@ class TextLayer {
|
|
|
7134
7182
|
DomHelper.setStyle(paragraphCell.element.style, 'margin-right', `${offsetForLittlePages}px`);
|
|
7135
7183
|
const paragraphSettings = this.session.displayData.getParagraphSettings(row);
|
|
7136
7184
|
if (paragraphSettings.numberingData.numberingId !== null) {
|
|
7137
|
-
const numberingElement =
|
|
7185
|
+
const numberingElement = RenderingHelper.renderNumberingMarker(paragraphSettings, this.element, this.session.generalProperties.scalingRatio);
|
|
7138
7186
|
numberingElement.className = 'numberingMarker';
|
|
7139
7187
|
paragraphCell.element.appendChild(numberingElement);
|
|
7140
7188
|
}
|
|
7141
|
-
this.
|
|
7189
|
+
this.renderParagraph(paragraphCell.element, this.session.displayData.paragraphs[row]);
|
|
7142
7190
|
fragment.push(paragraphCell);
|
|
7143
7191
|
}
|
|
7144
7192
|
return fragment;
|
|
7145
7193
|
}
|
|
7146
|
-
|
|
7147
|
-
const linesContainerElement =
|
|
7148
|
-
const
|
|
7149
|
-
const paragraphHeight = ParagraphHelper.getParagraphHeight(paragraphSettings.textLinesInfo);
|
|
7194
|
+
renderParagraph(parent, paragraph) {
|
|
7195
|
+
const linesContainerElement = RenderingHelper.createDivContainer('lines-container');
|
|
7196
|
+
const paragraphHeight = ParagraphHelper.getParagraphHeight(paragraph.paragraphSettings.textLinesInfo);
|
|
7150
7197
|
DomHelper.setStyle(linesContainerElement.style, 'height', `${paragraphHeight}px`);
|
|
7151
7198
|
parent.appendChild(linesContainerElement);
|
|
7152
|
-
const
|
|
7153
|
-
|
|
7154
|
-
const combinedFormats = FormatStyleHelper.combineSection(this.session.model.formats, this.session.model.links, startIndex, endIndex).map(x => new FormatExtModel({ ...x, content: this.session.model.content.substring(x.startIndex, x.endIndex + 1) }));
|
|
7155
|
-
const splits = this.session.displayData.paragraphs[row].nextLineIndexes;
|
|
7156
|
-
if (splits?.length) {
|
|
7157
|
-
const distance = new DistanceModel({ start: startIndex, end: endIndex });
|
|
7158
|
-
this.renderingHelper.renderContentWrappedLine({ currentElement: this.element, parentNode: linesContainerElement }, splits, paragraphSettings, combinedFormats, distance, this.session.customContentService, this.session.customComponents, this.session.generalProperties.scalingRatio, this.session.model.breaks);
|
|
7159
|
-
}
|
|
7160
|
-
else {
|
|
7161
|
-
const markerWidth = paragraphSettings.textLinesInfo[0].indentFirstLine ? paragraphSettings.textLinesInfo[0].markerWidth : 0;
|
|
7162
|
-
const numberingOffsetLeft = paragraphSettings.numberingData.numberingId === null
|
|
7163
|
-
? 0
|
|
7164
|
-
: paragraphSettings.numberingData.width + paragraphSettings.numberingData.paddingLeft - markerWidth;
|
|
7165
|
-
let offset = 0;
|
|
7166
|
-
if (paragraphSettings.textLinesInfo[0].isNumbering &&
|
|
7167
|
-
numberingOffsetLeft - paragraphSettings.textLinesInfo[0].indentLeft > 0 &&
|
|
7168
|
-
numberingOffsetLeft - paragraphSettings.textLinesInfo[0].indentLeft < paragraphSettings.textLinesInfo[0].markerWidth) {
|
|
7169
|
-
offset = paragraphSettings.textLinesInfo[0].markerWidth;
|
|
7170
|
-
}
|
|
7171
|
-
const lineInfo = paragraphSettings.textLinesInfo[0];
|
|
7172
|
-
const lastLineEl = this.renderingHelper.createLineElement(lineInfo, numberingOffsetLeft - offset, this.session.generalProperties.scalingRatio);
|
|
7173
|
-
linesContainerElement.appendChild(lastLineEl);
|
|
7174
|
-
const rowDistance = new DistanceModel({ start: startIndex, end: endIndex });
|
|
7175
|
-
this.renderingHelper.renderContentSimpleLine({ currentElement: this.element, parentNode: lastLineEl }, combinedFormats, rowDistance, this.session.customContentService, this.session.customComponents, lineInfo, this.session.model.breaks);
|
|
7176
|
-
}
|
|
7199
|
+
const combinedFormats = FormatStyleHelper.combineSection(this.session.model.formats, this.session.model.links, paragraph.startIndex, paragraph.startIndex + paragraph.content.length);
|
|
7200
|
+
RenderingHelper.renderParagraph({ currentElement: this.element, parentNode: linesContainerElement }, paragraph, combinedFormats, this.session.customContentService, this.session.customComponents, this.session.generalProperties.scalingRatio, this.session.model.breaks);
|
|
7177
7201
|
}
|
|
7178
7202
|
}
|
|
7179
7203
|
|
|
@@ -7219,7 +7243,7 @@ class PrintRenderer {
|
|
|
7219
7243
|
this.content.className = 'noder-content print';
|
|
7220
7244
|
}
|
|
7221
7245
|
createLayers() {
|
|
7222
|
-
this.textLayer = new PrintTextLayer(this.content, this.mainSession
|
|
7246
|
+
this.textLayer = new PrintTextLayer(this.content, this.mainSession);
|
|
7223
7247
|
this.pagesLayer = new PrintPagesLayer(this.content, this.mainSession);
|
|
7224
7248
|
this.edgesLayer = new EdgesLayer(this.content, this.mainSession);
|
|
7225
7249
|
}
|
|
@@ -8621,7 +8645,7 @@ class Editor {
|
|
|
8621
8645
|
const cursor = PositionHelper.documentToPixel(this.session, this.session.selection.cursor);
|
|
8622
8646
|
const rect = this.renderer.container.getBoundingClientRect();
|
|
8623
8647
|
const x = rect.left + cursor.pageX;
|
|
8624
|
-
const y = rect.top + cursor.pageY + cursor.
|
|
8648
|
+
const y = rect.top + cursor.pageY + cursor.height;
|
|
8625
8649
|
this.overlayService.open(component, { textKey }, x, y);
|
|
8626
8650
|
}
|
|
8627
8651
|
cut() {
|
|
@@ -9271,7 +9295,7 @@ class Editor {
|
|
|
9271
9295
|
saveInsertBreakToHistory(model) {
|
|
9272
9296
|
model.isOnNewParagraph =
|
|
9273
9297
|
model.breakType === BreakTypes.Page &&
|
|
9274
|
-
BreakHelper.getBreakType(this.session.model, CUSTOM_ELEMENT_MARKER, model.insertIndex - 1) !== BreakTypes.Page;
|
|
9298
|
+
BreakHelper.getBreakType(this.session.model.breaks, CUSTOM_ELEMENT_MARKER, model.insertIndex - 1) !== BreakTypes.Page;
|
|
9275
9299
|
const count = model.isOnNewParagraph ? NEW_LINE_MARKUP.length + 1 : 1;
|
|
9276
9300
|
this.history.pushInsertBreak(model, count);
|
|
9277
9301
|
this.commandsService.createCommand(SaveCommandsHelper.getInsertBreakCommand(model, this.targets));
|
|
@@ -9865,7 +9889,7 @@ class Editor {
|
|
|
9865
9889
|
const mainRect = this.mainRenderer.container.getBoundingClientRect();
|
|
9866
9890
|
const rect = this.renderer.container.getBoundingClientRect();
|
|
9867
9891
|
const hintX = mainRect.right - 20;
|
|
9868
|
-
const hintY = rect.top + cursor.pageY + cursor.
|
|
9892
|
+
const hintY = rect.top + cursor.pageY + cursor.height / 2 - 20;
|
|
9869
9893
|
this.overlayService.open(CommentPopupComponent, {}, hintX, hintY);
|
|
9870
9894
|
}
|
|
9871
9895
|
}
|
|
@@ -9915,9 +9939,7 @@ class Editor {
|
|
|
9915
9939
|
changedTableSize(insertIndex, sessionId) {
|
|
9916
9940
|
const session = this.regulatorService.getSession(sessionId);
|
|
9917
9941
|
const paragraph = ContentHelper.documentIndexToParagraphIndex(session.displayData.paragraphs, insertIndex).row;
|
|
9918
|
-
session.displayData.resetAllNumberingInfo(paragraph);
|
|
9919
9942
|
session.displayData.updateNextLineIndexes(paragraph, paragraph);
|
|
9920
|
-
session.displayData.updateNumberingsDataOnChange(paragraph + 1);
|
|
9921
9943
|
this.focus();
|
|
9922
9944
|
this.onContentChange();
|
|
9923
9945
|
}
|
|
@@ -10377,18 +10399,12 @@ class Editor {
|
|
|
10377
10399
|
let existed = this.mainSession.customComponents.edges.headersComponents.findIndex(x => x.instance.sessionId === sessionId);
|
|
10378
10400
|
if (existed !== -1) {
|
|
10379
10401
|
const headers = this.mainSession.customComponents.edges.headersComponents.slice(existed + 1);
|
|
10380
|
-
headers.forEach(x =>
|
|
10381
|
-
x.instance.session.displayData.resetAllNumberingInfo(0);
|
|
10382
|
-
x.instance.session.displayData.updateNextLineIndexes(0, x.instance.session.displayData.paragraphs.length - 1);
|
|
10383
|
-
});
|
|
10402
|
+
headers.forEach(x => x.instance.session.displayData.updateNextLineIndexes(0, x.instance.session.displayData.paragraphs.length - 1));
|
|
10384
10403
|
}
|
|
10385
10404
|
else {
|
|
10386
10405
|
existed = this.mainSession.customComponents.edges.footersComponents.findIndex(x => x.instance.sessionId === sessionId);
|
|
10387
10406
|
const footers = this.mainSession.customComponents.edges.footersComponents.slice(existed + 1);
|
|
10388
|
-
footers.forEach(x =>
|
|
10389
|
-
x.instance.session.displayData.resetAllNumberingInfo(0);
|
|
10390
|
-
x.instance.session.displayData.updateNextLineIndexes(0, x.instance.session.displayData.paragraphs.length - 1);
|
|
10391
|
-
});
|
|
10407
|
+
footers.forEach(x => x.instance.session.displayData.updateNextLineIndexes(0, x.instance.session.displayData.paragraphs.length - 1));
|
|
10392
10408
|
}
|
|
10393
10409
|
});
|
|
10394
10410
|
}
|
|
@@ -10467,7 +10483,7 @@ class Editor {
|
|
|
10467
10483
|
const mainRect = this.mainRenderer.container.getBoundingClientRect();
|
|
10468
10484
|
const rect = this.renderer.container.getBoundingClientRect();
|
|
10469
10485
|
const hintX = mainRect.right - 20;
|
|
10470
|
-
const hintY = rect.top + cursor.pageY + cursor.
|
|
10486
|
+
const hintY = rect.top + cursor.pageY + cursor.height / 2 - 20;
|
|
10471
10487
|
this.overlayService.open(CommentPopupComponent, {}, hintX, hintY);
|
|
10472
10488
|
event?.stopPropagation();
|
|
10473
10489
|
}
|
|
@@ -10652,10 +10668,47 @@ class CellSessionSourceModel {
|
|
|
10652
10668
|
}
|
|
10653
10669
|
}
|
|
10654
10670
|
|
|
10671
|
+
const DisplayValue = {
|
|
10672
|
+
char: 1,
|
|
10673
|
+
customContent: 3,
|
|
10674
|
+
table: 4,
|
|
10675
|
+
pageBreak: 5,
|
|
10676
|
+
lineBreak: 6,
|
|
10677
|
+
punctuation: 9,
|
|
10678
|
+
space: 10,
|
|
10679
|
+
tab: 11,
|
|
10680
|
+
paragraph: 13,
|
|
10681
|
+
hyphen: 14
|
|
10682
|
+
};
|
|
10683
|
+
|
|
10655
10684
|
class DisplayToken {
|
|
10685
|
+
get isSpace() {
|
|
10686
|
+
return this.displayValue === DisplayValue.space;
|
|
10687
|
+
}
|
|
10688
|
+
get isParagraph() {
|
|
10689
|
+
return this.displayValue === DisplayValue.paragraph;
|
|
10690
|
+
}
|
|
10691
|
+
get isPageBreak() {
|
|
10692
|
+
return this.displayValue === DisplayValue.pageBreak;
|
|
10693
|
+
}
|
|
10694
|
+
get isLineBreak() {
|
|
10695
|
+
return this.displayValue === DisplayValue.lineBreak;
|
|
10696
|
+
}
|
|
10697
|
+
get isTab() {
|
|
10698
|
+
return this.displayValue === DisplayValue.tab;
|
|
10699
|
+
}
|
|
10700
|
+
get isTable() {
|
|
10701
|
+
return this.displayValue === DisplayValue.table;
|
|
10702
|
+
}
|
|
10703
|
+
get isWhiteSpace() {
|
|
10704
|
+
return this.isSpace || this.isParagraph;
|
|
10705
|
+
}
|
|
10656
10706
|
get breaksLine() {
|
|
10657
10707
|
return this.isPageBreak || this.isLineBreak;
|
|
10658
10708
|
}
|
|
10709
|
+
get breakable() {
|
|
10710
|
+
return this.displayValue !== DisplayValue.char && this.displayValue !== DisplayValue.punctuation;
|
|
10711
|
+
}
|
|
10659
10712
|
constructor(fields) {
|
|
10660
10713
|
if (!fields) {
|
|
10661
10714
|
return;
|
|
@@ -10664,79 +10717,28 @@ class DisplayToken {
|
|
|
10664
10717
|
}
|
|
10665
10718
|
}
|
|
10666
10719
|
|
|
10667
|
-
class
|
|
10668
|
-
|
|
10669
|
-
this.
|
|
10670
|
-
this.hanging = hanging;
|
|
10671
|
-
this.left = left;
|
|
10672
|
-
this.right = right;
|
|
10720
|
+
class NoderTabComponent extends BaseNoderComponent {
|
|
10721
|
+
get tab() {
|
|
10722
|
+
return this.content;
|
|
10673
10723
|
}
|
|
10674
|
-
|
|
10675
|
-
|
|
10676
|
-
class LineInfoModel {
|
|
10677
|
-
constructor(fields) {
|
|
10678
|
-
if (!fields) {
|
|
10679
|
-
return;
|
|
10680
|
-
}
|
|
10681
|
-
Object.assign(this, fields);
|
|
10724
|
+
set tab(val) {
|
|
10725
|
+
this.content = val;
|
|
10682
10726
|
}
|
|
10683
|
-
|
|
10684
|
-
|
|
10685
|
-
class DisplayTokenHelper {
|
|
10686
|
-
static getDisplayValue(charCode) {
|
|
10687
|
-
if (charCode === 32) {
|
|
10688
|
-
return DisplayValue.space;
|
|
10689
|
-
}
|
|
10690
|
-
if ((charCode > 39 && charCode < 48) || (charCode > 57 && charCode < 64)) {
|
|
10691
|
-
return DisplayValue.punctuation;
|
|
10692
|
-
}
|
|
10693
|
-
return DisplayValue.char;
|
|
10727
|
+
initialize() {
|
|
10728
|
+
this.applySize(this.tab.width);
|
|
10694
10729
|
}
|
|
10695
|
-
|
|
10696
|
-
|
|
10697
|
-
width: 0,
|
|
10698
|
-
height: 0,
|
|
10699
|
-
align: prevToken.align,
|
|
10700
|
-
indent: new IndentModel(prevToken.indentFirstLine, prevToken.indentHanging, prevToken.indentLeft, prevToken.indentRight),
|
|
10701
|
-
offsetBefore: prevToken.indentBefore,
|
|
10702
|
-
offsetAfter: prevToken.indentAfter,
|
|
10703
|
-
lineSpacing: prevToken.lineSpacing,
|
|
10704
|
-
markerWidth: prevToken.markerWidth,
|
|
10705
|
-
isAfterPageBreak,
|
|
10706
|
-
isEndedByPageBreak: prevToken.isPageBreak,
|
|
10707
|
-
isNumbering: prevToken.isNumbering
|
|
10708
|
-
});
|
|
10709
|
-
if (firstWrapToken) {
|
|
10710
|
-
info.align = firstWrapToken.align;
|
|
10711
|
-
info.indent.firstLine = firstWrapToken.indentFirstLine;
|
|
10712
|
-
info.indent.hanging = firstWrapToken.indentHanging;
|
|
10713
|
-
info.indent.left = firstWrapToken.indentLeft;
|
|
10714
|
-
info.indent.right = firstWrapToken.indentRight;
|
|
10715
|
-
info.offsetBefore = firstWrapToken.indentBefore;
|
|
10716
|
-
info.offsetAfter = firstWrapToken.indentAfter;
|
|
10717
|
-
info.lineSpacing = firstWrapToken.lineSpacing;
|
|
10718
|
-
info.hasTable = firstWrapToken.isTable;
|
|
10719
|
-
info.isNumbering = firstWrapToken.isNumbering;
|
|
10720
|
-
info.markerWidth = firstWrapToken.markerWidth;
|
|
10721
|
-
}
|
|
10722
|
-
let maxAscent = 0;
|
|
10723
|
-
let maxDescent = 0;
|
|
10724
|
-
const tokens = isAfterPageBreak && !wrapTokens.length ? [prevToken] : wrapTokens;
|
|
10725
|
-
for (const wrapToken of tokens) {
|
|
10726
|
-
if (maxAscent < wrapToken.ascent) {
|
|
10727
|
-
maxAscent = wrapToken.ascent;
|
|
10728
|
-
}
|
|
10729
|
-
if (maxDescent < wrapToken.descent) {
|
|
10730
|
-
maxDescent = wrapToken.descent;
|
|
10731
|
-
}
|
|
10732
|
-
info.width += wrapToken.width;
|
|
10733
|
-
}
|
|
10734
|
-
info.maxAscent = maxAscent;
|
|
10735
|
-
info.height = maxAscent + maxDescent;
|
|
10736
|
-
info.offsetAfter = info.height * (info.lineSpacing - 1);
|
|
10737
|
-
return info;
|
|
10730
|
+
applySize(width) {
|
|
10731
|
+
this.width.set(ScalingHelper.scale(width, this.generalProperties.scalingRatio));
|
|
10738
10732
|
}
|
|
10733
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTabComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
10734
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderTabComponent, isStandalone: false, selector: "app-nod-tab", host: { properties: { "style.min-width.px": "width()" } }, usesInheritance: true, ngImport: i0, template: " \n", styles: [":host{position:relative;outline:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10739
10735
|
}
|
|
10736
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTabComponent, decorators: [{
|
|
10737
|
+
type: Component,
|
|
10738
|
+
args: [{ selector: 'app-nod-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, host: {
|
|
10739
|
+
'[style.min-width.px]': 'width()'
|
|
10740
|
+
}, template: " \n", styles: [":host{position:relative;outline:none}\n"] }]
|
|
10741
|
+
}] });
|
|
10740
10742
|
|
|
10741
10743
|
class CellDataModel {
|
|
10742
10744
|
constructor(cell, cellContentHeight, componentRef) {
|
|
@@ -10888,21 +10890,6 @@ class CellResizerParametersModel {
|
|
|
10888
10890
|
}
|
|
10889
10891
|
}
|
|
10890
10892
|
|
|
10891
|
-
class MarginModel {
|
|
10892
|
-
constructor(fields) {
|
|
10893
|
-
this.left = DocumentInfo.paddingLeft;
|
|
10894
|
-
this.right = DocumentInfo.paddingRight;
|
|
10895
|
-
this.top = DocumentInfo.paddingTop;
|
|
10896
|
-
this.bottom = DocumentInfo.paddingBottom;
|
|
10897
|
-
this.header = DocumentInfo.paddingHeader;
|
|
10898
|
-
this.footer = DocumentInfo.paddingFooter;
|
|
10899
|
-
if (!fields) {
|
|
10900
|
-
return;
|
|
10901
|
-
}
|
|
10902
|
-
Object.assign(this, fields);
|
|
10903
|
-
}
|
|
10904
|
-
}
|
|
10905
|
-
|
|
10906
10893
|
class NoderTableCellComponent {
|
|
10907
10894
|
get session() {
|
|
10908
10895
|
return this.cellSession.session;
|
|
@@ -10935,10 +10922,10 @@ class NoderTableCellComponent {
|
|
|
10935
10922
|
}
|
|
10936
10923
|
initialize() {
|
|
10937
10924
|
const marginModel = new MarginModel({
|
|
10938
|
-
left:
|
|
10939
|
-
right:
|
|
10940
|
-
top: 0,
|
|
10941
|
-
bottom: 0,
|
|
10925
|
+
left: this.cell.margins?.left ?? this.table.margins?.left ?? 0,
|
|
10926
|
+
right: this.cell.margins?.right ?? this.table.margins?.right ?? 0,
|
|
10927
|
+
top: this.cell.margins?.top ?? this.table.margins?.top ?? 0,
|
|
10928
|
+
bottom: this.cell.margins?.bottom ?? this.table.margins?.bottom ?? 0,
|
|
10942
10929
|
header: 0,
|
|
10943
10930
|
footer: 0
|
|
10944
10931
|
});
|
|
@@ -11988,195 +11975,156 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
11988
11975
|
args: [{ selector: 'app-nod-table', template: '', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"] }]
|
|
11989
11976
|
}], ctorParameters: () => [{ type: ComponentService }, { type: i0.ElementRef }, { type: OverlayService }, { type: RegulatorService }] });
|
|
11990
11977
|
|
|
11991
|
-
class
|
|
11992
|
-
|
|
11993
|
-
if (
|
|
11994
|
-
return;
|
|
11995
|
-
}
|
|
11996
|
-
Object.assign(this, fields);
|
|
11997
|
-
}
|
|
11998
|
-
}
|
|
11999
|
-
|
|
12000
|
-
class NumberingParagraphStyleModel extends ParagraphStyleModel {
|
|
12001
|
-
constructor(fields) {
|
|
12002
|
-
super();
|
|
12003
|
-
this.numberingType = null;
|
|
12004
|
-
this.numberingLevelsStyles = null;
|
|
12005
|
-
if (!fields) {
|
|
12006
|
-
return;
|
|
12007
|
-
}
|
|
12008
|
-
Object.assign(this, fields);
|
|
12009
|
-
}
|
|
12010
|
-
}
|
|
12011
|
-
|
|
12012
|
-
class NumberingHelper {
|
|
12013
|
-
static getStyles(paragraphStyle, numberings) {
|
|
12014
|
-
const numberingLevels = numberings.find(x => x.numberingId === paragraphStyle.numberingId).levels;
|
|
12015
|
-
const numberingLevelsStyles = numberingLevels.reduce((prev, next) => `${prev}${next.marker}${next.markerType}`, '');
|
|
12016
|
-
const level = numberingLevels.find(x => x.level === paragraphStyle.numberingLevel);
|
|
12017
|
-
return new NumberingParagraphStyleModel({ ...paragraphStyle, numberingType: level.markerType, numberingLevelsStyles });
|
|
12018
|
-
}
|
|
12019
|
-
static find(numberings, id, level) {
|
|
12020
|
-
const numbering = numberings.find(x => x.numberingId === id);
|
|
12021
|
-
return numbering?.levels.find(x => x.level === level);
|
|
12022
|
-
}
|
|
12023
|
-
static calculateNumberingInfo(numberingId, level, marker, numberingInfo, numberings) {
|
|
12024
|
-
const numberingModel = this.find(numberings, numberingId, level);
|
|
12025
|
-
if (numberingModel?.markerType === NumberingMarkerType.Bullet) {
|
|
12026
|
-
return;
|
|
11978
|
+
class DisplayTokenHelper {
|
|
11979
|
+
static getDisplayValue(charCode, breakType) {
|
|
11980
|
+
if (breakType === BreakTypes.Page) {
|
|
11981
|
+
return DisplayValue.pageBreak;
|
|
12027
11982
|
}
|
|
12028
|
-
|
|
12029
|
-
|
|
12030
|
-
static calculateMarkerIndexes(numberingId, level, marker, numberingInfo) {
|
|
12031
|
-
if (!numberingId) {
|
|
12032
|
-
return;
|
|
11983
|
+
if (breakType === BreakTypes.TextWrapping) {
|
|
11984
|
+
return DisplayValue.lineBreak;
|
|
12033
11985
|
}
|
|
12034
|
-
if (
|
|
12035
|
-
|
|
12036
|
-
return;
|
|
11986
|
+
if (charCode === 32) {
|
|
11987
|
+
return DisplayValue.space;
|
|
12037
11988
|
}
|
|
12038
|
-
if (
|
|
12039
|
-
|
|
12040
|
-
numberingInfo[numberingId][level].markerIndex++;
|
|
12041
|
-
return;
|
|
12042
|
-
}
|
|
12043
|
-
this.updateNumberingInfo(numberingInfo, marker, numberingId, level);
|
|
11989
|
+
if (charCode === 45) {
|
|
11990
|
+
return DisplayValue.hyphen;
|
|
12044
11991
|
}
|
|
12045
|
-
|
|
12046
|
-
|
|
12047
|
-
for (let i = 0; i < numberingInfo[numberingId].length; i++) {
|
|
12048
|
-
if (i >= level + 1) {
|
|
12049
|
-
numberingInfo[numberingId][i].markerIndex = 0;
|
|
12050
|
-
}
|
|
12051
|
-
else {
|
|
12052
|
-
if (numberingInfo[numberingId][i].markerIndex === 0) {
|
|
12053
|
-
numberingInfo[numberingId][i].markerIndex++;
|
|
12054
|
-
}
|
|
12055
|
-
}
|
|
12056
|
-
}
|
|
11992
|
+
if ((charCode > 39 && charCode < 48) || (charCode > 57 && charCode < 64)) {
|
|
11993
|
+
return DisplayValue.punctuation;
|
|
12057
11994
|
}
|
|
11995
|
+
return DisplayValue.char;
|
|
12058
11996
|
}
|
|
12059
|
-
static
|
|
12060
|
-
|
|
12061
|
-
|
|
12062
|
-
if (index === -1) {
|
|
12063
|
-
return resultMarker;
|
|
12064
|
-
}
|
|
12065
|
-
if (numberingInfo[numberingId]?.length && numberingInfo[numberingId][levelModel.level]) {
|
|
12066
|
-
return this.createMarkerString(numberingInfo, numberingId, levelModel.level);
|
|
12067
|
-
}
|
|
12068
|
-
while (index !== -1) {
|
|
12069
|
-
const symbolLevelNumber = Number(resultMarker[index + 1]) - 1;
|
|
12070
|
-
const levelIndex = this.getLevelIndex(paragraphs, paragraphIndex, numberingId, symbolLevelNumber);
|
|
12071
|
-
const count = levelModel.startValue + levelIndex;
|
|
12072
|
-
resultMarker = resultMarker.slice(0, index) + count.toString() + resultMarker.slice(index + 2);
|
|
12073
|
-
index = resultMarker.indexOf('%');
|
|
12074
|
-
}
|
|
12075
|
-
numberingInfo[numberingId] ??= [];
|
|
12076
|
-
this.updateNumberingInfo(numberingInfo, resultMarker, numberingId, levelModel.level);
|
|
12077
|
-
const markerLevels = resultMarker.split('.');
|
|
12078
|
-
if (levelModel.level !== 0 && markerLevels[markerLevels.length - 1] === '') {
|
|
12079
|
-
return resultMarker.slice(0, -1);
|
|
12080
|
-
}
|
|
12081
|
-
return resultMarker;
|
|
11997
|
+
static getParagraphToken(paragraphSymbolStyle) {
|
|
11998
|
+
const size = FontMetrics.measureCharSize('0', ContentStyleHelper.getFontStylesString(paragraphSymbolStyle));
|
|
11999
|
+
return new DisplayToken({ ...size, displayValue: DisplayValue.paragraph });
|
|
12082
12000
|
}
|
|
12083
|
-
static
|
|
12084
|
-
const
|
|
12085
|
-
|
|
12086
|
-
|
|
12087
|
-
|
|
12001
|
+
static getSymbolToken(code, size, breakType) {
|
|
12002
|
+
const result = new DisplayToken({ ...size, displayValue: DisplayTokenHelper.getDisplayValue(code, breakType) });
|
|
12003
|
+
if (result.isSpace) {
|
|
12004
|
+
result.ascent = 0;
|
|
12005
|
+
result.descent = 0;
|
|
12006
|
+
result.height = 0;
|
|
12088
12007
|
}
|
|
12089
|
-
|
|
12090
|
-
const numberingLevelModel = this.find(numberings, numberingId, level);
|
|
12091
|
-
for (let i = 0; i < level; i++) {
|
|
12092
|
-
if (!numberingInfo[numberingId] || !numberingInfo[numberingId][i]) {
|
|
12093
|
-
const numberingLevel = this.find(numberings, numberingId, i);
|
|
12094
|
-
this.getMarker(numberingLevel, numberingId, paragraphs, paragraphIndex, numberingInfo);
|
|
12095
|
-
}
|
|
12096
|
-
}
|
|
12097
|
-
const marker = this.getMarker(numberingLevelModel, numberingId, paragraphs, paragraphIndex, numberingInfo);
|
|
12098
|
-
return new NumberingDataModel({ numberingId, level, marker });
|
|
12008
|
+
return result;
|
|
12099
12009
|
}
|
|
12100
|
-
static
|
|
12101
|
-
const
|
|
12102
|
-
const
|
|
12103
|
-
|
|
12104
|
-
|
|
12105
|
-
|
|
12106
|
-
|
|
12107
|
-
|
|
12108
|
-
|
|
12109
|
-
|
|
12110
|
-
|
|
12111
|
-
|
|
12112
|
-
|
|
12113
|
-
indent = paragraphStyle.indentHanging !== null ? -paragraphStyle.indentHanging : paragraphStyle.indentFirstLine;
|
|
12114
|
-
}
|
|
12115
|
-
paragraph.numberingData.paddingLeft = indentLeft + indent;
|
|
12010
|
+
static getComponentToken(component, size) {
|
|
12011
|
+
const ascent = component.instance.ascent() ?? 0;
|
|
12012
|
+
const descent = component.instance.descent() ?? 0;
|
|
12013
|
+
let displayValue = component.instance instanceof NoderTabComponent ? DisplayValue.tab : DisplayValue.customContent;
|
|
12014
|
+
displayValue = component.instance instanceof NoderTableComponent ? DisplayValue.table : displayValue;
|
|
12015
|
+
return new DisplayToken({
|
|
12016
|
+
width: component.instance.width(),
|
|
12017
|
+
height: ascent + descent,
|
|
12018
|
+
font: size.font,
|
|
12019
|
+
ascent,
|
|
12020
|
+
descent,
|
|
12021
|
+
displayValue
|
|
12022
|
+
});
|
|
12116
12023
|
}
|
|
12117
|
-
|
|
12118
|
-
|
|
12119
|
-
|
|
12120
|
-
|
|
12121
|
-
|
|
12122
|
-
|
|
12123
|
-
|
|
12124
|
-
|
|
12125
|
-
|
|
12126
|
-
}
|
|
12127
|
-
}
|
|
12128
|
-
return { height, width };
|
|
12024
|
+
}
|
|
12025
|
+
|
|
12026
|
+
class IndentModel {
|
|
12027
|
+
constructor(firstLine, hanging, left, right, markerWidth) {
|
|
12028
|
+
this.firstLine = firstLine;
|
|
12029
|
+
this.hanging = hanging;
|
|
12030
|
+
this.left = left;
|
|
12031
|
+
this.right = right;
|
|
12032
|
+
this.markerWidth = markerWidth;
|
|
12129
12033
|
}
|
|
12130
|
-
|
|
12131
|
-
|
|
12034
|
+
}
|
|
12035
|
+
|
|
12036
|
+
class LineInfoModel {
|
|
12037
|
+
constructor(fields) {
|
|
12038
|
+
if (!fields) {
|
|
12132
12039
|
return;
|
|
12133
12040
|
}
|
|
12134
|
-
|
|
12135
|
-
const lastMarkerLevel = markerLevels.length - 1;
|
|
12136
|
-
numberingInfo[numberingId][level] = {
|
|
12137
|
-
markerIndex: markerLevels[lastMarkerLevel],
|
|
12138
|
-
markerLevel: Math.min(lastMarkerLevel, level),
|
|
12139
|
-
visited: true
|
|
12140
|
-
};
|
|
12041
|
+
Object.assign(this, fields);
|
|
12141
12042
|
}
|
|
12142
|
-
|
|
12143
|
-
|
|
12144
|
-
|
|
12145
|
-
|
|
12146
|
-
|
|
12147
|
-
|
|
12148
|
-
|
|
12149
|
-
|
|
12150
|
-
|
|
12151
|
-
|
|
12152
|
-
|
|
12153
|
-
|
|
12043
|
+
}
|
|
12044
|
+
|
|
12045
|
+
class LineInfoHelper {
|
|
12046
|
+
static get(tokens, isAfterPageBreak, isLastLine, style, indent, isNumbering, width, defaultHeight, defaultAscent) {
|
|
12047
|
+
const result = new LineInfoModel({
|
|
12048
|
+
isAfterPageBreak,
|
|
12049
|
+
isEndedByPageBreak: tokens[tokens.length - 1].isPageBreak,
|
|
12050
|
+
backgroundColor: style.backgroundColor,
|
|
12051
|
+
align: style.alignment ?? DEFAULT_PARAGRAPH_STYLE.alignment,
|
|
12052
|
+
indent,
|
|
12053
|
+
offsetBefore: DEFAULT_PARAGRAPH_STYLE.spaceBefore,
|
|
12054
|
+
lineSpacing: style.lineSpacing ?? DEFAULT_PARAGRAPH_STYLE.lineSpacing,
|
|
12055
|
+
isNumbering,
|
|
12056
|
+
hasTable: false,
|
|
12057
|
+
width: 0
|
|
12058
|
+
});
|
|
12059
|
+
let maxAscent = 0;
|
|
12060
|
+
let maxDescent = 0;
|
|
12061
|
+
for (const token of tokens) {
|
|
12062
|
+
if (maxAscent < token.ascent) {
|
|
12063
|
+
maxAscent = token.ascent;
|
|
12064
|
+
}
|
|
12065
|
+
if (maxDescent < token.descent) {
|
|
12066
|
+
maxDescent = token.descent;
|
|
12067
|
+
}
|
|
12068
|
+
result.width += token.width;
|
|
12069
|
+
}
|
|
12070
|
+
result.height = maxAscent + maxDescent;
|
|
12071
|
+
result.ascent = maxAscent;
|
|
12072
|
+
if (result.height === 0) {
|
|
12073
|
+
result.height = defaultHeight;
|
|
12074
|
+
result.ascent = defaultAscent;
|
|
12075
|
+
}
|
|
12076
|
+
result.offsetAfter = result.height * (result.lineSpacing - 1);
|
|
12077
|
+
if (style.alignment === Alignment$1.justify && !isLastLine) {
|
|
12078
|
+
let right = tokens.length - 1;
|
|
12079
|
+
let adjustableWidth = result.width;
|
|
12080
|
+
while (right > 0 && tokens[right].isSpace) {
|
|
12081
|
+
adjustableWidth -= tokens[right].width;
|
|
12082
|
+
right--;
|
|
12083
|
+
}
|
|
12084
|
+
let left = 0;
|
|
12085
|
+
while (left < tokens.length - 1 && tokens[left].isSpace) {
|
|
12086
|
+
left++;
|
|
12087
|
+
}
|
|
12088
|
+
let spaces = 0;
|
|
12089
|
+
for (let i = right; i > left; i--) {
|
|
12090
|
+
if (tokens[i].isTab) {
|
|
12091
|
+
left = i;
|
|
12092
|
+
}
|
|
12093
|
+
if (tokens[i].isSpace) {
|
|
12094
|
+
spaces++;
|
|
12095
|
+
}
|
|
12154
12096
|
}
|
|
12155
|
-
|
|
12156
|
-
|
|
12157
|
-
|
|
12097
|
+
const indentWidth = (indent.left ?? 0) + (indent.right ?? 0) + (indent.firstLine ?? 0) - (indent.hanging ?? 0);
|
|
12098
|
+
const availableWidth = width - indentWidth - indent.markerWidth; // todo: use NumberingHelper.getOffsetCausedByMarker
|
|
12099
|
+
const whitespaceDeficit = availableWidth - adjustableWidth;
|
|
12100
|
+
if (spaces > 0 && whitespaceDeficit > 0) {
|
|
12101
|
+
result.wordSpacing = whitespaceDeficit / spaces;
|
|
12102
|
+
result.width = availableWidth;
|
|
12103
|
+
result.wordSpacingStart = left;
|
|
12104
|
+
result.wordSpacingEnd = right;
|
|
12105
|
+
for (let i = right; i > left; i--) {
|
|
12106
|
+
if (tokens[i].isSpace) {
|
|
12107
|
+
tokens[i].width += result.wordSpacing;
|
|
12108
|
+
}
|
|
12109
|
+
}
|
|
12158
12110
|
}
|
|
12159
12111
|
}
|
|
12160
|
-
|
|
12161
|
-
return index <= 0 ? 0 : index - 1;
|
|
12162
|
-
}
|
|
12163
|
-
static getLevelInfo(input) {
|
|
12164
|
-
return input
|
|
12165
|
-
.split('.')
|
|
12166
|
-
.filter(x => !!x)
|
|
12167
|
-
.map(x => parseInt(x));
|
|
12112
|
+
return result;
|
|
12168
12113
|
}
|
|
12169
|
-
static
|
|
12170
|
-
|
|
12171
|
-
|
|
12172
|
-
|
|
12173
|
-
|
|
12174
|
-
let { markerLevel, markerIndex } = numberingInfo[numberingId][level];
|
|
12175
|
-
for (let i = 0; i < markerLevel; i++) {
|
|
12176
|
-
marker.push(numberingInfo[numberingId][i].markerIndex);
|
|
12114
|
+
static getFirstLineIndent(model, paragraphIndex, generalProperties) {
|
|
12115
|
+
const paragraph = model.paragraphs[paragraphIndex];
|
|
12116
|
+
const paragraphStyle = paragraph.paragraphStyle;
|
|
12117
|
+
if (paragraphStyle.numberingId === null) {
|
|
12118
|
+
return new IndentModel(paragraph.paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine, paragraph.paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging, paragraph.paragraphStyle.indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight, 0);
|
|
12177
12119
|
}
|
|
12178
|
-
|
|
12179
|
-
|
|
12120
|
+
const levelsModel = NumberingHelper.findNumberingLevels(generalProperties.numberings, paragraphStyle.numberingId);
|
|
12121
|
+
const paragraphFormat = FormatStyleHelper.getFormatAtIndex(model.formats, paragraph.insertIndex);
|
|
12122
|
+
const markerTextStyle = ContentStyleHelper.combineTextStyles(levelsModel[paragraphStyle.numberingLevel].markerStyle, paragraphFormat.textStyle);
|
|
12123
|
+
const marker = NumberingHelper.getMarker(levelsModel, paragraphStyle.numberingLevel, paragraphStyle.numberingId, generalProperties.numberingInfo);
|
|
12124
|
+
const markerWidth = NumberingHelper.getMarkerSizes(marker, markerTextStyle).width;
|
|
12125
|
+
return new IndentModel(paragraph.paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine, DEFAULT_PARAGRAPH_STYLE.indentHanging, paragraph.paragraphStyle.indentLeft !== null
|
|
12126
|
+
? paragraph.paragraphStyle.indentLeft
|
|
12127
|
+
: levelsModel[paragraphStyle.numberingLevel].indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight, markerWidth + markerWidth / marker.length);
|
|
12180
12128
|
}
|
|
12181
12129
|
}
|
|
12182
12130
|
|
|
@@ -12259,20 +12207,14 @@ class PageFormat {
|
|
|
12259
12207
|
}
|
|
12260
12208
|
}
|
|
12261
12209
|
|
|
12262
|
-
class TextLineInfo {
|
|
12210
|
+
class TextLineInfo extends LineInfoModel {
|
|
12263
12211
|
constructor(offsetMargin, contentWidth, align, indent, fields) {
|
|
12212
|
+
super(fields);
|
|
12264
12213
|
this.paddingLeft = 0;
|
|
12265
12214
|
this.offsetMargin = 0;
|
|
12266
|
-
this.offsetBefore = 0;
|
|
12267
|
-
this.offsetAfter = 0;
|
|
12268
12215
|
this.firstLinePageOffset = 0; // for selection
|
|
12269
12216
|
this.endPageOffset = 0; // for selection
|
|
12270
12217
|
this.screenLine = 0;
|
|
12271
|
-
this.isAfterPageBreak = false;
|
|
12272
|
-
this.isEndedByPageBreak = false;
|
|
12273
|
-
if (fields) {
|
|
12274
|
-
Object.assign(this, fields);
|
|
12275
|
-
}
|
|
12276
12218
|
this.indentFirstLine = indent.firstLine;
|
|
12277
12219
|
this.offsetMargin = offsetMargin;
|
|
12278
12220
|
this.indentLeft = indent.left;
|
|
@@ -12394,47 +12336,6 @@ class ParagraphInfosRemoved {
|
|
|
12394
12336
|
}
|
|
12395
12337
|
}
|
|
12396
12338
|
|
|
12397
|
-
class ParagraphStyleHelper {
|
|
12398
|
-
static getParagraphsAtRange(paragraphs, startIndex, endIndex) {
|
|
12399
|
-
if (!paragraphs?.length) {
|
|
12400
|
-
return [];
|
|
12401
|
-
}
|
|
12402
|
-
let firstModifierIndexInRange = paragraphs.findIndex(paragraph => paragraph.insertIndex >= startIndex);
|
|
12403
|
-
firstModifierIndexInRange = firstModifierIndexInRange === -1 ? paragraphs.length : firstModifierIndexInRange;
|
|
12404
|
-
let lastModifierIndexInRange = paragraphs.findIndex(x => x.insertIndex >= endIndex);
|
|
12405
|
-
lastModifierIndexInRange =
|
|
12406
|
-
startIndex === endIndex || lastModifierIndexInRange === -1 ? firstModifierIndexInRange : lastModifierIndexInRange;
|
|
12407
|
-
return paragraphs.slice(firstModifierIndexInRange, lastModifierIndexInRange + 1);
|
|
12408
|
-
}
|
|
12409
|
-
static getParagraphAtIndex(paragraphs, insertIndex) {
|
|
12410
|
-
if (!paragraphs?.length) {
|
|
12411
|
-
return null;
|
|
12412
|
-
}
|
|
12413
|
-
let startIndex = 0;
|
|
12414
|
-
let endIndex = paragraphs.length - 1;
|
|
12415
|
-
while (startIndex <= endIndex) {
|
|
12416
|
-
const middleIndex = Math.round((startIndex + endIndex) / 2);
|
|
12417
|
-
const paragraph = paragraphs[middleIndex];
|
|
12418
|
-
if (paragraph.insertIndex < insertIndex) {
|
|
12419
|
-
startIndex = middleIndex + 1;
|
|
12420
|
-
}
|
|
12421
|
-
else {
|
|
12422
|
-
endIndex = middleIndex - 1;
|
|
12423
|
-
}
|
|
12424
|
-
}
|
|
12425
|
-
return paragraphs[startIndex];
|
|
12426
|
-
}
|
|
12427
|
-
static isEndOfParagraph(paragraphs, endIndex) {
|
|
12428
|
-
const paragraph = this.getParagraphAtIndex(paragraphs, endIndex);
|
|
12429
|
-
let paragraphIndex = paragraphs.findIndex(x => x === paragraph);
|
|
12430
|
-
const endOfParagraphIsParagraph = paragraph && endIndex === paragraph.insertIndex && paragraphs.length - 1 > paragraphIndex;
|
|
12431
|
-
if (endOfParagraphIsParagraph) {
|
|
12432
|
-
paragraphIndex += 1;
|
|
12433
|
-
}
|
|
12434
|
-
return paragraphs[paragraphIndex].insertIndex === endIndex + 1;
|
|
12435
|
-
}
|
|
12436
|
-
}
|
|
12437
|
-
|
|
12438
12339
|
var TabAlignment;
|
|
12439
12340
|
(function (TabAlignment) {
|
|
12440
12341
|
TabAlignment[TabAlignment["Left"] = 0] = "Left";
|
|
@@ -12444,14 +12345,6 @@ var TabAlignment;
|
|
|
12444
12345
|
TabAlignment[TabAlignment["Bar"] = 4] = "Bar";
|
|
12445
12346
|
})(TabAlignment || (TabAlignment = {}));
|
|
12446
12347
|
|
|
12447
|
-
class TabHelper {
|
|
12448
|
-
static calculateTabWidth(rowWidth, defaultTabWidth, tabSettings) {
|
|
12449
|
-
const tabs = tabSettings ?? [];
|
|
12450
|
-
const nextSetting = tabs.find(x => x.position > rowWidth);
|
|
12451
|
-
return nextSetting ? nextSetting.position - rowWidth : defaultTabWidth - (rowWidth % defaultTabWidth);
|
|
12452
|
-
}
|
|
12453
|
-
}
|
|
12454
|
-
|
|
12455
12348
|
class DisplayData extends EventEmitting {
|
|
12456
12349
|
get maxPageWidth() {
|
|
12457
12350
|
let max = 0;
|
|
@@ -12478,7 +12371,6 @@ class DisplayData extends EventEmitting {
|
|
|
12478
12371
|
this.paragraphs = [];
|
|
12479
12372
|
this.pagesFormat = [];
|
|
12480
12373
|
this.allPagesHeight = 0;
|
|
12481
|
-
this.tabTokens = [];
|
|
12482
12374
|
this.ParagraphInfoChanges = new Subject();
|
|
12483
12375
|
this.lastParagraphId = 0;
|
|
12484
12376
|
this.updateDataForModel();
|
|
@@ -12745,26 +12637,36 @@ class DisplayData extends EventEmitting {
|
|
|
12745
12637
|
}
|
|
12746
12638
|
if (paragraphSettings.numberingData.numberingId !== null) {
|
|
12747
12639
|
const paragraphFormat = FormatStyleHelper.getFormatAtIndex(this.model.formats, this.model.paragraphs[index].insertIndex);
|
|
12748
|
-
NumberingHelper.updateMarkerData(this.generalProperties, paragraphSettings, paragraphFormat.textStyle, this.model.paragraphs[index].paragraphStyle);
|
|
12640
|
+
NumberingHelper.updateMarkerData(this.generalProperties.numberings, paragraphSettings, paragraphFormat.textStyle, this.model.paragraphs[index].paragraphStyle);
|
|
12749
12641
|
}
|
|
12750
12642
|
}
|
|
12751
12643
|
updateNextLineIndexes(firstParagraph, lastParagraph) {
|
|
12752
12644
|
this.updateParagraphStartIndex(firstParagraph);
|
|
12753
12645
|
let indexOfParagraphAfterPageBreak = this.getParagraphSettings(firstParagraph - 1)?.isEndedByPageBreak ? firstParagraph : -1;
|
|
12754
|
-
let
|
|
12646
|
+
let updateNumberingFromIndex = null;
|
|
12755
12647
|
for (let i = firstParagraph; i <= lastParagraph; i++) {
|
|
12756
12648
|
if (!this.paragraphs[i]) {
|
|
12757
12649
|
continue;
|
|
12758
12650
|
}
|
|
12759
|
-
|
|
12760
|
-
|
|
12761
|
-
|
|
12762
|
-
|
|
12763
|
-
|
|
12651
|
+
const numberingId = this.model.paragraphs[i].paragraphStyle.numberingId ?? this.getParagraphSettings(i)?.numberingData.numberingId;
|
|
12652
|
+
if (numberingId) {
|
|
12653
|
+
const numberingsLevels = NumberingHelper.findNumberingLevels(this.generalProperties.numberings, numberingId);
|
|
12654
|
+
NumberingHelper.addValueToNumberingInfo(numberingId, this.generalProperties.numberingInfo, numberingsLevels);
|
|
12655
|
+
let startNumberingParagraphIndex = i;
|
|
12656
|
+
while (this.isSameNumberingId(startNumberingParagraphIndex, numberingId)) {
|
|
12657
|
+
startNumberingParagraphIndex -= 1;
|
|
12658
|
+
}
|
|
12659
|
+
if (updateNumberingFromIndex === null || updateNumberingFromIndex > startNumberingParagraphIndex) {
|
|
12660
|
+
updateNumberingFromIndex = startNumberingParagraphIndex;
|
|
12661
|
+
}
|
|
12662
|
+
if (this.model.paragraphs[i].paragraphStyle.numberingId !== this.getParagraphSettings(i)?.numberingData.numberingId) {
|
|
12663
|
+
const updatedNumberingId = this.getParagraphSettings(i)?.numberingData.numberingId ?? this.model.paragraphs[i].paragraphStyle.numberingId;
|
|
12664
|
+
NumberingHelper.setNumberingNeedToRecalculate(this.generalProperties.numberingInfo, updatedNumberingId);
|
|
12665
|
+
}
|
|
12666
|
+
NumberingHelper.setNumberingNeedToRecalculate(this.generalProperties.numberingInfo, numberingId);
|
|
12764
12667
|
}
|
|
12765
|
-
NumberingHelper.calculateNumberingInfo(this.model.paragraphs[i].paragraphStyle.numberingId ?? this.getParagraphSettings(i)?.numberingData.numberingId ?? null, this.model.paragraphs[i].paragraphStyle.numberingLevel ?? this.getParagraphSettings(i)?.numberingData.level ?? null, marker, this.generalProperties.numberingInfo, this.generalProperties.numberings);
|
|
12766
12668
|
const numberingData = NumberingHelper.createDataModel(this.generalProperties.numberings, this.model.paragraphs, i, this.generalProperties.numberingInfo);
|
|
12767
|
-
const { splits, rowInfos } = this.
|
|
12669
|
+
const { splits, rowInfos } = this.splitParagraphByLines(i);
|
|
12768
12670
|
this.paragraphs[i].nextLineIndexes = splits;
|
|
12769
12671
|
if (indexOfParagraphAfterPageBreak === i) {
|
|
12770
12672
|
rowInfos[0].isAfterPageBreak = true;
|
|
@@ -12772,235 +12674,134 @@ class DisplayData extends EventEmitting {
|
|
|
12772
12674
|
indexOfParagraphAfterPageBreak = rowInfos[rowInfos.length - 1].isEndedByPageBreak ? i + 1 : -1;
|
|
12773
12675
|
this.setParagraphSettings(i, rowInfos, numberingData);
|
|
12774
12676
|
this.updateParagraphSettingsNumberingData(i);
|
|
12775
|
-
firstUsedTabIndex = this.updateParagraphTabs(firstUsedTabIndex, i);
|
|
12776
12677
|
}
|
|
12678
|
+
this.updateNumberingsDataOnChange(updateNumberingFromIndex);
|
|
12777
12679
|
this.getParagraphSettings(lastParagraph + 1)?.setIsAfterPageBreak(indexOfParagraphAfterPageBreak > -1);
|
|
12778
12680
|
this.updateParagraphLineNumber(firstParagraph);
|
|
12779
12681
|
this.processParagraphsProperties(firstParagraph);
|
|
12780
12682
|
}
|
|
12683
|
+
isSameNumberingId(paragraphIndex, numberingId) {
|
|
12684
|
+
if (paragraphIndex === 0) {
|
|
12685
|
+
return false;
|
|
12686
|
+
}
|
|
12687
|
+
const startNumberingId = this.model.paragraphs[paragraphIndex].paragraphStyle.numberingId ??
|
|
12688
|
+
this.getParagraphSettings(paragraphIndex)?.numberingData.numberingId;
|
|
12689
|
+
return numberingId === startNumberingId;
|
|
12690
|
+
}
|
|
12781
12691
|
updateNumberingsDataOnChange(index) {
|
|
12692
|
+
if (index === null) {
|
|
12693
|
+
return;
|
|
12694
|
+
}
|
|
12782
12695
|
for (let i = index; i < this.paragraphs.length; i++) {
|
|
12783
12696
|
const paragraphStyle = this.model.paragraphs[i].paragraphStyle;
|
|
12784
12697
|
const paragraphSettings = this.getParagraphSettings(i);
|
|
12785
12698
|
if (this.model.paragraphs[i].paragraphStyle.numberingId !== null) {
|
|
12786
|
-
|
|
12787
|
-
|
|
12788
|
-
|
|
12789
|
-
|
|
12699
|
+
if (this.generalProperties.numberingInfo[paragraphStyle.numberingId][paragraphStyle.numberingLevel].needToRecalculate) {
|
|
12700
|
+
NumberingHelper.calculateNumberingInfo(paragraphStyle.numberingId, paragraphStyle.numberingLevel, this.generalProperties.numberingInfo, this.generalProperties.numberings);
|
|
12701
|
+
paragraphSettings.numberingData = NumberingHelper.createDataModel(this.generalProperties.numberings, this.model.paragraphs, i, this.generalProperties.numberingInfo);
|
|
12702
|
+
const paragraphFormat = FormatStyleHelper.getFormatAtIndex(this.model.formats, this.model.paragraphs[i].insertIndex);
|
|
12703
|
+
NumberingHelper.updateMarkerData(this.generalProperties.numberings, paragraphSettings, paragraphFormat.textStyle, paragraphStyle);
|
|
12704
|
+
}
|
|
12790
12705
|
}
|
|
12791
12706
|
const table = this.customContentService.findComponent(this.customComponents.tables, paragraphSettings.startInsertIndex);
|
|
12792
12707
|
if (table) {
|
|
12793
12708
|
table.instance.updateCells();
|
|
12794
12709
|
}
|
|
12795
12710
|
}
|
|
12711
|
+
NumberingHelper.setAllNumberingIsCalculated(this.generalProperties.numberingInfo);
|
|
12796
12712
|
if ('pageType' in this.model) {
|
|
12797
12713
|
this.editorService.updateEdges(this.sessionId);
|
|
12798
12714
|
}
|
|
12799
12715
|
}
|
|
12800
|
-
|
|
12801
|
-
|
|
12802
|
-
|
|
12803
|
-
if (numberingId !== null && this.generalProperties.numberingInfo[numberingId]) {
|
|
12804
|
-
this.generalProperties.numberingInfo[numberingId] = [];
|
|
12805
|
-
}
|
|
12806
|
-
}
|
|
12807
|
-
}
|
|
12808
|
-
resetNumberingInfoByTableCell(table) {
|
|
12809
|
-
for (const element of table.instance.rowMatrix) {
|
|
12810
|
-
for (let cell of element.cells) {
|
|
12811
|
-
const { marker, numberingId, level } = cell.componentRef.instance.session.displayData.paragraphs[0].paragraphSettings.numberingData;
|
|
12812
|
-
if (marker && numberingId) {
|
|
12813
|
-
NumberingHelper.updateNumberingInfo(this.generalProperties.numberingInfo, marker, numberingId, level);
|
|
12814
|
-
this.resetAllNumberingInfo(0);
|
|
12815
|
-
return;
|
|
12816
|
-
}
|
|
12817
|
-
}
|
|
12818
|
-
}
|
|
12819
|
-
}
|
|
12820
|
-
updateParagraphTabs(tabIndex, paragraphIndex) {
|
|
12821
|
-
const paragraphContentLength = this.getParagraphContent(paragraphIndex).length;
|
|
12822
|
-
const paragraphLastIndex = this.paragraphs[paragraphIndex].startIndex + paragraphContentLength;
|
|
12823
|
-
if (tabIndex === -1 ||
|
|
12824
|
-
tabIndex >= this.customComponents.tabs.length ||
|
|
12825
|
-
this.customComponents.tabs[tabIndex].instance.insertIndex > paragraphLastIndex) {
|
|
12826
|
-
return tabIndex;
|
|
12827
|
-
}
|
|
12828
|
-
const startIndex = tabIndex;
|
|
12829
|
-
while (this.customComponents.tabs[tabIndex] && this.customComponents.tabs[tabIndex].instance.insertIndex <= paragraphLastIndex) {
|
|
12830
|
-
this.customComponents.tabs[tabIndex].instance.applySize(this.tabTokens[tabIndex - startIndex].width);
|
|
12831
|
-
tabIndex++;
|
|
12832
|
-
}
|
|
12833
|
-
return tabIndex;
|
|
12834
|
-
}
|
|
12835
|
-
getSplits(model, paragraphIndex) {
|
|
12836
|
-
const paragraphContent = this.getParagraphContent(paragraphIndex);
|
|
12837
|
-
const strTokens = this.getDisplayTokens(model, paragraphContent, this.paragraphs[paragraphIndex].startIndex);
|
|
12838
|
-
if (!strTokens.length) {
|
|
12839
|
-
const defaultRowInfo = new LineInfoModel({
|
|
12840
|
-
height: (DEFAULT_FONT_SIZE * 4) / 3,
|
|
12841
|
-
width: 0,
|
|
12842
|
-
align: DEFAULT_PARAGRAPH_STYLE.alignment,
|
|
12843
|
-
indent: new IndentModel(DEFAULT_PARAGRAPH_STYLE.indentFirstLine, DEFAULT_PARAGRAPH_STYLE.indentHanging, DEFAULT_PARAGRAPH_STYLE.indentLeft, DEFAULT_PARAGRAPH_STYLE.indentRight),
|
|
12844
|
-
offsetAfter: DEFAULT_PARAGRAPH_STYLE.spaceAfter,
|
|
12845
|
-
offsetBefore: DEFAULT_PARAGRAPH_STYLE.spaceBefore,
|
|
12846
|
-
lineSpacing: DEFAULT_PARAGRAPH_STYLE.lineSpacing,
|
|
12847
|
-
isAfterPageBreak: false,
|
|
12848
|
-
isEndedByPageBreak: false,
|
|
12849
|
-
markerWidth: 0,
|
|
12850
|
-
isNumbering: false,
|
|
12851
|
-
backgroundColor: DEFAULT_PARAGRAPH_STYLE.backgroundColor
|
|
12852
|
-
});
|
|
12853
|
-
return { splits: [], rowInfos: [defaultRowInfo] };
|
|
12854
|
-
}
|
|
12716
|
+
splitParagraphByLines(paragraphIndex) {
|
|
12717
|
+
const paragraph = this.paragraphs[paragraphIndex];
|
|
12718
|
+
const { paragraphTokens, paragraphToken } = this.getParagraphTokens(paragraph);
|
|
12855
12719
|
const splits = [];
|
|
12856
12720
|
const rowInfos = [];
|
|
12857
|
-
|
|
12858
|
-
|
|
12859
|
-
|
|
12860
|
-
const
|
|
12861
|
-
|
|
12862
|
-
|
|
12863
|
-
|
|
12864
|
-
|
|
12865
|
-
|
|
12866
|
-
|
|
12867
|
-
let
|
|
12868
|
-
|
|
12869
|
-
|
|
12870
|
-
|
|
12871
|
-
const
|
|
12872
|
-
const
|
|
12873
|
-
|
|
12874
|
-
|
|
12875
|
-
|
|
12876
|
-
|
|
12877
|
-
|
|
12878
|
-
const paragraphStyle = model.paragraphs[paragraphIndex].paragraphStyle;
|
|
12879
|
-
lineInfo.backgroundColor = paragraphStyle.backgroundColor;
|
|
12880
|
-
const isLastLineOfParagraph = !wrapLimit || prevToken.isLineBreak;
|
|
12881
|
-
if (paragraphStyle.alignment === Alignment$1.justify && !isLastLineOfParagraph && wrapTokens.length > 1) {
|
|
12882
|
-
let currentLineWidth = 0;
|
|
12883
|
-
let spaceCount = wrapTokens[0].markerWidth ? 1 : 0;
|
|
12884
|
-
for (let i = 0; i < wrapTokens.length; i++) {
|
|
12885
|
-
const token = wrapTokens[i];
|
|
12886
|
-
currentLineWidth += token.width;
|
|
12887
|
-
if (token.displayValue === DisplayValue.space) {
|
|
12888
|
-
if (i === wrapTokens.length - 1) {
|
|
12889
|
-
token.displayValue = DisplayValue.trailingSpace;
|
|
12890
|
-
}
|
|
12891
|
-
else {
|
|
12892
|
-
spaceCount++;
|
|
12893
|
-
}
|
|
12894
|
-
}
|
|
12721
|
+
const style = this.model.paragraphs[paragraphIndex].paragraphStyle;
|
|
12722
|
+
const pageFormat = this.getPageFormatAtPosition(paragraph.startIndex);
|
|
12723
|
+
const defaultHeight = paragraphToken.height;
|
|
12724
|
+
const defaultAscent = paragraphToken.ascent;
|
|
12725
|
+
let index = 0;
|
|
12726
|
+
let indent = LineInfoHelper.getFirstLineIndent(this.model, paragraphIndex, this.generalProperties);
|
|
12727
|
+
do {
|
|
12728
|
+
let tokens = paragraphTokens.slice(index);
|
|
12729
|
+
const maxWidth = pageFormat.contentWidth - indent.right - indent.markerWidth;
|
|
12730
|
+
let startWidth = indent.left + indent.firstLine - indent.hanging || 0;
|
|
12731
|
+
let last = this.computeWrapIndex(tokens, startWidth, maxWidth, style.tabSettings ?? []);
|
|
12732
|
+
tokens = tokens.slice(0, last + 1);
|
|
12733
|
+
const width = pageFormat.contentWidth;
|
|
12734
|
+
const isNumbering = index === 0 && !!indent.markerWidth;
|
|
12735
|
+
const isBreak = !rowInfos.length ? false : rowInfos[rowInfos.length - 1].isEndedByPageBreak;
|
|
12736
|
+
const isLast = index + last + 1 === paragraphTokens.length;
|
|
12737
|
+
const info = LineInfoHelper.get(tokens, isBreak, isLast, style, indent, isNumbering, width, defaultHeight, defaultAscent);
|
|
12738
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
12739
|
+
if (tokens[i].isTab) {
|
|
12740
|
+
const tab = this.customComponents.tabs.find(x => x.instance.insertIndex === paragraph.startIndex + index + i);
|
|
12741
|
+
tab.instance.applySize(tokens[i].width);
|
|
12895
12742
|
}
|
|
12896
|
-
|
|
12897
|
-
|
|
12898
|
-
const availableWidth = pageFormat.contentWidth - indent - wrapTokens[0].markerWidth;
|
|
12899
|
-
const whitespaceDeficit = availableWidth - currentLineWidth;
|
|
12900
|
-
if (spaceCount > 0 && whitespaceDeficit > 0) {
|
|
12901
|
-
lineInfo.wordSpacing = whitespaceDeficit / spaceCount;
|
|
12902
|
-
lineInfo.wordSpacingWidth = whitespaceDeficit;
|
|
12743
|
+
else if (tokens[i].isTable) {
|
|
12744
|
+
info.hasTable = true;
|
|
12903
12745
|
}
|
|
12904
12746
|
}
|
|
12905
|
-
rowInfos.push(
|
|
12906
|
-
|
|
12907
|
-
|
|
12747
|
+
rowInfos.push(info);
|
|
12748
|
+
index += last + 1;
|
|
12749
|
+
if (index < paragraphTokens.length) {
|
|
12750
|
+
splits.push(index);
|
|
12751
|
+
indent = new IndentModel(null, null, indent.left, indent.right, 0);
|
|
12908
12752
|
}
|
|
12909
|
-
|
|
12910
|
-
|
|
12911
|
-
const splitIndex = splitsLength ? index + splits[splitsLength - 1] : index;
|
|
12912
|
-
splits.push(splitIndex);
|
|
12913
|
-
}
|
|
12914
|
-
this.tabTokens.push(...strTokens.filter(x => x.isTab));
|
|
12915
|
-
ParagraphHelper.applyParagraphIndentsToLines(rowInfos, paragraphIndex, model.paragraphs);
|
|
12753
|
+
} while (index < paragraphTokens.length);
|
|
12754
|
+
ParagraphHelper.applyParagraphIndentsToLines(rowInfos, paragraphIndex, this.model.paragraphs);
|
|
12916
12755
|
return { splits, rowInfos };
|
|
12917
12756
|
}
|
|
12918
|
-
|
|
12919
|
-
|
|
12920
|
-
|
|
12921
|
-
|
|
12922
|
-
|
|
12923
|
-
|
|
12924
|
-
|
|
12925
|
-
|
|
12757
|
+
getParagraphTokens(paragraphInfo) {
|
|
12758
|
+
const paragraphSymbolIndex = paragraphInfo.startIndex + paragraphInfo.content.length;
|
|
12759
|
+
const { tokens, paragraphToken } = this.getTokens(paragraphInfo.startIndex, paragraphInfo.content, paragraphSymbolIndex);
|
|
12760
|
+
return { paragraphTokens: tokens, paragraphToken };
|
|
12761
|
+
}
|
|
12762
|
+
getParagraphLineTokens(paragraphIndex, lineIndex) {
|
|
12763
|
+
const paragraph = this.paragraphs[paragraphIndex];
|
|
12764
|
+
const lineStart = lineIndex > 0 ? paragraph.nextLineIndexes[lineIndex - 1] : 0;
|
|
12765
|
+
const lineEnd = paragraph.nextLineIndexes[lineIndex] ? paragraph.nextLineIndexes[lineIndex] : paragraph.content.length;
|
|
12766
|
+
const lineContent = paragraph.content.substring(lineStart, lineEnd);
|
|
12767
|
+
const paragraphSymbolIndex = paragraph.paragraphSettings.startInsertIndex + paragraph.content.length;
|
|
12768
|
+
const { tokens } = this.getTokens(lineStart + paragraph.startIndex, lineContent, paragraphSymbolIndex);
|
|
12769
|
+
const pageFormat = this.getPageFormatAtPosition(this.paragraphs[paragraphIndex].startIndex);
|
|
12770
|
+
const paragraphStyle = this.model.paragraphs[paragraphIndex].paragraphStyle;
|
|
12771
|
+
const lineInfo = paragraph.paragraphSettings.textLinesInfo[lineIndex];
|
|
12772
|
+
const maxWidth = pageFormat.contentWidth - lineInfo.indent.right - lineInfo.indent.markerWidth;
|
|
12773
|
+
const startWidth = lineInfo.indentLeft + lineInfo.indentFirstLine - lineInfo.indent.hanging || 0;
|
|
12774
|
+
this.computeWrapIndex(tokens, startWidth, maxWidth, paragraphStyle.tabSettings ?? []); // needed to proceed a tab width correction according to the tabs complex positioning
|
|
12775
|
+
const isLast = lineIndex === paragraph.nextLineIndexes.length;
|
|
12776
|
+
LineInfoHelper.get(tokens, false, isLast, paragraphStyle, lineInfo.indent, lineInfo.isNumbering, pageFormat.contentWidth, 0, 0); // needed to proceed a space width correction according to the wordSpacing in case of justify alignment
|
|
12777
|
+
return tokens;
|
|
12926
12778
|
}
|
|
12927
|
-
|
|
12928
|
-
const lineInfo = this.getLineInfoByBreakModifier(model, startIndex + line.length);
|
|
12779
|
+
getTokens(contentIndex, content, paragraphSymbolIndex) {
|
|
12929
12780
|
const tokens = [];
|
|
12930
|
-
|
|
12931
|
-
let format = FormatStyleHelper.getFormatAtIndex(model.formats,
|
|
12932
|
-
let
|
|
12933
|
-
let
|
|
12934
|
-
|
|
12935
|
-
|
|
12936
|
-
|
|
12937
|
-
|
|
12938
|
-
|
|
12939
|
-
const
|
|
12940
|
-
const
|
|
12941
|
-
const
|
|
12942
|
-
|
|
12943
|
-
|
|
12944
|
-
|
|
12945
|
-
|
|
12946
|
-
|
|
12947
|
-
|
|
12948
|
-
|
|
12949
|
-
|
|
12950
|
-
|
|
12951
|
-
|
|
12952
|
-
|
|
12953
|
-
|
|
12954
|
-
const token = new DisplayToken({
|
|
12955
|
-
...size,
|
|
12956
|
-
displayValue,
|
|
12957
|
-
align: lineInfo.align,
|
|
12958
|
-
indentFirstLine: isFirstCharacter ? lineInfo.indent.firstLine : DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
|
|
12959
|
-
indentHanging: isFirstCharacter && !lineInfo.isNumbering ? lineInfo.indent.hanging : DEFAULT_PARAGRAPH_STYLE.indentHanging,
|
|
12960
|
-
indentLeft: lineInfo.indent.left,
|
|
12961
|
-
indentRight: lineInfo.indent.right,
|
|
12962
|
-
indentBefore: lineInfo.offsetBefore,
|
|
12963
|
-
indentAfter: lineInfo.offsetAfter,
|
|
12964
|
-
lineSpacing: lineInfo.lineSpacing,
|
|
12965
|
-
markerWidth: isFirstCharacter && lineInfo.isNumbering ? lineInfo.markerWidth : 0,
|
|
12966
|
-
isNumbering: lineInfo.isNumbering,
|
|
12967
|
-
isPageBreak: breakType === BreakTypes.Page,
|
|
12968
|
-
isLineBreak: breakType === BreakTypes.TextWrapping,
|
|
12969
|
-
isTab: false
|
|
12970
|
-
});
|
|
12971
|
-
tokens.push(token);
|
|
12972
|
-
if (charCode !== prevCharCode ||
|
|
12973
|
-
!prevFormat ||
|
|
12974
|
-
!ContentStyleHelper.areSameTextStyles(format?.textStyle, prevFormat?.textStyle)) {
|
|
12975
|
-
symbolChange = true;
|
|
12976
|
-
}
|
|
12977
|
-
else if (i === line.length - 1) {
|
|
12978
|
-
characters.push(token);
|
|
12979
|
-
symbolChange = true;
|
|
12980
|
-
}
|
|
12981
|
-
else {
|
|
12982
|
-
characters.push(token);
|
|
12983
|
-
}
|
|
12984
|
-
if (characters.length > 1 && symbolChange) {
|
|
12985
|
-
this.processCharSizes(prevChar, prevFontString, characters);
|
|
12986
|
-
characters = [token];
|
|
12987
|
-
symbolChange = false;
|
|
12988
|
-
}
|
|
12989
|
-
else if (symbolChange) {
|
|
12990
|
-
characters = [token];
|
|
12991
|
-
}
|
|
12992
|
-
prevCharCode = charCode;
|
|
12993
|
-
prevChar = char;
|
|
12994
|
-
}
|
|
12995
|
-
prevFormat = format;
|
|
12996
|
-
prevFontString = fontString;
|
|
12997
|
-
startIndex++;
|
|
12998
|
-
if (startIndex > format?.endIndex) {
|
|
12999
|
-
format = FormatStyleHelper.getFormatAtIndex(model.formats, startIndex);
|
|
13000
|
-
fontString = ContentStyleHelper.getFontStylesString(format?.textStyle);
|
|
13001
|
-
}
|
|
13002
|
-
}
|
|
13003
|
-
return tokens;
|
|
12781
|
+
const prev = { char: '', style: null, size: null };
|
|
12782
|
+
let format = FormatStyleHelper.getFormatAtIndex(this.model.formats, contentIndex);
|
|
12783
|
+
let fontString = ContentStyleHelper.getFontStylesString(format.textStyle);
|
|
12784
|
+
for (let i = 0; i < content.length; i++) {
|
|
12785
|
+
if (content[i] !== prev.char || !prev.style || !ContentStyleHelper.areSameTextStyles(format.textStyle, prev.style)) {
|
|
12786
|
+
prev.size = FontMetrics.measureCharSize(content[i], fontString);
|
|
12787
|
+
prev.char = content[i];
|
|
12788
|
+
prev.style = format.textStyle;
|
|
12789
|
+
}
|
|
12790
|
+
const customComponent = this.getOrGenerateComponent(contentIndex, content[i]);
|
|
12791
|
+
const breakType = BreakHelper.getBreakType(this.model.breaks, content[i], contentIndex);
|
|
12792
|
+
const token = customComponent && !breakType
|
|
12793
|
+
? DisplayTokenHelper.getComponentToken(customComponent, prev.size)
|
|
12794
|
+
: DisplayTokenHelper.getSymbolToken(content.charCodeAt(i), prev.size, breakType);
|
|
12795
|
+
contentIndex++;
|
|
12796
|
+
if (contentIndex > format.endIndex) {
|
|
12797
|
+
format = FormatStyleHelper.getFormatAtIndex(this.model.formats, contentIndex);
|
|
12798
|
+
fontString = ContentStyleHelper.getFontStylesString(format.textStyle);
|
|
12799
|
+
}
|
|
12800
|
+
tokens.push(token);
|
|
12801
|
+
}
|
|
12802
|
+
const paragraphFormat = FormatStyleHelper.getFormatAtIndex(this.model.formats, paragraphSymbolIndex);
|
|
12803
|
+
const paragraphToken = DisplayTokenHelper.getParagraphToken(paragraphFormat.textStyle);
|
|
12804
|
+
return tokens.length ? { tokens, paragraphToken } : { tokens: [paragraphToken], paragraphToken };
|
|
13004
12805
|
}
|
|
13005
12806
|
getOrGenerateComponent(charIndex, char) {
|
|
13006
12807
|
if (!this.customContentService.isSpecialMarker(char)) {
|
|
@@ -13016,12 +12817,6 @@ class DisplayData extends EventEmitting {
|
|
|
13016
12817
|
const pageFormat = this.getPageFormatAtPosition(charIndex);
|
|
13017
12818
|
return this.customContentService.generateComponent(this.model, this.customComponents, this.sessionId, this.generalProperties, pageFormat.contentWidth, charIndex);
|
|
13018
12819
|
}
|
|
13019
|
-
processCharSizes(prevChar, prevFontString, characters) {
|
|
13020
|
-
const newSize = FontMetrics.measureCharSize(prevChar, prevFontString);
|
|
13021
|
-
for (let item of characters) {
|
|
13022
|
-
Object.assign(item, newSize);
|
|
13023
|
-
}
|
|
13024
|
-
}
|
|
13025
12820
|
getPageFormatParagraphs(pageFormatIndex) {
|
|
13026
12821
|
if (pageFormatIndex === this.pagesFormat.length - 1) {
|
|
13027
12822
|
return this.paragraphs.filter(x => x.startIndex >= this.pagesFormat[pageFormatIndex].pageFormatModel.insertIndex);
|
|
@@ -13052,303 +12847,65 @@ class DisplayData extends EventEmitting {
|
|
|
13052
12847
|
}
|
|
13053
12848
|
return -1;
|
|
13054
12849
|
}
|
|
13055
|
-
|
|
13056
|
-
|
|
13057
|
-
|
|
13058
|
-
|
|
13059
|
-
}
|
|
13060
|
-
|
|
13061
|
-
|
|
13062
|
-
|
|
13063
|
-
|
|
13064
|
-
let prevCharCode = null;
|
|
13065
|
-
let prevFontString = null;
|
|
13066
|
-
let prevChar = null;
|
|
13067
|
-
let fontString = ContentStyleHelper.getFontStylesString(format?.textStyle);
|
|
13068
|
-
let symbolChange = false;
|
|
13069
|
-
for (let i = 0; i < line.length; i++) {
|
|
13070
|
-
const char = line[i];
|
|
13071
|
-
const size = FontMetrics.measureCharSize(char, fontString);
|
|
13072
|
-
const customComponent = this.customContentService.getComponent(this.customComponents, char, startIndex);
|
|
13073
|
-
const breakType = BreakHelper.getBreakType(model, char, startIndex);
|
|
13074
|
-
if (customComponent && !breakType) {
|
|
13075
|
-
const token = this.customContentService.getTokenFromComponent(customComponent, lineInfo, DisplayValue.customContent, i === 0, size);
|
|
13076
|
-
tokens.push(token);
|
|
13077
|
-
prevCharCode = -1;
|
|
13078
|
-
prevChar = '';
|
|
13079
|
-
characters = [];
|
|
12850
|
+
// The index of a token which should be the last on the line
|
|
12851
|
+
computeWrapIndex(displayTokens, startWidth, maxWidth, tabSettings) {
|
|
12852
|
+
let width = startWidth;
|
|
12853
|
+
let lastBreakable = -1;
|
|
12854
|
+
const lastTab = { token: null, alignment: TabAlignment.Left, usedWidth: 0, tokenWidth: 0 };
|
|
12855
|
+
for (let i = 0; i < displayTokens.length; i++) {
|
|
12856
|
+
const token = displayTokens[i];
|
|
12857
|
+
if (token.breaksLine) {
|
|
12858
|
+
return i;
|
|
13080
12859
|
}
|
|
13081
|
-
|
|
13082
|
-
|
|
13083
|
-
|
|
13084
|
-
|
|
13085
|
-
|
|
13086
|
-
|
|
13087
|
-
|
|
13088
|
-
align: lineInfo.align,
|
|
13089
|
-
indentFirstLine: isFirstCharacter ? lineInfo.indent.firstLine : DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
|
|
13090
|
-
indentHanging: isFirstCharacter && !lineInfo.isNumbering ? lineInfo.indent.hanging : DEFAULT_PARAGRAPH_STYLE.indentHanging,
|
|
13091
|
-
indentLeft: lineInfo.indent.left,
|
|
13092
|
-
indentRight: lineInfo.indent.right,
|
|
13093
|
-
indentBefore: lineInfo.offsetBefore,
|
|
13094
|
-
indentAfter: lineInfo.offsetAfter,
|
|
13095
|
-
lineSpacing: lineInfo.lineSpacing,
|
|
13096
|
-
markerWidth: isFirstCharacter && lineInfo.isNumbering ? lineInfo.markerWidth : 0,
|
|
13097
|
-
isPageBreak: breakType === BreakTypes.Page,
|
|
13098
|
-
isLineBreak: breakType === BreakTypes.TextWrapping,
|
|
13099
|
-
isTab: false,
|
|
13100
|
-
isNumbering: lineInfo.isNumbering
|
|
13101
|
-
});
|
|
13102
|
-
tokens.push(token);
|
|
13103
|
-
if (charCode !== prevCharCode ||
|
|
13104
|
-
!prevFormat ||
|
|
13105
|
-
!ContentStyleHelper.areSameTextStyles(format?.textStyle, prevFormat?.textStyle)) {
|
|
13106
|
-
symbolChange = true;
|
|
12860
|
+
if (token.isTable) {
|
|
12861
|
+
return i > 0 ? i - 1 : 0;
|
|
12862
|
+
}
|
|
12863
|
+
width += this.adjustLastTab(token, width, lastTab, tabSettings);
|
|
12864
|
+
if (width > maxWidth && !token.isParagraph) {
|
|
12865
|
+
if (i > 0) {
|
|
12866
|
+
i--;
|
|
13107
12867
|
}
|
|
13108
|
-
|
|
13109
|
-
|
|
13110
|
-
symbolChange = true;
|
|
12868
|
+
while (i + 1 < displayTokens.length && displayTokens[i + 1].isWhiteSpace) {
|
|
12869
|
+
i++;
|
|
13111
12870
|
}
|
|
13112
|
-
|
|
13113
|
-
|
|
12871
|
+
if (displayTokens[i].isTab) {
|
|
12872
|
+
return i > 0 ? i - 1 : 0;
|
|
13114
12873
|
}
|
|
13115
|
-
|
|
13116
|
-
|
|
13117
|
-
|
|
13118
|
-
symbolChange = false;
|
|
12874
|
+
const breakable = displayTokens[i].breakable && !displayTokens[i].isTab;
|
|
12875
|
+
if (i + 1 === displayTokens.length || breakable || displayTokens[i + 1].breakable || lastBreakable === -1) {
|
|
12876
|
+
return i;
|
|
13119
12877
|
}
|
|
13120
|
-
|
|
13121
|
-
|
|
12878
|
+
if (displayTokens[lastBreakable].isTab) {
|
|
12879
|
+
return lastBreakable > 0 ? lastBreakable - 1 : i;
|
|
13122
12880
|
}
|
|
13123
|
-
|
|
13124
|
-
prevChar = char;
|
|
12881
|
+
return lastBreakable;
|
|
13125
12882
|
}
|
|
13126
|
-
|
|
13127
|
-
|
|
13128
|
-
startIndex++;
|
|
13129
|
-
if (startIndex > format?.endIndex) {
|
|
13130
|
-
format = FormatStyleHelper.getFormatAtIndex(model.formats, startIndex);
|
|
13131
|
-
fontString = ContentStyleHelper.getFontStylesString(format?.textStyle);
|
|
12883
|
+
if (token.breakable) {
|
|
12884
|
+
lastBreakable = i;
|
|
13132
12885
|
}
|
|
13133
12886
|
}
|
|
13134
|
-
return
|
|
12887
|
+
return displayTokens.length - 1;
|
|
13135
12888
|
}
|
|
13136
|
-
|
|
13137
|
-
|
|
13138
|
-
|
|
13139
|
-
|
|
13140
|
-
|
|
13141
|
-
|
|
13142
|
-
|
|
13143
|
-
|
|
12889
|
+
adjustLastTab(token, position, tab, tabSettings) {
|
|
12890
|
+
if (token.isTab) {
|
|
12891
|
+
tab.token = token;
|
|
12892
|
+
const setting = tabSettings.find(x => x.position > position);
|
|
12893
|
+
const defaultTabWidth = this.generalProperties.defaultTabWidth;
|
|
12894
|
+
tab.token.width = setting ? setting.position - position : defaultTabWidth - (position % defaultTabWidth);
|
|
12895
|
+
tab.alignment = setting?.alignment ?? TabAlignment.Left;
|
|
12896
|
+
return token.width;
|
|
13144
12897
|
}
|
|
13145
|
-
else if (
|
|
13146
|
-
|
|
13147
|
-
|
|
13148
|
-
|
|
13149
|
-
sameNumberingIndex++;
|
|
13150
|
-
}
|
|
12898
|
+
else if (tab.alignment === TabAlignment.Center && tab.token.width > 0) {
|
|
12899
|
+
const width = tab.token.width > token.width / 2 ? token.width / 2 : token.width - tab.token.width;
|
|
12900
|
+
tab.token.width -= tab.token.width > width ? width : tab.token.width;
|
|
12901
|
+
return width;
|
|
13151
12902
|
}
|
|
13152
|
-
|
|
13153
|
-
|
|
13154
|
-
|
|
13155
|
-
|
|
13156
|
-
return this.getEmptyLineTokens(model, startIndex, lineInfo);
|
|
13157
|
-
}
|
|
13158
|
-
getEmptyLineTokens(model, startIndex, lineInfo) {
|
|
13159
|
-
const storedFormat = FormatStyleHelper.getFormatAtIndex(model.formats, startIndex);
|
|
13160
|
-
if (!storedFormat) {
|
|
13161
|
-
return [];
|
|
13162
|
-
}
|
|
13163
|
-
const size = FontMetrics.measureCharSize('EMPTY_LINE', ContentStyleHelper.getFontStylesString(storedFormat.textStyle));
|
|
13164
|
-
size.width = 3;
|
|
13165
|
-
return [
|
|
13166
|
-
new DisplayToken({
|
|
13167
|
-
...size,
|
|
13168
|
-
displayValue: DisplayValue.emptyLine,
|
|
13169
|
-
align: lineInfo.align,
|
|
13170
|
-
indentFirstLine: lineInfo.indent.firstLine,
|
|
13171
|
-
indentHanging: lineInfo.isNumbering ? 0 : lineInfo.indent.hanging,
|
|
13172
|
-
indentLeft: lineInfo.indent.left,
|
|
13173
|
-
indentRight: lineInfo.indent.right,
|
|
13174
|
-
indentBefore: lineInfo.offsetBefore,
|
|
13175
|
-
indentAfter: lineInfo.offsetAfter,
|
|
13176
|
-
markerWidth: lineInfo.markerWidth,
|
|
13177
|
-
isNumbering: lineInfo.isNumbering,
|
|
13178
|
-
isPageBreak: false,
|
|
13179
|
-
isLineBreak: false,
|
|
13180
|
-
isTab: false,
|
|
13181
|
-
lineSpacing: lineInfo.lineSpacing
|
|
13182
|
-
})
|
|
13183
|
-
];
|
|
13184
|
-
}
|
|
13185
|
-
getLineInfoByBreakModifier(model, index) {
|
|
13186
|
-
const paragraph = ParagraphStyleHelper.getParagraphAtIndex(model.paragraphs, index);
|
|
13187
|
-
if (!paragraph) {
|
|
13188
|
-
return new LineInfoModel({
|
|
13189
|
-
align: DEFAULT_PARAGRAPH_STYLE.alignment,
|
|
13190
|
-
indent: new IndentModel(DEFAULT_PARAGRAPH_STYLE.indentFirstLine, DEFAULT_PARAGRAPH_STYLE.indentHanging, DEFAULT_PARAGRAPH_STYLE.indentLeft, DEFAULT_PARAGRAPH_STYLE.indentRight),
|
|
13191
|
-
offsetBefore: DEFAULT_PARAGRAPH_STYLE.spaceBefore,
|
|
13192
|
-
offsetAfter: DEFAULT_PARAGRAPH_STYLE.spaceAfter,
|
|
13193
|
-
lineSpacing: DEFAULT_PARAGRAPH_STYLE.lineSpacing
|
|
13194
|
-
});
|
|
13195
|
-
}
|
|
13196
|
-
const { indent, markerWidth } = this.getParagraphIndentLeft(model, paragraph);
|
|
13197
|
-
return this.getLineInfoModel(paragraph, indent, markerWidth);
|
|
13198
|
-
}
|
|
13199
|
-
getParagraphIndentLeft(model, paragraph) {
|
|
13200
|
-
const numberingId = paragraph.paragraphStyle.numberingId;
|
|
13201
|
-
if (numberingId === null) {
|
|
13202
|
-
return {
|
|
13203
|
-
indent: new IndentModel(paragraph.paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine, paragraph.paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging, paragraph.paragraphStyle.indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight),
|
|
13204
|
-
markerWidth: 0
|
|
13205
|
-
};
|
|
13206
|
-
}
|
|
13207
|
-
const level = paragraph.paragraphStyle.numberingLevel;
|
|
13208
|
-
const paragraphIndex = model.paragraphs.indexOf(paragraph);
|
|
13209
|
-
const levelModel = NumberingHelper.find(this.generalProperties.numberings, numberingId, level);
|
|
13210
|
-
const paragraphFormat = FormatStyleHelper.getFormatAtIndex(model.formats, paragraph.insertIndex);
|
|
13211
|
-
const markerTextStyle = ContentStyleHelper.combineTextStyles(levelModel.markerStyle, paragraphFormat.textStyle);
|
|
13212
|
-
const paragraphSettings = this.getParagraphSettings(paragraphIndex);
|
|
13213
|
-
let markerWidth = paragraphSettings?.numberingData?.width;
|
|
13214
|
-
const marker = NumberingHelper.getMarker(levelModel, numberingId, model.paragraphs, paragraphIndex, this.generalProperties.numberingInfo);
|
|
13215
|
-
const markerSizes = NumberingHelper.getMarkerSizes(marker, markerTextStyle);
|
|
13216
|
-
markerWidth = markerSizes.width;
|
|
13217
|
-
let indentHanging = levelModel.indentHanging;
|
|
13218
|
-
let indentFirstLine = DEFAULT_PARAGRAPH_STYLE.indentFirstLine;
|
|
13219
|
-
if (paragraph.paragraphStyle.indentFirstLine !== null || paragraph.paragraphStyle.indentHanging !== null) {
|
|
13220
|
-
if (paragraph.paragraphStyle.indentFirstLine !== null) {
|
|
13221
|
-
indentFirstLine = paragraph.paragraphStyle.indentFirstLine;
|
|
13222
|
-
indentHanging = null;
|
|
13223
|
-
}
|
|
13224
|
-
else {
|
|
13225
|
-
indentHanging =
|
|
13226
|
-
paragraph.paragraphStyle.indentHanging !== null ? paragraph.paragraphStyle.indentHanging : levelModel.indentHanging;
|
|
13227
|
-
}
|
|
12903
|
+
else if (tab.alignment === TabAlignment.Right && tab.token.width > 0) {
|
|
12904
|
+
const width = tab.token.width > token.width ? token.width : tab.token.width;
|
|
12905
|
+
tab.token.width -= tab.token.width > width ? width : tab.token.width;
|
|
12906
|
+
return token.width - width;
|
|
13228
12907
|
}
|
|
13229
|
-
|
|
13230
|
-
return { indent, markerWidth: markerWidth + markerWidth / marker.length };
|
|
13231
|
-
}
|
|
13232
|
-
getLineInfoFromTextLine(index) {
|
|
13233
|
-
const paragraph = ParagraphStyleHelper.getParagraphAtIndex(this.model.paragraphs, index);
|
|
13234
|
-
const indentLeft = this.getIndentLeftFromTextLine(index);
|
|
13235
|
-
const indent = new IndentModel(paragraph.paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine, paragraph.paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging, indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight);
|
|
13236
|
-
return this.getLineInfoModel(paragraph, indent, 0);
|
|
13237
|
-
}
|
|
13238
|
-
getLineInfoModel(paragraph, indent, markerWidth) {
|
|
13239
|
-
return new LineInfoModel({
|
|
13240
|
-
align: paragraph.paragraphStyle.alignment ?? DEFAULT_PARAGRAPH_STYLE.alignment,
|
|
13241
|
-
indent,
|
|
13242
|
-
offsetBefore: DEFAULT_PARAGRAPH_STYLE.spaceBefore,
|
|
13243
|
-
offsetAfter: DEFAULT_PARAGRAPH_STYLE.spaceAfter,
|
|
13244
|
-
lineSpacing: paragraph.paragraphStyle.lineSpacing ?? DEFAULT_PARAGRAPH_STYLE.lineSpacing,
|
|
13245
|
-
isNumbering: !!markerWidth,
|
|
13246
|
-
markerWidth
|
|
13247
|
-
});
|
|
13248
|
-
}
|
|
13249
|
-
getIndentLeftFromTextLine(insertIndex) {
|
|
13250
|
-
let startIndex = 0;
|
|
13251
|
-
let endIndex = this.paragraphs.length - 1;
|
|
13252
|
-
while (startIndex <= endIndex) {
|
|
13253
|
-
const middleIndex = Math.round((startIndex + endIndex) / 2);
|
|
13254
|
-
const paragraphInfo = this.paragraphs[middleIndex];
|
|
13255
|
-
if (paragraphInfo.startIndex > insertIndex) {
|
|
13256
|
-
startIndex = middleIndex + 1;
|
|
13257
|
-
}
|
|
13258
|
-
else {
|
|
13259
|
-
endIndex = middleIndex - 1;
|
|
13260
|
-
}
|
|
13261
|
-
}
|
|
13262
|
-
const textLinesInfo = this.paragraphs[startIndex]?.paragraphSettings.textLinesInfo;
|
|
13263
|
-
return textLinesInfo ? Math.max(...textLinesInfo.map(x => x.indentLeft)) : null;
|
|
13264
|
-
}
|
|
13265
|
-
computeWrapSplit(tokens, wrapLimit) {
|
|
13266
|
-
if (!tokens.length || tokens.length <= wrapLimit) {
|
|
13267
|
-
return null;
|
|
13268
|
-
}
|
|
13269
|
-
// If there is a space or tab at this split position, then making
|
|
13270
|
-
// a split is simple.
|
|
13271
|
-
if (wrapLimit === 0 ||
|
|
13272
|
-
tokens[wrapLimit].displayValue === DisplayValue.customContent ||
|
|
13273
|
-
(this.isWhiteSpace(tokens[wrapLimit - 1]) && this.isWhiteSpace(tokens[wrapLimit]))) {
|
|
13274
|
-
return wrapLimit;
|
|
13275
|
-
}
|
|
13276
|
-
return this.calculateSplit(wrapLimit, tokens);
|
|
13277
|
-
}
|
|
13278
|
-
calculateSplit(index, tokens) {
|
|
13279
|
-
for (let i = index; i >= 0; i--) {
|
|
13280
|
-
if (this.isWhiteSpace(tokens[i]) || tokens[i].displayValue === DisplayValue.customContent) {
|
|
13281
|
-
return i + 1;
|
|
13282
|
-
}
|
|
13283
|
-
}
|
|
13284
|
-
return index;
|
|
13285
|
-
}
|
|
13286
|
-
isWhiteSpace(token) {
|
|
13287
|
-
return [DisplayValue.space, DisplayValue.emptyLine].includes(token.displayValue);
|
|
13288
|
-
}
|
|
13289
|
-
/**
|
|
13290
|
-
* Computes wrap index based on max row width
|
|
13291
|
-
*/
|
|
13292
|
-
computeWrapIndex(displayTokens, contentWidth, defaultTabWidth, tabSettings) {
|
|
13293
|
-
if (!displayTokens[0]) {
|
|
13294
|
-
return 0;
|
|
13295
|
-
}
|
|
13296
|
-
if (displayTokens[0].isTable || (displayTokens[0].breaksLine && displayTokens.length === 1)) {
|
|
13297
|
-
return 1;
|
|
13298
|
-
}
|
|
13299
|
-
const maxRowWidth = contentWidth - displayTokens[0].indentRight - displayTokens[0].markerWidth;
|
|
13300
|
-
let sum = displayTokens[0].indentLeft + displayTokens[0].indentFirstLine - displayTokens[0].indentHanging || 0;
|
|
13301
|
-
let prevTabIndex = null;
|
|
13302
|
-
let tabCenter = null;
|
|
13303
|
-
let prevTabAlignment = TabAlignment.Left;
|
|
13304
|
-
for (let i = 0; i < displayTokens.length; i++) {
|
|
13305
|
-
const token = displayTokens[i];
|
|
13306
|
-
const prevToken = i > 0 ? displayTokens[i - 1] : null;
|
|
13307
|
-
if (token.isTab) {
|
|
13308
|
-
const tabs = tabSettings ?? [];
|
|
13309
|
-
const nextSettingIndex = tabs.findIndex(x => x.position > sum);
|
|
13310
|
-
const tokenWidth = TabHelper.calculateTabWidth(sum, defaultTabWidth, tabSettings);
|
|
13311
|
-
if (nextSettingIndex >= 0 && tabs[nextSettingIndex].alignment === TabAlignment.Center) {
|
|
13312
|
-
prevTabAlignment = TabAlignment.Center;
|
|
13313
|
-
tabCenter = { stringWidth: 0, tokenWidth };
|
|
13314
|
-
token.width = tokenWidth;
|
|
13315
|
-
}
|
|
13316
|
-
else {
|
|
13317
|
-
prevTabAlignment = nextSettingIndex >= 0 ? tabs[nextSettingIndex].alignment : TabAlignment.Left;
|
|
13318
|
-
token.width = tokenWidth;
|
|
13319
|
-
tabCenter = null;
|
|
13320
|
-
}
|
|
13321
|
-
prevTabIndex = i;
|
|
13322
|
-
}
|
|
13323
|
-
if (prevTabAlignment === TabAlignment.Center && !token.isTab && tabCenter.stringWidth < tabCenter.tokenWidth) {
|
|
13324
|
-
const tokenWidth = token.width / 2;
|
|
13325
|
-
displayTokens[prevTabIndex].width -= tokenWidth;
|
|
13326
|
-
tabCenter.stringWidth += tokenWidth;
|
|
13327
|
-
sum += tokenWidth;
|
|
13328
|
-
}
|
|
13329
|
-
else if (prevTabAlignment === TabAlignment.Right && !token.isTab && displayTokens[prevTabIndex].width !== 0) {
|
|
13330
|
-
if (displayTokens[prevTabIndex].width - token.width < 0) {
|
|
13331
|
-
sum += token.width - displayTokens[prevTabIndex].width;
|
|
13332
|
-
displayTokens[prevTabIndex].width = 0;
|
|
13333
|
-
}
|
|
13334
|
-
else {
|
|
13335
|
-
displayTokens[prevTabIndex].width -= token.width;
|
|
13336
|
-
}
|
|
13337
|
-
}
|
|
13338
|
-
else {
|
|
13339
|
-
sum += token.width;
|
|
13340
|
-
}
|
|
13341
|
-
if (sum >= maxRowWidth) {
|
|
13342
|
-
return i > 0 ? i - 1 : 0;
|
|
13343
|
-
}
|
|
13344
|
-
if (prevToken?.breaksLine || token.isTable) {
|
|
13345
|
-
return i;
|
|
13346
|
-
}
|
|
13347
|
-
if (token.isLineBreak || (i === displayTokens.length - 1 && token.isPageBreak)) {
|
|
13348
|
-
return i + 1;
|
|
13349
|
-
}
|
|
13350
|
-
}
|
|
13351
|
-
return 0;
|
|
12908
|
+
return token.width;
|
|
13352
12909
|
}
|
|
13353
12910
|
getPreviousParagraphInfo(row) {
|
|
13354
12911
|
if (!row || !this.paragraphs.length) {
|
|
@@ -14131,28 +13688,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
14131
13688
|
args: [{ selector: 'app-nod-image', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<app-nod-resizer\n *ngIf=\"isFocused\"\n class=\"resizer\"\n [isDisabled]=\"isViewOnly$ | async\"\n [size]=\"size\"\n (resizeEnd)=\"onResizeEnd($event)\" />\n", styles: [":host{position:relative;outline:none}.resizer{position:absolute;z-index:1}\n"] }]
|
|
14132
13689
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: ImageApiService }] });
|
|
14133
13690
|
|
|
14134
|
-
class
|
|
14135
|
-
|
|
14136
|
-
|
|
14137
|
-
|
|
14138
|
-
|
|
14139
|
-
|
|
13691
|
+
class ParagraphStyleHelper {
|
|
13692
|
+
static getParagraphsAtRange(paragraphs, startIndex, endIndex) {
|
|
13693
|
+
let firstModifierIndexInRange = paragraphs.findIndex(paragraph => paragraph.insertIndex >= startIndex);
|
|
13694
|
+
firstModifierIndexInRange = firstModifierIndexInRange === -1 ? paragraphs.length : firstModifierIndexInRange;
|
|
13695
|
+
let lastModifierIndexInRange = paragraphs.findIndex(x => x.insertIndex >= endIndex);
|
|
13696
|
+
lastModifierIndexInRange =
|
|
13697
|
+
startIndex === endIndex || lastModifierIndexInRange === -1 ? firstModifierIndexInRange : lastModifierIndexInRange;
|
|
13698
|
+
return paragraphs.slice(firstModifierIndexInRange, lastModifierIndexInRange + 1);
|
|
14140
13699
|
}
|
|
14141
|
-
|
|
14142
|
-
|
|
13700
|
+
static getParagraphAtIndex(paragraphs, insertIndex) {
|
|
13701
|
+
let startIndex = 0;
|
|
13702
|
+
let endIndex = paragraphs.length - 1;
|
|
13703
|
+
while (startIndex <= endIndex) {
|
|
13704
|
+
const middleIndex = Math.round((startIndex + endIndex) / 2);
|
|
13705
|
+
const paragraph = paragraphs[middleIndex];
|
|
13706
|
+
if (paragraph.insertIndex < insertIndex) {
|
|
13707
|
+
startIndex = middleIndex + 1;
|
|
13708
|
+
}
|
|
13709
|
+
else {
|
|
13710
|
+
endIndex = middleIndex - 1;
|
|
13711
|
+
}
|
|
13712
|
+
}
|
|
13713
|
+
return paragraphs[startIndex];
|
|
14143
13714
|
}
|
|
14144
|
-
|
|
14145
|
-
this.
|
|
13715
|
+
static isEndOfParagraph(paragraphs, endIndex) {
|
|
13716
|
+
const paragraph = this.getParagraphAtIndex(paragraphs, endIndex);
|
|
13717
|
+
let paragraphIndex = paragraphs.findIndex(x => x === paragraph);
|
|
13718
|
+
const endOfParagraphIsParagraph = paragraph && endIndex === paragraph.insertIndex && paragraphs.length - 1 > paragraphIndex;
|
|
13719
|
+
if (endOfParagraphIsParagraph) {
|
|
13720
|
+
paragraphIndex += 1;
|
|
13721
|
+
}
|
|
13722
|
+
return paragraphs[paragraphIndex].insertIndex === endIndex + 1;
|
|
14146
13723
|
}
|
|
14147
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTabComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
14148
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderTabComponent, isStandalone: false, selector: "app-nod-tab", host: { properties: { "style.width.px": "width()" } }, usesInheritance: true, ngImport: i0, template: " \n", styles: [":host{position:relative;outline:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
14149
13724
|
}
|
|
14150
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTabComponent, decorators: [{
|
|
14151
|
-
type: Component,
|
|
14152
|
-
args: [{ selector: 'app-nod-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, host: {
|
|
14153
|
-
'[style.width.px]': 'width()'
|
|
14154
|
-
}, template: " \n", styles: [":host{position:relative;outline:none}\n"] }]
|
|
14155
|
-
}] });
|
|
14156
13725
|
|
|
14157
13726
|
const CHARS = [
|
|
14158
13727
|
// eslint-disable-next-line prettier/prettier
|
|
@@ -14357,7 +13926,6 @@ class EditSession {
|
|
|
14357
13926
|
const endParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, endIndex).row;
|
|
14358
13927
|
OperationsHelper.applyTextStyle(this.model, startIndex, endIndex, textStyle);
|
|
14359
13928
|
this.provideTextStyle(startIndex, endIndex);
|
|
14360
|
-
this.displayData.resetAllNumberingInfo(startParagraph);
|
|
14361
13929
|
this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
|
|
14362
13930
|
this.setTextStyle(textStyle);
|
|
14363
13931
|
}
|
|
@@ -14370,36 +13938,25 @@ class EditSession {
|
|
|
14370
13938
|
startParagraph = this.displayData.paragraphs.findIndex(x => x.paragraphSettings.numberingData.numberingId === numberingId);
|
|
14371
13939
|
endParagraph = this.displayData.paragraphs.findLastIndex(x => x.paragraphSettings.numberingData.numberingId === numberingId);
|
|
14372
13940
|
}
|
|
14373
|
-
this.displayData.resetAllNumberingInfo(startParagraph);
|
|
14374
13941
|
this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
|
|
14375
13942
|
this.applyToolbarStyles();
|
|
14376
13943
|
}
|
|
14377
13944
|
rerender(insertIndex) {
|
|
14378
13945
|
const paragraphIndex = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, insertIndex).row;
|
|
14379
|
-
this.displayData.resetAllNumberingInfo(paragraphIndex);
|
|
14380
13946
|
this.displayData.updateNextLineIndexes(paragraphIndex, paragraphIndex);
|
|
14381
13947
|
}
|
|
14382
13948
|
addNumbering(levels, startIndex, endIndex, numberingId) {
|
|
14383
13949
|
const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
|
|
14384
13950
|
const endParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, endIndex).row;
|
|
14385
13951
|
OperationsHelper.addNumbering(this.model, this.generalProperties.numberings, startIndex, endIndex, levels, numberingId);
|
|
14386
|
-
this.generalProperties.numberingInfo = {};
|
|
14387
13952
|
this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
|
|
14388
|
-
for (let i = startParagraph; i <= endParagraph; i++) {
|
|
14389
|
-
if (this.displayData.getParagraphSettings(i).numberingData.numberingId !== null) {
|
|
14390
|
-
this.displayData.updateNumberingsDataOnChange(endParagraph + 1);
|
|
14391
|
-
break;
|
|
14392
|
-
}
|
|
14393
|
-
}
|
|
14394
13953
|
this.applyToolbarStyles();
|
|
14395
13954
|
}
|
|
14396
13955
|
removeNumberings(startIndex, endIndex) {
|
|
14397
13956
|
const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
|
|
14398
13957
|
const endParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, endIndex).row;
|
|
14399
|
-
this.displayData.resetAllNumberingInfo(startParagraph);
|
|
14400
13958
|
OperationsHelper.removeNumberings(this.model, this.generalProperties.numberings, startIndex, endIndex);
|
|
14401
13959
|
this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
|
|
14402
|
-
this.displayData.updateNumberingsDataOnChange(endParagraph);
|
|
14403
13960
|
this.applyToolbarStyles();
|
|
14404
13961
|
}
|
|
14405
13962
|
restoreNumberings(paragraphs, numberings) {
|
|
@@ -14407,15 +13964,8 @@ class EditSession {
|
|
|
14407
13964
|
const endIndex = paragraphs[paragraphs.length - 1].insertIndex;
|
|
14408
13965
|
const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
|
|
14409
13966
|
const endPosition = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex);
|
|
14410
|
-
this.displayData.resetAllNumberingInfo(startParagraph);
|
|
14411
13967
|
OperationsHelper.restoreNumberings(this.model, this.generalProperties.numberings, paragraphs, numberings);
|
|
14412
13968
|
this.displayData.updateNextLineIndexes(startParagraph, endPosition.row);
|
|
14413
|
-
for (const paragraph of paragraphs) {
|
|
14414
|
-
if (paragraph.paragraphStyle.numberingId !== null) {
|
|
14415
|
-
this.displayData.updateNumberingsDataOnChange(endPosition.row + 1);
|
|
14416
|
-
break;
|
|
14417
|
-
}
|
|
14418
|
-
}
|
|
14419
13969
|
this.selection.placeCursor(endPosition);
|
|
14420
13970
|
this.applyToolbarStyles();
|
|
14421
13971
|
}
|
|
@@ -14424,7 +13974,6 @@ class EditSession {
|
|
|
14424
13974
|
imageComponentRef.instance.resize({ width: applyImage.width, height: applyImage.height });
|
|
14425
13975
|
OperationsHelper.applyImageStyle(this.model, applyImage);
|
|
14426
13976
|
const start = this.displayData.indexToPosition(applyImage.insertIndex, 0);
|
|
14427
|
-
this.displayData.resetAllNumberingInfo(start.row);
|
|
14428
13977
|
this.displayData.updateNextLineIndexes(start.row, this.displayData.paragraphs.length - 1);
|
|
14429
13978
|
}
|
|
14430
13979
|
restoreTextStyles(formats, linkFormats) {
|
|
@@ -14434,7 +13983,6 @@ class EditSession {
|
|
|
14434
13983
|
const endPosition = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex);
|
|
14435
13984
|
OperationsHelper.restoreTextStyles(this.model, formats, linkFormats);
|
|
14436
13985
|
this.provideTextStyle(startIndex, endIndex);
|
|
14437
|
-
this.displayData.resetAllNumberingInfo(startParagraph);
|
|
14438
13986
|
this.displayData.updateNextLineIndexes(startParagraph, endPosition.row);
|
|
14439
13987
|
this.selection.placeCursor(endPosition);
|
|
14440
13988
|
this.applyToolbarStyles();
|
|
@@ -14445,7 +13993,6 @@ class EditSession {
|
|
|
14445
13993
|
const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
|
|
14446
13994
|
const endPosition = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex);
|
|
14447
13995
|
OperationsHelper.restoreParagraphStyles(this.model, paragraphs);
|
|
14448
|
-
this.displayData.resetAllNumberingInfo(0);
|
|
14449
13996
|
this.displayData.updateNextLineIndexes(startParagraph, endPosition.row);
|
|
14450
13997
|
this.selection.placeCursor(endPosition);
|
|
14451
13998
|
this.applyToolbarStyles();
|
|
@@ -14456,7 +14003,6 @@ class EditSession {
|
|
|
14456
14003
|
const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
|
|
14457
14004
|
const endParagraph = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex).row;
|
|
14458
14005
|
OperationsHelper.applyParagraphs(this.model, paragraphs);
|
|
14459
|
-
this.displayData.resetAllNumberingInfo(startParagraph);
|
|
14460
14006
|
this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
|
|
14461
14007
|
this.applyToolbarStyles();
|
|
14462
14008
|
}
|
|
@@ -14476,11 +14022,7 @@ class EditSession {
|
|
|
14476
14022
|
CustomComponentHelper.applyRemovingComponents(this.customComponents.tabs, partIndexes.startIndex, partIndexes.endIndex);
|
|
14477
14023
|
OperationsHelper.delete(this.model, partIndexes.startIndex, partIndexes.endIndex - partIndexes.startIndex + 1);
|
|
14478
14024
|
this.selection.placeCursor(range.start);
|
|
14479
|
-
this.displayData.resetAllNumberingInfo(range.start.row);
|
|
14480
14025
|
this.displayData.updateNextLineIndexes(range.start.row, range.start.row);
|
|
14481
|
-
if (range.end.row - range.start.row && this.type !== 'cell') {
|
|
14482
|
-
this.displayData.updateNumberingsDataOnChange(range.start.row + 1);
|
|
14483
|
-
}
|
|
14484
14026
|
this.applyToolbarStyles();
|
|
14485
14027
|
}
|
|
14486
14028
|
replace(model) {
|
|
@@ -14542,11 +14084,7 @@ class EditSession {
|
|
|
14542
14084
|
OperationsHelper.insertText(this.model, text, insertIndex);
|
|
14543
14085
|
}
|
|
14544
14086
|
const endPosition = this.displayData.insertText(position, text);
|
|
14545
|
-
this.displayData.resetAllNumberingInfo(position.row);
|
|
14546
14087
|
this.displayData.updateNextLineIndexes(position.row, endPosition.row);
|
|
14547
|
-
if (endPosition.row - position.row && this.type !== 'cell') {
|
|
14548
|
-
this.displayData.updateNumberingsDataOnChange(endPosition.row + 1);
|
|
14549
|
-
}
|
|
14550
14088
|
this.selection.placeCursor(endPosition);
|
|
14551
14089
|
return endPosition;
|
|
14552
14090
|
}
|
|
@@ -14569,7 +14107,6 @@ class EditSession {
|
|
|
14569
14107
|
const model = this.model.elements.find(x => x.insertIndex === insertIndex);
|
|
14570
14108
|
const type = this.customContentService.findComponentType(model.type);
|
|
14571
14109
|
this.addComponent(this.customComponents.customElements, model, type);
|
|
14572
|
-
this.displayData.resetAllNumberingInfo(position.row);
|
|
14573
14110
|
this.displayData.updateNextLineIndexes(position.row, endPosition.row);
|
|
14574
14111
|
this.selection.placeCursor(endPosition);
|
|
14575
14112
|
return endPosition;
|
|
@@ -14577,15 +14114,11 @@ class EditSession {
|
|
|
14577
14114
|
insertBreak(position, breakType) {
|
|
14578
14115
|
const insertIndex = ContentHelper.paragraphPositionToDocumentIndex(this.displayData.paragraphs, position);
|
|
14579
14116
|
const isOnNewParagraph = breakType === BreakTypes.Page &&
|
|
14580
|
-
BreakHelper.getBreakType(this.model, CUSTOM_ELEMENT_MARKER, insertIndex - 1) !== BreakTypes.Page;
|
|
14117
|
+
BreakHelper.getBreakType(this.model.breaks, CUSTOM_ELEMENT_MARKER, insertIndex - 1) !== BreakTypes.Page;
|
|
14581
14118
|
const text = isOnNewParagraph ? `${NEW_LINE_MARKUP}${CUSTOM_ELEMENT_MARKER}` : CUSTOM_ELEMENT_MARKER;
|
|
14582
14119
|
OperationsHelper.insertBreak(this.model, text, insertIndex, breakType);
|
|
14583
14120
|
const endPosition = this.displayData.insertText(position, text);
|
|
14584
|
-
this.displayData.resetAllNumberingInfo(position.row);
|
|
14585
14121
|
this.displayData.updateNextLineIndexes(position.row, endPosition.row);
|
|
14586
|
-
if (isOnNewParagraph && endPosition.row - position.row) {
|
|
14587
|
-
this.displayData.updateNumberingsDataOnChange(endPosition.row);
|
|
14588
|
-
}
|
|
14589
14122
|
const cursorPosition = this.displayData.getPositionAfterBreak(endPosition, breakType);
|
|
14590
14123
|
this.selection.placeCursor(cursorPosition);
|
|
14591
14124
|
return endPosition;
|
|
@@ -14596,7 +14129,6 @@ class EditSession {
|
|
|
14596
14129
|
const model = this.model.tabs.find(x => x.insertIndex === insertIndex);
|
|
14597
14130
|
this.addComponent(this.customComponents.tabs, model, NoderTabComponent);
|
|
14598
14131
|
const endPosition = this.displayData.insertText(position, CUSTOM_ELEMENT_MARKER);
|
|
14599
|
-
this.displayData.resetAllNumberingInfo(position.row);
|
|
14600
14132
|
this.displayData.updateNextLineIndexes(position.row, position.row);
|
|
14601
14133
|
this.selection.placeCursor(endPosition);
|
|
14602
14134
|
return endPosition;
|
|
@@ -14607,7 +14139,6 @@ class EditSession {
|
|
|
14607
14139
|
const model = this.model.images.find(x => x.insertIndex === insertIndex);
|
|
14608
14140
|
this.addComponent(this.customComponents.images, model, NoderImageComponent);
|
|
14609
14141
|
const endPosition = this.displayData.insertText(position, CUSTOM_ELEMENT_MARKER);
|
|
14610
|
-
this.displayData.resetAllNumberingInfo(position.row);
|
|
14611
14142
|
this.displayData.updateNextLineIndexes(position.row, position.row);
|
|
14612
14143
|
this.selection.placeCursor(endPosition);
|
|
14613
14144
|
return endPosition;
|
|
@@ -14616,7 +14147,6 @@ class EditSession {
|
|
|
14616
14147
|
const insertIndex = ContentHelper.paragraphPositionToDocumentIndex(this.displayData.paragraphs, position);
|
|
14617
14148
|
OperationsHelper.insertLink(this.model, linkData.text, linkData.link, insertIndex);
|
|
14618
14149
|
const endPosition = this.displayData.insertText(position, linkData.text);
|
|
14619
|
-
this.displayData.resetAllNumberingInfo(position.row);
|
|
14620
14150
|
this.displayData.updateNextLineIndexes(position.row, position.row);
|
|
14621
14151
|
this.selection.placeCursor(endPosition);
|
|
14622
14152
|
return endPosition;
|
|
@@ -14627,11 +14157,7 @@ class EditSession {
|
|
|
14627
14157
|
const model = this.model.tables.find(x => x.insertIndex >= tableModel.insertIndex);
|
|
14628
14158
|
this.addComponent(this.customComponents.tables, model, NoderTableComponent);
|
|
14629
14159
|
const endPosition = this.displayData.insertText(position, text);
|
|
14630
|
-
this.displayData.resetAllNumberingInfo(position.row);
|
|
14631
14160
|
this.displayData.updateNextLineIndexes(position.row, endPosition.row);
|
|
14632
|
-
if (endPosition.row - position.row) {
|
|
14633
|
-
this.displayData.updateNumberingsDataOnChange(endPosition.row);
|
|
14634
|
-
}
|
|
14635
14161
|
this.selection.placeCursor(endPosition);
|
|
14636
14162
|
return endPosition;
|
|
14637
14163
|
}
|
|
@@ -14652,11 +14178,7 @@ class EditSession {
|
|
|
14652
14178
|
CustomComponentHelper.applyRemovingComponents(this.customComponents.tabs, moveModel.sourceStartIndex, endIndex);
|
|
14653
14179
|
const restoreModel = OperationsHelper.removeMoveRange(this.model, moveModel);
|
|
14654
14180
|
this.selection.placeCursor(startPosition);
|
|
14655
|
-
this.displayData.resetAllNumberingInfo(startPosition.row);
|
|
14656
14181
|
this.displayData.updateNextLineIndexes(startPosition.row, endPosition.row);
|
|
14657
|
-
if (endPosition.row - startPosition.row && this.type !== 'cell') {
|
|
14658
|
-
this.displayData.updateNumberingsDataOnChange(startPosition.row + 1);
|
|
14659
|
-
}
|
|
14660
14182
|
this.applyToolbarStyles();
|
|
14661
14183
|
return restoreModel;
|
|
14662
14184
|
}
|
|
@@ -14669,11 +14191,7 @@ class EditSession {
|
|
|
14669
14191
|
this.restoreElementComponents(this.model.elements, moveIndex, endIndex);
|
|
14670
14192
|
const startPosition = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, moveIndex);
|
|
14671
14193
|
const endPosition = this.displayData.insertText(startPosition, restoreModel.text);
|
|
14672
|
-
this.displayData.resetAllNumberingInfo(startPosition.row);
|
|
14673
14194
|
this.displayData.updateNextLineIndexes(startPosition.row, endPosition.row);
|
|
14674
|
-
if (endPosition.row - startPosition.row && this.type !== 'cell') {
|
|
14675
|
-
this.displayData.updateNumberingsDataOnChange(endPosition.row);
|
|
14676
|
-
}
|
|
14677
14195
|
this.selection.placeCursor(endPosition);
|
|
14678
14196
|
this.applyToolbarStyles();
|
|
14679
14197
|
const newStartPosition = this.displayData.indexToPosition(moveIndex, 0);
|
|
@@ -14764,11 +14282,7 @@ class EditSession {
|
|
|
14764
14282
|
this.restoreComponents(this.model.images, this.customComponents.images, NoderImageComponent, model.insertIndex, restoreEndIndex);
|
|
14765
14283
|
this.restoreComponents(this.model.tabs, this.customComponents.tabs, NoderTabComponent, model.insertIndex, restoreEndIndex);
|
|
14766
14284
|
this.restoreElementComponents(this.model.elements, model.insertIndex, restoreEndIndex);
|
|
14767
|
-
this.displayData.resetAllNumberingInfo(paragraphPosition.row);
|
|
14768
14285
|
this.displayData.updateNextLineIndexes(paragraphPosition.row, endPoint.row);
|
|
14769
|
-
if (endPoint.row - paragraphPosition.row && this.type !== 'cell') {
|
|
14770
|
-
this.displayData.updateNumberingsDataOnChange(endPoint.row + 1);
|
|
14771
|
-
}
|
|
14772
14286
|
this.selection.placeCursor(endPoint);
|
|
14773
14287
|
this.applyToolbarStyles();
|
|
14774
14288
|
}
|
|
@@ -14801,33 +14315,28 @@ class EditSession {
|
|
|
14801
14315
|
}
|
|
14802
14316
|
insertTableRows(insertIndex, rowsCount, targetIndex, inheritIndex) {
|
|
14803
14317
|
const table = this.customComponents.tables.find(x => x.instance.insertIndex === insertIndex);
|
|
14804
|
-
this.displayData.resetNumberingInfoByTableCell(table);
|
|
14805
14318
|
OperationsHelper.insertTableRows(this.model, insertIndex, rowsCount, targetIndex, inheritIndex);
|
|
14806
14319
|
table.instance.updateTable();
|
|
14807
14320
|
}
|
|
14808
14321
|
insertTableColumns(insertIndex, columnsCount, targetIndex, inheritIndex) {
|
|
14809
14322
|
const table = this.customComponents.tables.find(x => x.instance.insertIndex === insertIndex);
|
|
14810
14323
|
const pageFormat = this.displayData.getPageFormatAtPosition(insertIndex);
|
|
14811
|
-
this.displayData.resetNumberingInfoByTableCell(table);
|
|
14812
14324
|
OperationsHelper.insertTableColumns(this.model, insertIndex, columnsCount, targetIndex, inheritIndex, pageFormat.contentWidth);
|
|
14813
14325
|
table.instance.updateTable();
|
|
14814
14326
|
}
|
|
14815
14327
|
removeTableRows(insertIndex, startIndex, endIndex) {
|
|
14816
14328
|
const table = this.customComponents.tables.find(x => x.instance.insertIndex === insertIndex);
|
|
14817
|
-
this.displayData.resetNumberingInfoByTableCell(table);
|
|
14818
14329
|
OperationsHelper.removeTableRows(this.model, insertIndex, startIndex, endIndex);
|
|
14819
14330
|
table.instance.updateTable();
|
|
14820
14331
|
}
|
|
14821
14332
|
removeTableColumns(insertIndex, startIndex, endIndex) {
|
|
14822
14333
|
const table = this.customComponents.tables.find(x => x.instance.insertIndex === insertIndex);
|
|
14823
|
-
this.displayData.resetNumberingInfoByTableCell(table);
|
|
14824
14334
|
const pageFormat = this.displayData.getPageFormatAtPosition(insertIndex);
|
|
14825
14335
|
OperationsHelper.removeTableColumns(this.model, insertIndex, startIndex, endIndex, pageFormat.contentWidth);
|
|
14826
14336
|
table.instance.updateTable();
|
|
14827
14337
|
}
|
|
14828
14338
|
resizeTableColumns(resizeTableColumns) {
|
|
14829
14339
|
const table = this.customComponents.tables.find(x => x.instance.insertIndex === resizeTableColumns.insertIndex);
|
|
14830
|
-
this.displayData.resetNumberingInfoByTableCell(table);
|
|
14831
14340
|
OperationsHelper.resizeTableColumns(this.model, resizeTableColumns);
|
|
14832
14341
|
table.instance.updateTable();
|
|
14833
14342
|
}
|
|
@@ -15079,26 +14588,16 @@ class HighlightLayer {
|
|
|
15079
14588
|
const results = [];
|
|
15080
14589
|
for (let i = 0; i < textLinesInfo.length; i++) {
|
|
15081
14590
|
const lineInfo = textLinesInfo[i].textLinesInfo;
|
|
15082
|
-
const paragraphLineIndex = textLinesInfo[i].paragraphSettings.textLinesInfo.findIndex(x => x === textLinesInfo[i].textLinesInfo);
|
|
15083
14591
|
if (i !== 0) {
|
|
15084
14592
|
top += lineInfo.firstLinePageOffset;
|
|
15085
14593
|
top += lineInfo.offsetBefore;
|
|
15086
14594
|
}
|
|
15087
|
-
|
|
15088
|
-
const
|
|
15089
|
-
? 0
|
|
15090
|
-
: textLinesInfo[i].paragraphSettings.numberingData.width + textLinesInfo[i].paragraphSettings.numberingData.paddingLeft;
|
|
15091
|
-
if (paragraphLineIndex === 0 &&
|
|
15092
|
-
lineInfo.isNumbering &&
|
|
15093
|
-
(lineInfo.indentFirstLine ||
|
|
15094
|
-
(numberingOffsetLeft - lineInfo.indentLeft > 0 && numberingOffsetLeft - lineInfo.indentLeft <= lineInfo.markerWidth))) {
|
|
15095
|
-
markerWidth = lineInfo.markerWidth;
|
|
15096
|
-
}
|
|
15097
|
-
const left = lineInfo.paddingLeft + padding + lineInfo.offsetMargin + markerWidth;
|
|
14595
|
+
const markerOffset = NumberingHelper.getOffsetCausedByMarker(textLinesInfo[i].paragraphSettings.numberingData, lineInfo);
|
|
14596
|
+
const left = lineInfo.paddingLeft + padding + lineInfo.offsetMargin + markerOffset;
|
|
15098
14597
|
let style;
|
|
15099
14598
|
if (i === 0) {
|
|
15100
14599
|
const rangeInfo = this.getRangeInfo(this.session, range);
|
|
15101
|
-
const width = lineInfo.width - rangeInfo.leftPos + left
|
|
14600
|
+
const width = lineInfo.width - rangeInfo.leftPos + left;
|
|
15102
14601
|
style = this.getMarkerStyle(lineInfo.height, width, top, rangeInfo.leftPos);
|
|
15103
14602
|
}
|
|
15104
14603
|
else if (i === textLinesInfo.length - 1) {
|
|
@@ -15107,7 +14606,7 @@ class HighlightLayer {
|
|
|
15107
14606
|
style = this.getMarkerStyle(lineInfo.height, rangeInfo.screenWidth, top, left);
|
|
15108
14607
|
}
|
|
15109
14608
|
else {
|
|
15110
|
-
let width = lineInfo.width
|
|
14609
|
+
let width = lineInfo.width;
|
|
15111
14610
|
style = this.getMarkerStyle(lineInfo.height, width, top, left);
|
|
15112
14611
|
}
|
|
15113
14612
|
const result = this.renderHighlight(style, cssClass);
|
|
@@ -15137,7 +14636,7 @@ class HighlightLayer {
|
|
|
15137
14636
|
}
|
|
15138
14637
|
const top = this.getTop(screenParentRange.start.row);
|
|
15139
14638
|
const info = this.getRangeInfo(this.session, screenParentRange);
|
|
15140
|
-
this.renderHighlight(this.getMarkerStyle(elementInfo.location.height, elementInfo.location.width, top + lineInfo.
|
|
14639
|
+
this.renderHighlight(this.getMarkerStyle(elementInfo.location.height, elementInfo.location.width, top + lineInfo.ascent - elementInfo.location.height + elementInfo.location.top, info.leftPos + elementInfo.location.left), cssClass);
|
|
15141
14640
|
}
|
|
15142
14641
|
getRangeInfo(session, range) {
|
|
15143
14642
|
const start = range.start;
|
|
@@ -15277,16 +14776,9 @@ class CursorLayer {
|
|
|
15277
14776
|
fontSize: textStyle.fontSize,
|
|
15278
14777
|
fontFamily: textStyle.fontFamily
|
|
15279
14778
|
})));
|
|
15280
|
-
const
|
|
15281
|
-
|
|
15282
|
-
|
|
15283
|
-
const offset = metricSize.descent - fontShoulders;
|
|
15284
|
-
let top = this.cursorPosition.pageY + this.cursorPosition.sizeMax.ascent - metricSize.font + offset;
|
|
15285
|
-
if (fontMetricHeight !== maxHeight && maxHeight >= this.cursorPosition.lineHeight) {
|
|
15286
|
-
top -= maxHeight - this.cursorPosition.lineHeight;
|
|
15287
|
-
}
|
|
15288
|
-
DomHelper.setStyle(this.cursor.style, 'top', `${top < 0 ? 0 : top}px`);
|
|
15289
|
-
DomHelper.setStyle(this.cursor.style, 'height', `${fontMetricHeight}px`);
|
|
14779
|
+
const top = this.cursorPosition.pageY + this.cursorPosition.ascent - metricSize.ascent;
|
|
14780
|
+
DomHelper.setStyle(this.cursor.style, 'top', `${top}px`);
|
|
14781
|
+
DomHelper.setStyle(this.cursor.style, 'height', `${metricSize.height}px`);
|
|
15290
14782
|
}
|
|
15291
14783
|
restartAnimation() {
|
|
15292
14784
|
this.removeAnimationClass();
|
|
@@ -15302,9 +14794,8 @@ class CursorLayer {
|
|
|
15302
14794
|
return;
|
|
15303
14795
|
}
|
|
15304
14796
|
DomHelper.setStyle(this.cursor.style, 'display', 'block');
|
|
15305
|
-
const currentSize = this.cursorPosition.sizeCurrent;
|
|
15306
14797
|
DomHelper.setStyle(this.cursor.style, 'left', `${this.cursorPosition.pageX}px`);
|
|
15307
|
-
DomHelper.setStyle(this.cursor.style, 'width', `${
|
|
14798
|
+
DomHelper.setStyle(this.cursor.style, 'width', `${this.cursorPosition.width}px`);
|
|
15308
14799
|
this.addTextStylesToCursor();
|
|
15309
14800
|
}
|
|
15310
14801
|
removeAnimationClass() {
|
|
@@ -15619,7 +15110,7 @@ class Renderer extends EventEmitting {
|
|
|
15619
15110
|
this.session = session;
|
|
15620
15111
|
this.layerConfig = {
|
|
15621
15112
|
width: 1,
|
|
15622
|
-
contentRange: new DistanceModel({ start: 0, end: 0 }),
|
|
15113
|
+
contentRange: new DistanceModel({ start: 0, end: 0 }), // paragraphs
|
|
15623
15114
|
maxHeight: 1,
|
|
15624
15115
|
offset: 0,
|
|
15625
15116
|
height: 1,
|
|
@@ -16376,11 +15867,11 @@ class VirtualRenderer {
|
|
|
16376
15867
|
this.scrollBar.setScrollTop(top);
|
|
16377
15868
|
this.loop.schedule({ scroll: true });
|
|
16378
15869
|
}
|
|
16379
|
-
else if (this.scrollBar.scrollTop + this.container.scrollHeight < top + position.
|
|
15870
|
+
else if (this.scrollBar.scrollTop + this.container.scrollHeight < top + position.height) {
|
|
16380
15871
|
if (offset) {
|
|
16381
15872
|
top += offset * this.container.scrollHeight;
|
|
16382
15873
|
}
|
|
16383
|
-
top += position.
|
|
15874
|
+
top += position.height - this.container.scrollHeight;
|
|
16384
15875
|
this.scrollBar.setScrollTop(top);
|
|
16385
15876
|
this.loop.schedule({ scroll: true });
|
|
16386
15877
|
}
|
|
@@ -16549,22 +16040,11 @@ class CustomContentService {
|
|
|
16549
16040
|
}
|
|
16550
16041
|
return null;
|
|
16551
16042
|
}
|
|
16552
|
-
|
|
16553
|
-
|
|
16554
|
-
|
|
16555
|
-
|
|
16556
|
-
|
|
16557
|
-
}
|
|
16558
|
-
if (textFragment.includes(TABLE_MARKER)) {
|
|
16559
|
-
return this.isFragmentContainComponents(components.tables, fragmentDistance);
|
|
16560
|
-
}
|
|
16561
|
-
return false;
|
|
16562
|
-
}
|
|
16563
|
-
getComponents(components, distance) {
|
|
16564
|
-
const images = components.images.filter(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
|
|
16565
|
-
const tables = components.tables.filter(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
|
|
16566
|
-
const tabs = components.tabs.filter(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
|
|
16567
|
-
const custom = components.customElements.filter(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
|
|
16043
|
+
getComponents(components, start, end) {
|
|
16044
|
+
const images = components.images.filter(x => x.instance.insertIndex >= start && x.instance.insertIndex <= end);
|
|
16045
|
+
const tables = components.tables.filter(x => x.instance.insertIndex >= start && x.instance.insertIndex <= end);
|
|
16046
|
+
const tabs = components.tabs.filter(x => x.instance.insertIndex >= start && x.instance.insertIndex <= end);
|
|
16047
|
+
const custom = components.customElements.filter(x => x.instance.insertIndex >= start && x.instance.insertIndex <= end);
|
|
16568
16048
|
return [...images, ...tables, ...tabs, ...custom].sort((a, b) => a.instance.insertIndex - b.instance.insertIndex);
|
|
16569
16049
|
}
|
|
16570
16050
|
getComponent(components, char, charIndex) {
|
|
@@ -16575,45 +16055,12 @@ class CustomContentService {
|
|
|
16575
16055
|
}
|
|
16576
16056
|
return this.findComponent(components.tables, charIndex);
|
|
16577
16057
|
}
|
|
16578
|
-
getTokenFromComponent(component, lineInfo, displayValue, isFirst, size) {
|
|
16579
|
-
const ascent = component.instance.ascent() ?? 0;
|
|
16580
|
-
const descent = component.instance.descent() ?? 0;
|
|
16581
|
-
return new DisplayToken({
|
|
16582
|
-
width: component.instance.width(),
|
|
16583
|
-
height: ascent + descent,
|
|
16584
|
-
baseline: 0,
|
|
16585
|
-
content: 0,
|
|
16586
|
-
font: size.font,
|
|
16587
|
-
ascent,
|
|
16588
|
-
descent,
|
|
16589
|
-
line: 0,
|
|
16590
|
-
lineSpacing: lineInfo.lineSpacing,
|
|
16591
|
-
multiplier: 0,
|
|
16592
|
-
align: lineInfo.align,
|
|
16593
|
-
indentFirstLine: isFirst ? lineInfo.indent.firstLine : DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
|
|
16594
|
-
indentHanging: isFirst && !lineInfo.isNumbering ? lineInfo.indent.hanging : DEFAULT_PARAGRAPH_STYLE.indentHanging,
|
|
16595
|
-
indentLeft: lineInfo.indent.left,
|
|
16596
|
-
indentRight: lineInfo.indent.right,
|
|
16597
|
-
indentBefore: lineInfo.offsetBefore,
|
|
16598
|
-
indentAfter: lineInfo.offsetAfter,
|
|
16599
|
-
markerWidth: isFirst && lineInfo.isNumbering ? lineInfo.markerWidth : 0,
|
|
16600
|
-
isNumbering: lineInfo.isNumbering,
|
|
16601
|
-
isPageBreak: false,
|
|
16602
|
-
isLineBreak: false,
|
|
16603
|
-
displayValue,
|
|
16604
|
-
isTab: component.instance instanceof NoderTabComponent,
|
|
16605
|
-
isTable: component.instance instanceof NoderTableComponent
|
|
16606
|
-
});
|
|
16607
|
-
}
|
|
16608
16058
|
findComponentType(type) {
|
|
16609
16059
|
return this.elements.find(x => x.type === type).componentType;
|
|
16610
16060
|
}
|
|
16611
16061
|
findComponent(components, insertIndex) {
|
|
16612
16062
|
return components.find((x) => x.instance.insertIndex === insertIndex);
|
|
16613
16063
|
}
|
|
16614
|
-
isFragmentContainComponents(components, distance) {
|
|
16615
|
-
return components.some(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
|
|
16616
|
-
}
|
|
16617
16064
|
isSpecialMarker(char) {
|
|
16618
16065
|
return char === CUSTOM_ELEMENT_MARKER || char === TABLE_MARKER;
|
|
16619
16066
|
}
|
|
@@ -17375,11 +16822,11 @@ class EditorRulerComponent {
|
|
|
17375
16822
|
}
|
|
17376
16823
|
}
|
|
17377
16824
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorRulerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17378
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: EditorRulerComponent, isStandalone: true, selector: "app-nod-editor-ruler", inputs: { unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "rulerContainer", first: true, predicate: ["rulerContainer"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"ruler-container\"\n [class.disabled]=\"disabled()\"\n [style.width.px]=\"pageWidth$ | async\"\n #rulerContainer>\n <div\n class=\"left-area\"\n [style.width.px]=\"leftMarginPageFormatPx()\"></div>\n <div\n class=\"right-area\"\n [style.width.px]=\"containerWidthPx - rightMarginPageFormatPx()\"></div>\n <div\n class=\"separator left-page-format\"\n [style.left.px]=\"leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'leftMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'leftMarginPageFormat')\"></div>\n <div\n class=\"separator right-page-format\"\n [style.left.px]=\"rightMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'rightMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'rightMarginPageFormat')\"></div>\n\n <div\n class=\"ruler-track\"\n (mousedown)=\"addTab($event)\"\n (touchstart)=\"addTab($event)\"\n (dblclick)=\"onOpenDialog()\">\n @for (tick of ticks; track tick) {\n <div\n class=\"tick\"\n [style.left.px]=\"tick.position\"\n [class.major]=\"tick.major\"\n [class.half]=\"tick.half\">\n @if (tick.label !== null) {\n <span class=\"label\">\n {{ tick.label }}\n </span>\n }\n </div>\n }\n </div>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"leftIndentPx()\"\n (mousedown)=\"startDrag($event, 'leftIndent')\"\n (touchstart)=\"startDrag($event, 'leftIndent')\" />\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-down\"\n class=\"paragraph-marker\"\n [style.left.px]=\"firstLinePx()\"\n (mousedown)=\"startDrag($event, 'first')\"\n (touchstart)=\"startDrag($event, 'first')\" />\n @for (tabSetting of tabSettings(); track tabSetting; let index = $index) {\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"tabSetting.position + this.leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'tabs', index)\"\n (touchstart)=\"startDrag($event, 'tabs', index)\"\n (dblclick)=\"onOpenDialog()\" />\n }\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"rightIndentPx()\"\n (mousedown)=\"startDrag($event, 'rightIndent')\"\n (touchstart)=\"startDrag($event, 'rightIndent')\" />\n @if (showGuide()) {\n <div\n class=\"drag-guide\"\n [style.left.px]=\"guideX()\"></div>\n }\n</div>\n", styles: [":host{display:flex;position:relative;z-index:3;width:100%;height:22px;justify-content:center;align-items:center}.disabled{pointer-events:none}.ruler-container{position:relative;height:18px;border-bottom-width:1px;border-bottom-style:solid;border-top-width:1px;border-top-style:solid;-webkit-user-select:none;user-select:none}.ruler-track{position:absolute;left:0;right:0;bottom:0;height:18px;overflow:hidden}.tick{position:absolute;top:50%;transform:translateY(-50%);width:1px;height:4px}.major{height:0}.half{height:8px}.label{position:absolute;top:50%;transform:translate(-50%,-50%);font-size:10px}mat-icon{position:absolute;width:17px;height:17px;font-size:18px;font-weight:700;cursor:grab;z-index:2;transform:translate(-50%)}.drag-guide{position:absolute;height:2000px;top:10px;width:1px;z-index:9999;pointer-events:none;will-change:left}.paragraph-marker{top:-6px;z-index:2}.page-marker{bottom:-6px;z-index:2}.left-area,.right-area,.separator{position:absolute;height:18px}.separator{width:5px;transform:translate(-50%);background-color:transparent;cursor:ew-resize;z-index:2}.left-area{left:0}.right-area{right:0}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
16825
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: EditorRulerComponent, isStandalone: true, selector: "app-nod-editor-ruler", inputs: { unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "rulerContainer", first: true, predicate: ["rulerContainer"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"ruler-container\"\n [class.disabled]=\"disabled()\"\n [style.width.px]=\"pageWidth$ | async\"\n #rulerContainer>\n <div\n class=\"left-area\"\n [style.width.px]=\"leftMarginPageFormatPx()\"></div>\n <div\n class=\"right-area\"\n [style.width.px]=\"containerWidthPx - rightMarginPageFormatPx()\"></div>\n <div\n class=\"separator left-page-format\"\n [style.left.px]=\"leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'leftMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'leftMarginPageFormat')\"></div>\n <div\n class=\"separator right-page-format\"\n [style.left.px]=\"rightMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'rightMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'rightMarginPageFormat')\"></div>\n\n <div\n class=\"ruler-track\"\n (mousedown)=\"addTab($event)\"\n (touchstart)=\"addTab($event)\"\n (dblclick)=\"onOpenDialog()\">\n @for (tick of ticks; track tick.position) {\n <div\n class=\"tick\"\n [style.left.px]=\"tick.position\"\n [class.major]=\"tick.major\"\n [class.half]=\"tick.half\">\n @if (tick.label !== null) {\n <span class=\"label\">\n {{ tick.label }}\n </span>\n }\n </div>\n }\n </div>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"leftIndentPx()\"\n (mousedown)=\"startDrag($event, 'leftIndent')\"\n (touchstart)=\"startDrag($event, 'leftIndent')\" />\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-down\"\n class=\"paragraph-marker\"\n [style.left.px]=\"firstLinePx()\"\n (mousedown)=\"startDrag($event, 'first')\"\n (touchstart)=\"startDrag($event, 'first')\" />\n @for (tabSetting of tabSettings(); track tabSetting; let index = $index) {\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"tabSetting.position + this.leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'tabs', index)\"\n (touchstart)=\"startDrag($event, 'tabs', index)\"\n (dblclick)=\"onOpenDialog()\" />\n }\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"rightIndentPx()\"\n (mousedown)=\"startDrag($event, 'rightIndent')\"\n (touchstart)=\"startDrag($event, 'rightIndent')\" />\n @if (showGuide()) {\n <div\n class=\"drag-guide\"\n [style.left.px]=\"guideX()\"></div>\n }\n</div>\n", styles: [":host{display:flex;position:relative;z-index:3;width:100%;height:22px;justify-content:center;align-items:center}.disabled{pointer-events:none}.ruler-container{position:relative;height:18px;border-bottom-width:1px;border-bottom-style:solid;border-top-width:1px;border-top-style:solid;-webkit-user-select:none;user-select:none}.ruler-track{position:absolute;left:0;right:0;bottom:0;height:18px;overflow:hidden}.tick{position:absolute;top:50%;transform:translateY(-50%);width:1px;height:4px}.major{height:0}.half{height:8px}.label{position:absolute;top:50%;transform:translate(-50%,-50%);font-size:10px}mat-icon{position:absolute;width:17px;height:17px;font-size:18px;font-weight:700;cursor:grab;z-index:2;transform:translate(-50%)}.drag-guide{position:absolute;height:2000px;top:10px;width:1px;z-index:9999;pointer-events:none;will-change:left}.paragraph-marker{top:-6px;z-index:2}.page-marker{bottom:-6px;z-index:2}.left-area,.right-area,.separator{position:absolute;height:18px}.separator{width:5px;transform:translate(-50%);background-color:transparent;cursor:ew-resize;z-index:2}.left-area{left:0}.right-area{right:0}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
17379
16826
|
}
|
|
17380
16827
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorRulerComponent, decorators: [{
|
|
17381
16828
|
type: Component,
|
|
17382
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-ruler', imports: [MatIconModule, AsyncPipe], template: "<div\n class=\"ruler-container\"\n [class.disabled]=\"disabled()\"\n [style.width.px]=\"pageWidth$ | async\"\n #rulerContainer>\n <div\n class=\"left-area\"\n [style.width.px]=\"leftMarginPageFormatPx()\"></div>\n <div\n class=\"right-area\"\n [style.width.px]=\"containerWidthPx - rightMarginPageFormatPx()\"></div>\n <div\n class=\"separator left-page-format\"\n [style.left.px]=\"leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'leftMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'leftMarginPageFormat')\"></div>\n <div\n class=\"separator right-page-format\"\n [style.left.px]=\"rightMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'rightMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'rightMarginPageFormat')\"></div>\n\n <div\n class=\"ruler-track\"\n (mousedown)=\"addTab($event)\"\n (touchstart)=\"addTab($event)\"\n (dblclick)=\"onOpenDialog()\">\n @for (tick of ticks; track tick) {\n <div\n class=\"tick\"\n [style.left.px]=\"tick.position\"\n [class.major]=\"tick.major\"\n [class.half]=\"tick.half\">\n @if (tick.label !== null) {\n <span class=\"label\">\n {{ tick.label }}\n </span>\n }\n </div>\n }\n </div>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"leftIndentPx()\"\n (mousedown)=\"startDrag($event, 'leftIndent')\"\n (touchstart)=\"startDrag($event, 'leftIndent')\" />\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-down\"\n class=\"paragraph-marker\"\n [style.left.px]=\"firstLinePx()\"\n (mousedown)=\"startDrag($event, 'first')\"\n (touchstart)=\"startDrag($event, 'first')\" />\n @for (tabSetting of tabSettings(); track tabSetting; let index = $index) {\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"tabSetting.position + this.leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'tabs', index)\"\n (touchstart)=\"startDrag($event, 'tabs', index)\"\n (dblclick)=\"onOpenDialog()\" />\n }\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"rightIndentPx()\"\n (mousedown)=\"startDrag($event, 'rightIndent')\"\n (touchstart)=\"startDrag($event, 'rightIndent')\" />\n @if (showGuide()) {\n <div\n class=\"drag-guide\"\n [style.left.px]=\"guideX()\"></div>\n }\n</div>\n", styles: [":host{display:flex;position:relative;z-index:3;width:100%;height:22px;justify-content:center;align-items:center}.disabled{pointer-events:none}.ruler-container{position:relative;height:18px;border-bottom-width:1px;border-bottom-style:solid;border-top-width:1px;border-top-style:solid;-webkit-user-select:none;user-select:none}.ruler-track{position:absolute;left:0;right:0;bottom:0;height:18px;overflow:hidden}.tick{position:absolute;top:50%;transform:translateY(-50%);width:1px;height:4px}.major{height:0}.half{height:8px}.label{position:absolute;top:50%;transform:translate(-50%,-50%);font-size:10px}mat-icon{position:absolute;width:17px;height:17px;font-size:18px;font-weight:700;cursor:grab;z-index:2;transform:translate(-50%)}.drag-guide{position:absolute;height:2000px;top:10px;width:1px;z-index:9999;pointer-events:none;will-change:left}.paragraph-marker{top:-6px;z-index:2}.page-marker{bottom:-6px;z-index:2}.left-area,.right-area,.separator{position:absolute;height:18px}.separator{width:5px;transform:translate(-50%);background-color:transparent;cursor:ew-resize;z-index:2}.left-area{left:0}.right-area{right:0}\n"] }]
|
|
16829
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-ruler', imports: [MatIconModule, AsyncPipe], template: "<div\n class=\"ruler-container\"\n [class.disabled]=\"disabled()\"\n [style.width.px]=\"pageWidth$ | async\"\n #rulerContainer>\n <div\n class=\"left-area\"\n [style.width.px]=\"leftMarginPageFormatPx()\"></div>\n <div\n class=\"right-area\"\n [style.width.px]=\"containerWidthPx - rightMarginPageFormatPx()\"></div>\n <div\n class=\"separator left-page-format\"\n [style.left.px]=\"leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'leftMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'leftMarginPageFormat')\"></div>\n <div\n class=\"separator right-page-format\"\n [style.left.px]=\"rightMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'rightMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'rightMarginPageFormat')\"></div>\n\n <div\n class=\"ruler-track\"\n (mousedown)=\"addTab($event)\"\n (touchstart)=\"addTab($event)\"\n (dblclick)=\"onOpenDialog()\">\n @for (tick of ticks; track tick.position) {\n <div\n class=\"tick\"\n [style.left.px]=\"tick.position\"\n [class.major]=\"tick.major\"\n [class.half]=\"tick.half\">\n @if (tick.label !== null) {\n <span class=\"label\">\n {{ tick.label }}\n </span>\n }\n </div>\n }\n </div>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"leftIndentPx()\"\n (mousedown)=\"startDrag($event, 'leftIndent')\"\n (touchstart)=\"startDrag($event, 'leftIndent')\" />\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-down\"\n class=\"paragraph-marker\"\n [style.left.px]=\"firstLinePx()\"\n (mousedown)=\"startDrag($event, 'first')\"\n (touchstart)=\"startDrag($event, 'first')\" />\n @for (tabSetting of tabSettings(); track tabSetting; let index = $index) {\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"tabSetting.position + this.leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'tabs', index)\"\n (touchstart)=\"startDrag($event, 'tabs', index)\"\n (dblclick)=\"onOpenDialog()\" />\n }\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"rightIndentPx()\"\n (mousedown)=\"startDrag($event, 'rightIndent')\"\n (touchstart)=\"startDrag($event, 'rightIndent')\" />\n @if (showGuide()) {\n <div\n class=\"drag-guide\"\n [style.left.px]=\"guideX()\"></div>\n }\n</div>\n", styles: [":host{display:flex;position:relative;z-index:3;width:100%;height:22px;justify-content:center;align-items:center}.disabled{pointer-events:none}.ruler-container{position:relative;height:18px;border-bottom-width:1px;border-bottom-style:solid;border-top-width:1px;border-top-style:solid;-webkit-user-select:none;user-select:none}.ruler-track{position:absolute;left:0;right:0;bottom:0;height:18px;overflow:hidden}.tick{position:absolute;top:50%;transform:translateY(-50%);width:1px;height:4px}.major{height:0}.half{height:8px}.label{position:absolute;top:50%;transform:translate(-50%,-50%);font-size:10px}mat-icon{position:absolute;width:17px;height:17px;font-size:18px;font-weight:700;cursor:grab;z-index:2;transform:translate(-50%)}.drag-guide{position:absolute;height:2000px;top:10px;width:1px;z-index:9999;pointer-events:none;will-change:left}.paragraph-marker{top:-6px;z-index:2}.page-marker{bottom:-6px;z-index:2}.left-area,.right-area,.separator{position:absolute;height:18px}.separator{width:5px;transform:translate(-50%);background-color:transparent;cursor:ew-resize;z-index:2}.left-area{left:0}.right-area{right:0}\n"] }]
|
|
17383
16830
|
}], ctorParameters: () => [], propDecorators: { rulerContainer: [{
|
|
17384
16831
|
type: ViewChild,
|
|
17385
16832
|
args: ['rulerContainer', { static: true }]
|
|
@@ -18253,11 +17700,11 @@ class MenuDropdownsComponent extends BaseToolbarComponent {
|
|
|
18253
17700
|
});
|
|
18254
17701
|
}
|
|
18255
17702
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MenuDropdownsComponent, deps: [{ token: CustomIconService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18256
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: MenuDropdownsComponent, isStandalone: false, selector: "app-nod-menu-dropdowns", inputs: { showFile: "showFile", showEdit: "showEdit", showInsert: "showInsert", showLayout: "showLayout", showFormat: "showFormat" }, outputs: { openFileFromDisk: "openFileFromDisk", saveAs: "saveAs", saveAsTemplate: "saveAsTemplate", downloadPdf: "downloadPdf", insertPageBreak: "insertPageBreak", createDocument: "createDocument", pageSetup: "pageSetup", rename: "rename", delete: "delete", openEditMenu: "openEditMenu", cutSelected: "cutSelected", copySelected: "copySelected", pasteClipboardData: "pasteClipboardData", selectAll: "selectAll", removeSelected: "removeSelected" }, viewQueries: [{ propertyName: "tableInsertMenu", first: true, predicate: ["tableInsert"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngIf=\"{\n clipboardData: editorService.clipboardData$ | async,\n hasSelection: editorService.hasSelection$ | async,\n isViewOnly: editorService.isViewOnly$ | async\n } as data\">\n <button\n *ngIf=\"showFile\"\n id=\"menu-dropdowns-menu-file\"\n mat-button\n [matMenuTriggerFor]=\"fileMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FILE' | translate }}\n </button>\n <mat-menu\n #fileMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"createDocument.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-new\"\n mat-menu-item\n (click)=\"createDocument.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add-new\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NEW' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-menu-page-setup\"\n mat-menu-item\n (click)=\"pageSetup.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-system-file\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"openFileFromDisk.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-open-from\"\n mat-menu-item\n (click)=\"openFileFromDisk.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-open-from\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.OPEN_FROM' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+O</span>\n </div>\n </button>\n <button\n *ngIf=\"saveAs.observed\"\n id=\"menu-dropdowns-menu-item-save-as\"\n mat-menu-item\n (click)=\"saveAs.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS' | translate }}</span>\n </div>\n </button>\n @if (saveAsTemplate.observed) {\n <button\n id=\"menu-dropdowns-menu-item-save-as-template\"\n mat-menu-item\n (click)=\"saveAsTemplate.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS_TEMPLATE' | translate }}</span>\n </div>\n </button>\n }\n <button\n *ngIf=\"downloadPdf.observed\"\n id=\"menu-dropdowns-menu-item-download-pdf\"\n mat-menu-item\n (click)=\"downloadPdf.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DOWNLOAD_PDF' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"rename.observed\"\n id=\"menu-dropdowns-menu-item-rename\"\n mat-menu-item\n (click)=\"rename.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-rename\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RENAME' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"print.observed\"\n id=\"menu-dropdowns-menu-item-print\"\n mat-menu-item\n (click)=\"print.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PRINT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+P</span>\n </div>\n </button>\n <button\n *ngIf=\"delete.observed\"\n id=\"menu-dropdowns-menu-item-delete\"\n mat-menu-item\n (click)=\"delete.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showEdit\"\n id=\"menu-dropdowns-menu-edit\"\n mat-button\n [matMenuTriggerFor]=\"editMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"openEditMenu.emit()\">\n {{ 'NODER.LABEL.EDIT' | translate }}\n </button>\n <mat-menu\n #editMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"undo.observed\"\n id=\"menu-dropdowns-menu-item-undo\"\n mat-menu-item\n [disabled]=\"!canUndo\"\n (click)=\"undo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Z</span>\n </div>\n </button>\n <button\n *ngIf=\"redo.observed\"\n id=\"menu-dropdowns-menu-item-redo\"\n mat-menu-item\n [disabled]=\"!canRedo\"\n (click)=\"redo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.REDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Y</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"cutSelected.observed\"\n id=\"menu-dropdowns-menu-item-cut\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"cutSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-cut\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CUT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+X</span>\n </div>\n </button>\n <button\n *ngIf=\"copySelected.observed\"\n id=\"menu-dropdowns-menu-item-copy\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"copySelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-file-copy\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.COPY' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+C</span>\n </div>\n </button>\n <button\n *ngIf=\"pasteClipboardData.observed\"\n id=\"menu-dropdowns-menu-item-paste\"\n mat-menu-item\n [disabled]=\"!data.clipboardData?.length\"\n (click)=\"pasteClipboardData.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-paste\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PASTE' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+V</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"selectAll.observed\"\n id=\"menu-dropdowns-menu-item-select-all\"\n mat-menu-item\n (click)=\"selectAll.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-select-all\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SELECT_ALL' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+A</span>\n </div>\n </button>\n <button\n *ngIf=\"removeSelected.observed\"\n id=\"menu-dropdowns-menu-item-delete-text\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"removeSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showInsert && !data.isViewOnly\"\n #insertMenuTrigger=\"matMenuTrigger\"\n id=\"menu-dropdowns-menu-insert\"\n mat-button\n [matMenuTriggerFor]=\"insertMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.INSERT' | translate }}\n </button>\n <mat-menu\n #insertMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertImage.observed\"\n id=\"menu-dropdowns-menu-item-image\"\n mat-menu-item\n (click)=\"insertImage.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.IMAGE' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-table\"\n mat-menu-item\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\"></mat-icon>\n {{ 'NODER.LABEL.TABLE' | translate }}\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"insertLink.observed\"\n id=\"menu-dropdowns-menu-item-link\"\n mat-menu-item\n (click)=\"insertLink.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LINK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+K</span>\n </div>\n </button>\n <button\n *ngFor=\"let element of elements\"\n id=\"menu-dropdowns-menu-item-{{ element.nameId }}\"\n mat-menu-item\n (click)=\"onCreateElement(element)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n <span class=\"menu-item-text\">{{ element.nameTranslate | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-headers-footers\"\n mat-menu-item\n class=\"hidden\"\n [matMenuTriggerFor]=\"listHeadersFootersMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listHeadersFootersMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-header\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-header\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADER' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-bottom\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.FOOTER' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n </mat-menu>\n <button\n *ngIf=\"showLayout && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-layout\"\n mat-button\n [matMenuTriggerFor]=\"layoutMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.LAYOUT' | translate }}\n </button>\n <mat-menu\n #layoutMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertPageBreak.observed\"\n id=\"menu-dropdowns-menu-item-page-break\"\n mat-menu-item\n (click)=\"insertPageBreak.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-page-break\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_BREAK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Enter</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showFormat && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-format\"\n mat-button\n [matMenuTriggerFor]=\"formatMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FORMAT' | translate }}\n </button>\n <mat-menu\n #formatMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align\"\n mat-menu-item\n [matMenuTriggerFor]=\"listAlignMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ALIGN' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listAlignMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align-left\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Left)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LEFT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+L</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-center\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Center)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CENTER' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+E</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-right\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Right)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RIGHT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+R</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-bullets-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletsNumberingMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLETS_AND_NUMBERING' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletsNumberingMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bullets\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLET_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList6)\"></mat-icon>\n </div>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listNumberedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NUMBERED_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList6)\"></mat-icon>\n </div>\n </mat-menu>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-text\"\n mat-menu-item\n [matMenuTriggerFor]=\"listTextMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.TEXT' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listTextMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bold\"\n mat-menu-item\n (click)=\"onApplyBold()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BOLD' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+B</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-italic\"\n mat-menu-item\n (click)=\"onApplyItalic()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ITALIC' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+I</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-underlined\"\n mat-menu-item\n (click)=\"onApplyUnderline()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDERLINED' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+U</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-header-footer\"\n mat-menu-item\n class=\"hidden\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n </mat-menu>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:100%}.menu-buttons mat-icon{width:24px;height:24px;font-size:24px}.heading-menu{display:inline-flex;width:210px}.hot-keys{text-align:end;width:auto}.menu-item-text{white-space:nowrap;width:64%}.mat-mdc-menu-item .mat-icon{margin-right:4px;width:28px}.hidden{display:none}.list-marker,.list-number{margin:0 5px}.list-marker mat-icon,.list-number mat-icon{width:70px;height:80px;margin:0 5px}.list-marker mat-icon:hover,.list-number mat-icon:hover{border:none}.list-icon .selected,.list-icon .selected:hover,.list-number .selected,.list-number .selected:hover{border-width:2px;border-style:solid}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InsertTableComponent, selector: "app-nod-insert-table", outputs: ["selectSizes"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
17703
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: MenuDropdownsComponent, isStandalone: false, selector: "app-nod-menu-dropdowns", inputs: { showFile: "showFile", showEdit: "showEdit", showInsert: "showInsert", showLayout: "showLayout", showFormat: "showFormat" }, outputs: { openFileFromDisk: "openFileFromDisk", saveAs: "saveAs", saveAsTemplate: "saveAsTemplate", downloadPdf: "downloadPdf", insertPageBreak: "insertPageBreak", createDocument: "createDocument", pageSetup: "pageSetup", rename: "rename", delete: "delete", openEditMenu: "openEditMenu", cutSelected: "cutSelected", copySelected: "copySelected", pasteClipboardData: "pasteClipboardData", selectAll: "selectAll", removeSelected: "removeSelected" }, viewQueries: [{ propertyName: "tableInsertMenu", first: true, predicate: ["tableInsert"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngIf=\"{\n clipboardData: editorService.clipboardData$ | async,\n hasSelection: editorService.hasSelection$ | async,\n isViewOnly: editorService.isViewOnly$ | async\n } as data\">\n <button\n *ngIf=\"showFile\"\n id=\"menu-dropdowns-menu-file\"\n mat-button\n [matMenuTriggerFor]=\"fileMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FILE' | translate }}\n </button>\n <mat-menu\n #fileMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"createDocument.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-new\"\n mat-menu-item\n (click)=\"createDocument.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add-new\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NEW' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-menu-page-setup\"\n mat-menu-item\n (click)=\"pageSetup.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-system-file\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"openFileFromDisk.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-open-from\"\n mat-menu-item\n (click)=\"openFileFromDisk.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-open-from\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.OPEN_FROM' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+O</span>\n </div>\n </button>\n <button\n *ngIf=\"saveAs.observed\"\n id=\"menu-dropdowns-menu-item-save-as\"\n mat-menu-item\n (click)=\"saveAs.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS' | translate }}</span>\n </div>\n </button>\n @if (saveAsTemplate.observed) {\n <button\n id=\"menu-dropdowns-menu-item-save-as-template\"\n mat-menu-item\n (click)=\"saveAsTemplate.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS_TEMPLATE' | translate }}</span>\n </div>\n </button>\n }\n <button\n *ngIf=\"downloadPdf.observed\"\n id=\"menu-dropdowns-menu-item-download-pdf\"\n mat-menu-item\n (click)=\"downloadPdf.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DOWNLOAD_PDF' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"rename.observed\"\n id=\"menu-dropdowns-menu-item-rename\"\n mat-menu-item\n (click)=\"rename.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-rename\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RENAME' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"print.observed\"\n id=\"menu-dropdowns-menu-item-print\"\n mat-menu-item\n (click)=\"print.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PRINT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+P</span>\n </div>\n </button>\n <button\n *ngIf=\"delete.observed\"\n id=\"menu-dropdowns-menu-item-delete\"\n mat-menu-item\n (click)=\"delete.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showEdit\"\n id=\"menu-dropdowns-menu-edit\"\n mat-button\n [matMenuTriggerFor]=\"editMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"openEditMenu.emit()\">\n {{ 'NODER.LABEL.EDIT' | translate }}\n </button>\n <mat-menu\n #editMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"undo.observed\"\n id=\"menu-dropdowns-menu-item-undo\"\n mat-menu-item\n [disabled]=\"!canUndo\"\n (click)=\"undo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Z</span>\n </div>\n </button>\n <button\n *ngIf=\"redo.observed\"\n id=\"menu-dropdowns-menu-item-redo\"\n mat-menu-item\n [disabled]=\"!canRedo\"\n (click)=\"redo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.REDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Y</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"cutSelected.observed\"\n id=\"menu-dropdowns-menu-item-cut\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"cutSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-cut\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CUT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+X</span>\n </div>\n </button>\n <button\n *ngIf=\"copySelected.observed\"\n id=\"menu-dropdowns-menu-item-copy\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"copySelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-file-copy\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.COPY' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+C</span>\n </div>\n </button>\n <button\n *ngIf=\"pasteClipboardData.observed\"\n id=\"menu-dropdowns-menu-item-paste\"\n mat-menu-item\n [disabled]=\"!data.clipboardData?.length\"\n (click)=\"pasteClipboardData.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-paste\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PASTE' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+V</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"selectAll.observed\"\n id=\"menu-dropdowns-menu-item-select-all\"\n mat-menu-item\n (click)=\"selectAll.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-select-all\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SELECT_ALL' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+A</span>\n </div>\n </button>\n <button\n *ngIf=\"removeSelected.observed\"\n id=\"menu-dropdowns-menu-item-delete-text\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"removeSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showInsert && !data.isViewOnly\"\n #insertMenuTrigger=\"matMenuTrigger\"\n id=\"menu-dropdowns-menu-insert\"\n mat-button\n [matMenuTriggerFor]=\"insertMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.INSERT' | translate }}\n </button>\n <mat-menu\n #insertMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertImage.observed\"\n id=\"menu-dropdowns-menu-item-image\"\n mat-menu-item\n (click)=\"insertImage.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.IMAGE' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-table\"\n mat-menu-item\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\"></mat-icon>\n {{ 'NODER.LABEL.TABLE' | translate }}\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"insertLink.observed\"\n id=\"menu-dropdowns-menu-item-link\"\n mat-menu-item\n (click)=\"insertLink.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LINK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+K</span>\n </div>\n </button>\n <button\n *ngFor=\"let element of elements\"\n id=\"menu-dropdowns-menu-item-{{ element.nameId }}\"\n mat-menu-item\n (click)=\"onCreateElement(element)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n <span class=\"menu-item-text\">{{ element.nameTranslate | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-headers-footers\"\n mat-menu-item\n class=\"hidden\"\n [matMenuTriggerFor]=\"listHeadersFootersMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listHeadersFootersMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-header\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-header\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADER' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-bottom\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.FOOTER' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n </mat-menu>\n <button\n *ngIf=\"showLayout && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-layout\"\n mat-button\n [matMenuTriggerFor]=\"layoutMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.LAYOUT' | translate }}\n </button>\n <mat-menu\n #layoutMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertPageBreak.observed\"\n id=\"menu-dropdowns-menu-item-page-break\"\n mat-menu-item\n (click)=\"insertPageBreak.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-page-break\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_BREAK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Enter</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showFormat && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-format\"\n mat-button\n [matMenuTriggerFor]=\"formatMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FORMAT' | translate }}\n </button>\n <mat-menu\n #formatMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align\"\n mat-menu-item\n [matMenuTriggerFor]=\"listAlignMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ALIGN' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listAlignMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align-left\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Left)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LEFT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+L</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-center\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Center)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CENTER' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+E</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-right\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Right)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RIGHT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+R</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-bullets-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletsNumberingMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLETS_AND_NUMBERING' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletsNumberingMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bullets\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLET_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList6)\"></mat-icon>\n </div>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listNumberedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NUMBERED_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList6)\"></mat-icon>\n </div>\n </mat-menu>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-text\"\n mat-menu-item\n [matMenuTriggerFor]=\"listTextMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.TEXT' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listTextMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bold\"\n mat-menu-item\n (click)=\"onApplyBold()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BOLD' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+B</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-italic\"\n mat-menu-item\n (click)=\"onApplyItalic()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ITALIC' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+I</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-underlined\"\n mat-menu-item\n (click)=\"onApplyUnderline()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDERLINED' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+U</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-header-footer\"\n mat-menu-item\n class=\"hidden\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n </mat-menu>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:100%}button.mat-mdc-button{letter-spacing:0}.menu-buttons mat-icon{width:24px;height:24px;font-size:24px}.heading-menu{display:inline-flex;width:210px}.hot-keys{text-align:end;width:auto}.menu-item-text{white-space:nowrap;width:64%}.mat-mdc-menu-item .mat-icon{margin-right:4px;width:28px}.hidden{display:none}.list-marker,.list-number{margin:0 5px}.list-marker mat-icon,.list-number mat-icon{width:70px;height:80px;margin:0 5px}.list-marker mat-icon:hover,.list-number mat-icon:hover{border:none}.list-icon .selected,.list-icon .selected:hover,.list-number .selected,.list-number .selected:hover{border-width:2px;border-style:solid}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InsertTableComponent, selector: "app-nod-insert-table", outputs: ["selectSizes"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
18257
17704
|
}
|
|
18258
17705
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MenuDropdownsComponent, decorators: [{
|
|
18259
17706
|
type: Component,
|
|
18260
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-menu-dropdowns', standalone: false, template: "<ng-container\n *ngIf=\"{\n clipboardData: editorService.clipboardData$ | async,\n hasSelection: editorService.hasSelection$ | async,\n isViewOnly: editorService.isViewOnly$ | async\n } as data\">\n <button\n *ngIf=\"showFile\"\n id=\"menu-dropdowns-menu-file\"\n mat-button\n [matMenuTriggerFor]=\"fileMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FILE' | translate }}\n </button>\n <mat-menu\n #fileMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"createDocument.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-new\"\n mat-menu-item\n (click)=\"createDocument.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add-new\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NEW' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-menu-page-setup\"\n mat-menu-item\n (click)=\"pageSetup.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-system-file\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"openFileFromDisk.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-open-from\"\n mat-menu-item\n (click)=\"openFileFromDisk.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-open-from\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.OPEN_FROM' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+O</span>\n </div>\n </button>\n <button\n *ngIf=\"saveAs.observed\"\n id=\"menu-dropdowns-menu-item-save-as\"\n mat-menu-item\n (click)=\"saveAs.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS' | translate }}</span>\n </div>\n </button>\n @if (saveAsTemplate.observed) {\n <button\n id=\"menu-dropdowns-menu-item-save-as-template\"\n mat-menu-item\n (click)=\"saveAsTemplate.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS_TEMPLATE' | translate }}</span>\n </div>\n </button>\n }\n <button\n *ngIf=\"downloadPdf.observed\"\n id=\"menu-dropdowns-menu-item-download-pdf\"\n mat-menu-item\n (click)=\"downloadPdf.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DOWNLOAD_PDF' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"rename.observed\"\n id=\"menu-dropdowns-menu-item-rename\"\n mat-menu-item\n (click)=\"rename.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-rename\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RENAME' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"print.observed\"\n id=\"menu-dropdowns-menu-item-print\"\n mat-menu-item\n (click)=\"print.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PRINT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+P</span>\n </div>\n </button>\n <button\n *ngIf=\"delete.observed\"\n id=\"menu-dropdowns-menu-item-delete\"\n mat-menu-item\n (click)=\"delete.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showEdit\"\n id=\"menu-dropdowns-menu-edit\"\n mat-button\n [matMenuTriggerFor]=\"editMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"openEditMenu.emit()\">\n {{ 'NODER.LABEL.EDIT' | translate }}\n </button>\n <mat-menu\n #editMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"undo.observed\"\n id=\"menu-dropdowns-menu-item-undo\"\n mat-menu-item\n [disabled]=\"!canUndo\"\n (click)=\"undo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Z</span>\n </div>\n </button>\n <button\n *ngIf=\"redo.observed\"\n id=\"menu-dropdowns-menu-item-redo\"\n mat-menu-item\n [disabled]=\"!canRedo\"\n (click)=\"redo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.REDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Y</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"cutSelected.observed\"\n id=\"menu-dropdowns-menu-item-cut\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"cutSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-cut\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CUT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+X</span>\n </div>\n </button>\n <button\n *ngIf=\"copySelected.observed\"\n id=\"menu-dropdowns-menu-item-copy\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"copySelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-file-copy\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.COPY' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+C</span>\n </div>\n </button>\n <button\n *ngIf=\"pasteClipboardData.observed\"\n id=\"menu-dropdowns-menu-item-paste\"\n mat-menu-item\n [disabled]=\"!data.clipboardData?.length\"\n (click)=\"pasteClipboardData.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-paste\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PASTE' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+V</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"selectAll.observed\"\n id=\"menu-dropdowns-menu-item-select-all\"\n mat-menu-item\n (click)=\"selectAll.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-select-all\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SELECT_ALL' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+A</span>\n </div>\n </button>\n <button\n *ngIf=\"removeSelected.observed\"\n id=\"menu-dropdowns-menu-item-delete-text\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"removeSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showInsert && !data.isViewOnly\"\n #insertMenuTrigger=\"matMenuTrigger\"\n id=\"menu-dropdowns-menu-insert\"\n mat-button\n [matMenuTriggerFor]=\"insertMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.INSERT' | translate }}\n </button>\n <mat-menu\n #insertMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertImage.observed\"\n id=\"menu-dropdowns-menu-item-image\"\n mat-menu-item\n (click)=\"insertImage.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.IMAGE' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-table\"\n mat-menu-item\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\"></mat-icon>\n {{ 'NODER.LABEL.TABLE' | translate }}\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"insertLink.observed\"\n id=\"menu-dropdowns-menu-item-link\"\n mat-menu-item\n (click)=\"insertLink.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LINK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+K</span>\n </div>\n </button>\n <button\n *ngFor=\"let element of elements\"\n id=\"menu-dropdowns-menu-item-{{ element.nameId }}\"\n mat-menu-item\n (click)=\"onCreateElement(element)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n <span class=\"menu-item-text\">{{ element.nameTranslate | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-headers-footers\"\n mat-menu-item\n class=\"hidden\"\n [matMenuTriggerFor]=\"listHeadersFootersMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listHeadersFootersMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-header\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-header\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADER' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-bottom\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.FOOTER' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n </mat-menu>\n <button\n *ngIf=\"showLayout && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-layout\"\n mat-button\n [matMenuTriggerFor]=\"layoutMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.LAYOUT' | translate }}\n </button>\n <mat-menu\n #layoutMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertPageBreak.observed\"\n id=\"menu-dropdowns-menu-item-page-break\"\n mat-menu-item\n (click)=\"insertPageBreak.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-page-break\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_BREAK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Enter</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showFormat && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-format\"\n mat-button\n [matMenuTriggerFor]=\"formatMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FORMAT' | translate }}\n </button>\n <mat-menu\n #formatMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align\"\n mat-menu-item\n [matMenuTriggerFor]=\"listAlignMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ALIGN' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listAlignMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align-left\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Left)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LEFT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+L</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-center\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Center)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CENTER' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+E</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-right\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Right)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RIGHT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+R</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-bullets-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletsNumberingMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLETS_AND_NUMBERING' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletsNumberingMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bullets\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLET_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList6)\"></mat-icon>\n </div>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listNumberedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NUMBERED_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList6)\"></mat-icon>\n </div>\n </mat-menu>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-text\"\n mat-menu-item\n [matMenuTriggerFor]=\"listTextMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.TEXT' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listTextMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bold\"\n mat-menu-item\n (click)=\"onApplyBold()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BOLD' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+B</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-italic\"\n mat-menu-item\n (click)=\"onApplyItalic()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ITALIC' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+I</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-underlined\"\n mat-menu-item\n (click)=\"onApplyUnderline()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDERLINED' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+U</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-header-footer\"\n mat-menu-item\n class=\"hidden\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n </mat-menu>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:100%}.menu-buttons mat-icon{width:24px;height:24px;font-size:24px}.heading-menu{display:inline-flex;width:210px}.hot-keys{text-align:end;width:auto}.menu-item-text{white-space:nowrap;width:64%}.mat-mdc-menu-item .mat-icon{margin-right:4px;width:28px}.hidden{display:none}.list-marker,.list-number{margin:0 5px}.list-marker mat-icon,.list-number mat-icon{width:70px;height:80px;margin:0 5px}.list-marker mat-icon:hover,.list-number mat-icon:hover{border:none}.list-icon .selected,.list-icon .selected:hover,.list-number .selected,.list-number .selected:hover{border-width:2px;border-style:solid}\n"] }]
|
|
17707
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-menu-dropdowns', standalone: false, template: "<ng-container\n *ngIf=\"{\n clipboardData: editorService.clipboardData$ | async,\n hasSelection: editorService.hasSelection$ | async,\n isViewOnly: editorService.isViewOnly$ | async\n } as data\">\n <button\n *ngIf=\"showFile\"\n id=\"menu-dropdowns-menu-file\"\n mat-button\n [matMenuTriggerFor]=\"fileMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FILE' | translate }}\n </button>\n <mat-menu\n #fileMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"createDocument.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-new\"\n mat-menu-item\n (click)=\"createDocument.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add-new\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NEW' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-menu-page-setup\"\n mat-menu-item\n (click)=\"pageSetup.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-system-file\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"openFileFromDisk.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-open-from\"\n mat-menu-item\n (click)=\"openFileFromDisk.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-open-from\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.OPEN_FROM' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+O</span>\n </div>\n </button>\n <button\n *ngIf=\"saveAs.observed\"\n id=\"menu-dropdowns-menu-item-save-as\"\n mat-menu-item\n (click)=\"saveAs.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS' | translate }}</span>\n </div>\n </button>\n @if (saveAsTemplate.observed) {\n <button\n id=\"menu-dropdowns-menu-item-save-as-template\"\n mat-menu-item\n (click)=\"saveAsTemplate.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS_TEMPLATE' | translate }}</span>\n </div>\n </button>\n }\n <button\n *ngIf=\"downloadPdf.observed\"\n id=\"menu-dropdowns-menu-item-download-pdf\"\n mat-menu-item\n (click)=\"downloadPdf.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DOWNLOAD_PDF' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"rename.observed\"\n id=\"menu-dropdowns-menu-item-rename\"\n mat-menu-item\n (click)=\"rename.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-rename\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RENAME' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"print.observed\"\n id=\"menu-dropdowns-menu-item-print\"\n mat-menu-item\n (click)=\"print.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PRINT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+P</span>\n </div>\n </button>\n <button\n *ngIf=\"delete.observed\"\n id=\"menu-dropdowns-menu-item-delete\"\n mat-menu-item\n (click)=\"delete.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showEdit\"\n id=\"menu-dropdowns-menu-edit\"\n mat-button\n [matMenuTriggerFor]=\"editMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"openEditMenu.emit()\">\n {{ 'NODER.LABEL.EDIT' | translate }}\n </button>\n <mat-menu\n #editMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"undo.observed\"\n id=\"menu-dropdowns-menu-item-undo\"\n mat-menu-item\n [disabled]=\"!canUndo\"\n (click)=\"undo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Z</span>\n </div>\n </button>\n <button\n *ngIf=\"redo.observed\"\n id=\"menu-dropdowns-menu-item-redo\"\n mat-menu-item\n [disabled]=\"!canRedo\"\n (click)=\"redo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.REDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Y</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"cutSelected.observed\"\n id=\"menu-dropdowns-menu-item-cut\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"cutSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-cut\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CUT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+X</span>\n </div>\n </button>\n <button\n *ngIf=\"copySelected.observed\"\n id=\"menu-dropdowns-menu-item-copy\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"copySelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-file-copy\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.COPY' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+C</span>\n </div>\n </button>\n <button\n *ngIf=\"pasteClipboardData.observed\"\n id=\"menu-dropdowns-menu-item-paste\"\n mat-menu-item\n [disabled]=\"!data.clipboardData?.length\"\n (click)=\"pasteClipboardData.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-paste\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PASTE' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+V</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"selectAll.observed\"\n id=\"menu-dropdowns-menu-item-select-all\"\n mat-menu-item\n (click)=\"selectAll.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-select-all\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SELECT_ALL' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+A</span>\n </div>\n </button>\n <button\n *ngIf=\"removeSelected.observed\"\n id=\"menu-dropdowns-menu-item-delete-text\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"removeSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showInsert && !data.isViewOnly\"\n #insertMenuTrigger=\"matMenuTrigger\"\n id=\"menu-dropdowns-menu-insert\"\n mat-button\n [matMenuTriggerFor]=\"insertMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.INSERT' | translate }}\n </button>\n <mat-menu\n #insertMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertImage.observed\"\n id=\"menu-dropdowns-menu-item-image\"\n mat-menu-item\n (click)=\"insertImage.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.IMAGE' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-table\"\n mat-menu-item\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\"></mat-icon>\n {{ 'NODER.LABEL.TABLE' | translate }}\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"insertLink.observed\"\n id=\"menu-dropdowns-menu-item-link\"\n mat-menu-item\n (click)=\"insertLink.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LINK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+K</span>\n </div>\n </button>\n <button\n *ngFor=\"let element of elements\"\n id=\"menu-dropdowns-menu-item-{{ element.nameId }}\"\n mat-menu-item\n (click)=\"onCreateElement(element)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n <span class=\"menu-item-text\">{{ element.nameTranslate | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-headers-footers\"\n mat-menu-item\n class=\"hidden\"\n [matMenuTriggerFor]=\"listHeadersFootersMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listHeadersFootersMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-header\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-header\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADER' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-bottom\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.FOOTER' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n </mat-menu>\n <button\n *ngIf=\"showLayout && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-layout\"\n mat-button\n [matMenuTriggerFor]=\"layoutMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.LAYOUT' | translate }}\n </button>\n <mat-menu\n #layoutMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertPageBreak.observed\"\n id=\"menu-dropdowns-menu-item-page-break\"\n mat-menu-item\n (click)=\"insertPageBreak.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-page-break\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_BREAK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Enter</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showFormat && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-format\"\n mat-button\n [matMenuTriggerFor]=\"formatMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FORMAT' | translate }}\n </button>\n <mat-menu\n #formatMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align\"\n mat-menu-item\n [matMenuTriggerFor]=\"listAlignMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ALIGN' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listAlignMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align-left\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Left)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LEFT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+L</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-center\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Center)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CENTER' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+E</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-right\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Right)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RIGHT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+R</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-bullets-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletsNumberingMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLETS_AND_NUMBERING' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletsNumberingMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bullets\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLET_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList6)\"></mat-icon>\n </div>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listNumberedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NUMBERED_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList6)\"></mat-icon>\n </div>\n </mat-menu>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-text\"\n mat-menu-item\n [matMenuTriggerFor]=\"listTextMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.TEXT' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listTextMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bold\"\n mat-menu-item\n (click)=\"onApplyBold()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BOLD' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+B</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-italic\"\n mat-menu-item\n (click)=\"onApplyItalic()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ITALIC' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+I</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-underlined\"\n mat-menu-item\n (click)=\"onApplyUnderline()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDERLINED' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+U</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-header-footer\"\n mat-menu-item\n class=\"hidden\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n </mat-menu>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:100%}button.mat-mdc-button{letter-spacing:0}.menu-buttons mat-icon{width:24px;height:24px;font-size:24px}.heading-menu{display:inline-flex;width:210px}.hot-keys{text-align:end;width:auto}.menu-item-text{white-space:nowrap;width:64%}.mat-mdc-menu-item .mat-icon{margin-right:4px;width:28px}.hidden{display:none}.list-marker,.list-number{margin:0 5px}.list-marker mat-icon,.list-number mat-icon{width:70px;height:80px;margin:0 5px}.list-marker mat-icon:hover,.list-number mat-icon:hover{border:none}.list-icon .selected,.list-icon .selected:hover,.list-number .selected,.list-number .selected:hover{border-width:2px;border-style:solid}\n"] }]
|
|
18261
17708
|
}], ctorParameters: () => [{ type: CustomIconService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: EditorService }], propDecorators: { showFile: [{
|
|
18262
17709
|
type: Input
|
|
18263
17710
|
}], showEdit: [{
|
|
@@ -18328,11 +17775,11 @@ class FontComponent {
|
|
|
18328
17775
|
this.selectFont.emit(font);
|
|
18329
17776
|
}
|
|
18330
17777
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FontComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18331
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FontComponent, isStandalone: true, selector: "app-nod-font", inputs: { isDisabled: "isDisabled", styles: "styles" }, outputs: { selectFont: "selectFont" }, ngImport: i0, template: "<button\n mat-button\n [matMenuTriggerFor]=\"fontMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matTooltip]=\"'NODER.TOOLTIP.FONT' | translate\"\n matTooltipPosition=\"below\">\n <div class=\"font-menu\">\n <span>{{ font }}</span>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu\n #fontMenu=\"matMenu\"\n class=\"noder-modal\">\n <ng-container *ngFor=\"let font of fonts\">\n <button\n mat-menu-item\n [disabled]=\"isDisabled\"\n (click)=\"onSelectFont(font)\">\n {{ font }}\n </button>\n </ng-container>\n</mat-menu>\n", styles: [".font-menu{display:flex;justify-content:space-between;align-items:center;width:130px}span{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:start}button{
|
|
17778
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FontComponent, isStandalone: true, selector: "app-nod-font", inputs: { isDisabled: "isDisabled", styles: "styles" }, outputs: { selectFont: "selectFont" }, ngImport: i0, template: "<button\n mat-button\n [matMenuTriggerFor]=\"fontMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matTooltip]=\"'NODER.TOOLTIP.FONT' | translate\"\n matTooltipPosition=\"below\">\n <div class=\"font-menu\">\n <span>{{ font }}</span>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu\n #fontMenu=\"matMenu\"\n class=\"noder-modal\">\n <ng-container *ngFor=\"let font of fonts\">\n <button\n mat-menu-item\n [disabled]=\"isDisabled\"\n (click)=\"onSelectFont(font)\">\n {{ font }}\n </button>\n </ng-container>\n</mat-menu>\n", styles: [".font-menu{display:flex;justify-content:space-between;align-items:center;width:130px}span{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:start}button{margin:0 4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
18332
17779
|
}
|
|
18333
17780
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FontComponent, decorators: [{
|
|
18334
17781
|
type: Component,
|
|
18335
|
-
args: [{ imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule, MatTooltipModule, TranslateModule], selector: 'app-nod-font', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n mat-button\n [matMenuTriggerFor]=\"fontMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matTooltip]=\"'NODER.TOOLTIP.FONT' | translate\"\n matTooltipPosition=\"below\">\n <div class=\"font-menu\">\n <span>{{ font }}</span>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu\n #fontMenu=\"matMenu\"\n class=\"noder-modal\">\n <ng-container *ngFor=\"let font of fonts\">\n <button\n mat-menu-item\n [disabled]=\"isDisabled\"\n (click)=\"onSelectFont(font)\">\n {{ font }}\n </button>\n </ng-container>\n</mat-menu>\n", styles: [".font-menu{display:flex;justify-content:space-between;align-items:center;width:130px}span{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:start}button{
|
|
17782
|
+
args: [{ imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule, MatTooltipModule, TranslateModule], selector: 'app-nod-font', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n mat-button\n [matMenuTriggerFor]=\"fontMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matTooltip]=\"'NODER.TOOLTIP.FONT' | translate\"\n matTooltipPosition=\"below\">\n <div class=\"font-menu\">\n <span>{{ font }}</span>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu\n #fontMenu=\"matMenu\"\n class=\"noder-modal\">\n <ng-container *ngFor=\"let font of fonts\">\n <button\n mat-menu-item\n [disabled]=\"isDisabled\"\n (click)=\"onSelectFont(font)\">\n {{ font }}\n </button>\n </ng-container>\n</mat-menu>\n", styles: [".font-menu{display:flex;justify-content:space-between;align-items:center;width:130px}span{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:start}button{margin:0 4px}\n"] }]
|
|
18336
17783
|
}], propDecorators: { isDisabled: [{
|
|
18337
17784
|
type: Input
|
|
18338
17785
|
}], styles: [{
|
|
@@ -19953,5 +19400,5 @@ class OperationModel {
|
|
|
19953
19400
|
* Generated bundle index. Do not edit.
|
|
19954
19401
|
*/
|
|
19955
19402
|
|
|
19956
|
-
export { AddLinkDialogComponent, AddLinkMobileComponent, Alignment, BaseCommentComponent, BaseNoderComponent, Borders, BreakTypes, CommandModel, CommandType, CommandsService, ConfirmDialogComponent, DEFAULT_BACKGROUND_COLOR, DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER, DEFAULT_FONT_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_HEADINGS, DEFAULT_HEADING_STYLE_ID, DEFAULT_OFFSET_AFTER_NUMBERING_MARKER, DEFAULT_PARAGRAPH_STYLE, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE, DEFAULT_TOOLBAR_STYLES, DefaultImageApiService, DestroyComponent, DocumentInfo, DocumentModel, DocumentNameModel, DocxModel, DomHelper, EditorComponent, EditorMobileToolbarComponent, EditorModule, EditorService, EditorTitleComponent, EditorTitleMobileComponent, EditorToolbarComponent, EditorToolbarMode, EditorToolbarModule, EditorToolbarService, ElementDataModel, ElementModel, ExternalComponent, ExternalElementModel, ExternalElementService, FileSourceModel, FontMetrics, FormatStyleHelper, GrammarService, HYPERLINK_FONT_COLOR, HYPERLINK_HEADING_STYLE_ID, ImageApiService, ImageDataModel, LastDocumentRevisionModel, LineStyles, MenuDropdownsComponent, MenuDropdownsMobileComponent, Mode, NEW_LINE_MARKUP, NoderTranslateLoader, NumberingLevelModel, OperationModel, OperationsHistoryInfoModel, PageSetupComponent, PageType, ParagraphStyleModel, RevisionHelper, RevisionModel, SearchResultLocation, TextFormatMobileComponent, TextStyleModel, ToolbarActionsComponent };
|
|
19403
|
+
export { AddLinkDialogComponent, AddLinkMobileComponent, Alignment, BaseCommentComponent, BaseNoderComponent, Borders, BreakTypes, CommandModel, CommandType, CommandsService, ConfirmDialogComponent, DEFAULT_BACKGROUND_COLOR, DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER, DEFAULT_FONT_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_HEADINGS, DEFAULT_HEADING_STYLE_ID, DEFAULT_OFFSET_AFTER_NUMBERING_MARKER, DEFAULT_PARAGRAPH_STYLE, DEFAULT_TABLE_MARGINS, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE, DEFAULT_TOOLBAR_STYLES, DefaultImageApiService, DestroyComponent, DocumentInfo, DocumentModel, DocumentNameModel, DocxModel, DomHelper, EditorComponent, EditorMobileToolbarComponent, EditorModule, EditorService, EditorTitleComponent, EditorTitleMobileComponent, EditorToolbarComponent, EditorToolbarMode, EditorToolbarModule, EditorToolbarService, ElementDataModel, ElementModel, ExternalComponent, ExternalElementModel, ExternalElementService, FileSourceModel, FontMetrics, FormatStyleHelper, GrammarService, HYPERLINK_FONT_COLOR, HYPERLINK_HEADING_STYLE_ID, ImageApiService, ImageDataModel, LastDocumentRevisionModel, LineStyles, MenuDropdownsComponent, MenuDropdownsMobileComponent, Mode, NEW_LINE_MARKUP, NoderTranslateLoader, NumberingLevelModel, OperationModel, OperationsHistoryInfoModel, PageSetupComponent, PageType, ParagraphStyleModel, RevisionHelper, RevisionModel, SearchResultLocation, TextFormatMobileComponent, TextStyleModel, ToolbarActionsComponent };
|
|
19957
19404
|
//# sourceMappingURL=talrace-ngx-noder.mjs.map
|