devexpress-richedit 24.1.2-beta → 24.1.4-build-24183-0102

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.
Files changed (34) hide show
  1. package/bin/gulpfile.js +1 -1
  2. package/bin/index-custom.js +1 -1
  3. package/bin/localization-builder.js +1 -1
  4. package/bin/nspell-index.js +1 -1
  5. package/bin/nspell.webpack.config.js +1 -1
  6. package/bin/webpack-externals.js +1 -1
  7. package/bin/webpack.config.js +1 -1
  8. package/dist/dx.richedit.css +1 -1
  9. package/dist/dx.richedit.d.ts +1 -1
  10. package/dist/dx.richedit.js +277 -210
  11. package/dist/dx.richedit.min.js +2 -2
  12. package/index.d.ts +1 -1
  13. package/index.js +1 -1
  14. package/lib/client/client-rich-edit.js +2 -2
  15. package/lib/client/public/ribbon/creator.js +1 -0
  16. package/lib/client/public/ribbon/items/select-box.d.ts +2 -0
  17. package/lib/client/public/ribbon/items/select-box.js +7 -0
  18. package/lib/client/public/utils.d.ts +4 -0
  19. package/lib/client/public/utils.js +15 -0
  20. package/lib/client/ribbon/i-toolbar-item-options.d.ts +1 -0
  21. package/lib/common/canvas/canvas-manager.js +1 -1
  22. package/lib/common/formats/html/export/html-builder.js +8 -4
  23. package/lib/common/formats/html/export/html-export.d.ts +12 -0
  24. package/lib/common/formats/html/export/html-export.js +113 -99
  25. package/lib/common/formats/html/import/html-importer.js +21 -8
  26. package/lib/common/layout-formatter/floating/position-calculators/base-calculator.d.ts +1 -0
  27. package/lib/common/layout-formatter/floating/position-calculators/base-calculator.js +1 -0
  28. package/lib/common/layout-formatter/floating/position-calculators/vertical.js +6 -4
  29. package/lib/common/model/fonts/loader.js +11 -6
  30. package/lib/common/ui/ruler/controls/divisions.js +2 -1
  31. package/lib/common/ui/ruler/controls/indent/first-line.js +4 -3
  32. package/lib/common/ui/ruler/controls/indent/left.js +5 -4
  33. package/lib/common/ui/ruler/ruler.js +2 -1
  34. package/package.json +4 -4
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * DevExpress WebRichEdit (dx.richedit.js)
3
- * Version: 24.1.2
3
+ * Version: 24.1.4
4
4
  * Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED
5
5
  * License: https://www.devexpress.com/Support/EULAs
6
6
  */
@@ -30944,7 +30944,7 @@ function hexToBase64(hexStr) {
30944
30944
  return hexadecimal_converter_btoa(result.join(""));
30945
30945
  }
30946
30946
  function base64ToHex(base64Str) {
30947
- for (var i = 0, bin = atob(base64Str.replace(/[ \r\n]+$/, "")), hex = []; i < bin.length; ++i) {
30947
+ for (var i = 0, bin = hexadecimal_converter_atob(base64Str.replace(/[ \r\n]+$/, "")), hex = []; i < bin.length; ++i) {
30948
30948
  var tmp = bin.charCodeAt(i).toString(16);
30949
30949
  if (tmp.length === 1)
30950
30950
  tmp = "0" + tmp;
@@ -30967,7 +30967,7 @@ function hexadecimal_converter_btoa(bin) {
30967
30967
  }
30968
30968
  return base64.join("");
30969
30969
  }
30970
- function atob(base64) {
30970
+ function hexadecimal_converter_atob(base64) {
30971
30971
  if (/(=[^=]+|={3,})$/.test(base64))
30972
30972
  throw new Error("String contains an invalid character");
30973
30973
  base64 = base64.replace(/=/g, "");
@@ -69744,7 +69744,7 @@ class HtmlImporter {
69744
69744
  const missTag = HtmlImporter.MapMissTablePropertiesByTagNames[utils_list.ListUtils.last(this.levelInfo).tagImporter.elementTag()];
69745
69745
  utils_list.ListUtils.forEach(this.currElementChilds, (childElement) => {
69746
69746
  const childElemStyle = this.getStyles(childElement);
69747
- if (!childElemStyle)
69747
+ if (!Object.keys(childElemStyle).length)
69748
69748
  return;
69749
69749
  for (var prop in this.getStyles(element)) {
69750
69750
  if (missTag && /^(border|background|marginLeft)/gi.test(prop))
@@ -69756,13 +69756,24 @@ class HtmlImporter {
69756
69756
  });
69757
69757
  }
69758
69758
  getStyles(element) {
69759
- var _a, _b, _c;
69760
- return (_c = (_b = (_a = element.getAttribute) === null || _a === void 0 ? void 0 : _a.call(element, 'style')) === null || _b === void 0 ? void 0 : _b.split(';')) === null || _c === void 0 ? void 0 : _c.reduce((a, c) => {
69761
- if (c) {
69762
- const par = c.trim().split(':');
69763
- a[par[0].trim()] = par[1].trim();
69764
- }
69765
- return a;
69759
+ var _a;
69760
+ const styleStr = (_a = element.getAttribute) === null || _a === void 0 ? void 0 : _a.call(element, 'style');
69761
+ if (!styleStr)
69762
+ return {};
69763
+ const urlRegExp = new RegExp('url\\(.*?\\)', 'gi');
69764
+ const urlKey = '$URL';
69765
+ const urlValues = styleStr.match(urlRegExp);
69766
+ return styleStr
69767
+ .replace(urlRegExp, urlKey)
69768
+ .split(';')
69769
+ .reduceRight((res, style) => {
69770
+ if (!style)
69771
+ return res;
69772
+ const colonIndex = style.indexOf(':');
69773
+ const key = style.substring(0, colonIndex).trim();
69774
+ const value = style.substring(colonIndex + 1).trim();
69775
+ res[key] = value === urlKey ? urlValues.pop() : value;
69776
+ return res;
69766
69777
  }, {});
69767
69778
  }
69768
69779
  addRun(run, forceAdd = false) {
@@ -69832,6 +69843,8 @@ class HtmlImporter {
69832
69843
  html = html.replace(/<font[^>]*>([^<>]+)<\/font>/gi, '$1');
69833
69844
  html = html.replace(/<span\s*><span\s*>([^<>]+)<\/span><\/span>/ig, '$1');
69834
69845
  html = html.replace(/<span>([^<>]+)<\/span>/gi, '$1');
69846
+ html = html.replace(/\s*(<li[\S\s]*?>)\s*/gi, '$1');
69847
+ html = html.replace(/\s*(<\/li>)\s*/gi, '$1');
69835
69848
  html = html.replace(/<li([^>]*)>([^<>]+)<\/li>/gi, '<li$1><p>$2</p></li>');
69836
69849
  html = html.replace(/<li([^>]*)>(([^<>]*)<(?!p)[\s\S]*?)<\/li>/gi, '<li$1><p>$2</p></li>');
69837
69850
  html = html.replace(/<caption([^>]*)>[\s\S]*?<\/caption>/gi, '');
@@ -70167,11 +70180,15 @@ class HtmlBuilder {
70167
70180
  return this;
70168
70181
  }
70169
70182
  endChild(tagName) {
70170
- let currentElement = this._currentElement;
70171
- while (currentElement.tagName.toLowerCase() !== tagName.toLowerCase()) {
70172
- currentElement = currentElement.parentElement;
70183
+ try {
70184
+ let currentElement = this._currentElement;
70185
+ while (currentElement.tagName.toLowerCase() !== tagName.toLowerCase())
70186
+ currentElement = currentElement.parentElement;
70187
+ this._currentElement = currentElement.parentElement;
70188
+ }
70189
+ catch (e) {
70190
+ console.warn(`The element with the ${tagName} tag is not found.`);
70173
70191
  }
70174
- this._currentElement = currentElement.parentElement;
70175
70192
  return this;
70176
70193
  }
70177
70194
  addDefaultMarkup(content) {
@@ -70236,47 +70253,8 @@ class HtmlExporter {
70236
70253
  let remainLength = interval.length;
70237
70254
  let currentPosition = interval.start;
70238
70255
  let resultBuilder = new HtmlBuilder();
70239
- const paragraphsInInterval = subDocument.getParagraphsByInterval(interval);
70240
- const paragraphs = [];
70241
- for (let i = 0, paragraphInInterval; paragraphInInterval = paragraphsInInterval[i]; i++) {
70242
- if (interval.containsWithIntervalEnd(paragraphInInterval.getEndPosition()))
70243
- paragraphs.push(paragraphInInterval);
70244
- }
70245
- const listsInInterval = [];
70246
- for (let i = 0, paragraph; paragraph = paragraphs[i]; i++) {
70247
- if (paragraph.isInList()) {
70248
- const paragraphNumberingListIndex = paragraph.getNumberingListIndex();
70249
- const paragraphListLevelIndex = paragraph.getListLevelIndex();
70250
- const paragraphStart = paragraph.startLogPosition.value;
70251
- const paragraphEnd = paragraph.getEndPosition();
70252
- let existingItem = null;
70253
- for (let j = 0; j < listsInInterval.length; j++) {
70254
- if (listsInInterval[j].numberingListIndex == paragraphNumberingListIndex && listsInInterval[j].listLevelIndex == paragraphListLevelIndex)
70255
- existingItem = listsInInterval[j];
70256
- }
70257
- if (existingItem && (paragraphListLevelIndex == 0 || existingItem.end == paragraphStart
70258
- || listsInInterval[listsInInterval.length - 1].listLevelIndex > paragraphListLevelIndex)) {
70259
- existingItem.end = paragraphEnd;
70260
- }
70261
- else {
70262
- listsInInterval.push({
70263
- numberingListIndex: paragraphNumberingListIndex, listLevelIndex: paragraphListLevelIndex,
70264
- start: paragraphStart, end: paragraphEnd
70265
- });
70266
- }
70267
- let listLevelIndex = paragraphListLevelIndex;
70268
- while (listLevelIndex > 0) {
70269
- let parentItem = null;
70270
- for (let j = 0; j < listsInInterval.length; j++) {
70271
- if (listsInInterval[j].listLevelIndex == listLevelIndex - 1)
70272
- parentItem = listsInInterval[j];
70273
- }
70274
- if (parentItem)
70275
- parentItem.end = paragraphEnd;
70276
- listLevelIndex--;
70277
- }
70278
- }
70279
- }
70256
+ const paragraphs = this.getParagraphsByInterval(subDocument, interval);
70257
+ const lists = this.getListsByParagraphs(paragraphs);
70280
70258
  let isInsideFieldCode = false;
70281
70259
  let fieldDeep = 0;
70282
70260
  let isInsideHyperlink = false;
@@ -70286,53 +70264,6 @@ class HtmlExporter {
70286
70264
  while (iterator.moveNext()) {
70287
70265
  const tableCell = Table.getTableCellByPosition(subDocument.tables, iterator.currentInterval().start);
70288
70266
  const isContinueMergingCell = tableCell && tableCell.verticalMerging === TableCellMergingState.Continue;
70289
- let listToStartIndex = -1;
70290
- const listsToEndIndices = [];
70291
- if (!tableCell) {
70292
- if (listsInInterval.length) {
70293
- const currentPosition = iterator.currentInterval().start;
70294
- for (let i = 0; i < listsInInterval.length; i++) {
70295
- if (listsInInterval[i].start == currentPosition)
70296
- listToStartIndex = i;
70297
- if (listsInInterval[i].end == iterator.currentInterval().end)
70298
- listsToEndIndices.push(i);
70299
- }
70300
- if (listToStartIndex < 0 && currentPosition == interval.start) {
70301
- const firstParagraph = subDocument.getParagraphByPosition(currentPosition);
70302
- if (firstParagraph.getNumberingListIndex() == listsInInterval[0].numberingListIndex)
70303
- listToStartIndex = 0;
70304
- }
70305
- }
70306
- if (listToStartIndex > -1) {
70307
- const numberingList = model.numberingLists[listsInInterval[listToStartIndex].numberingListIndex];
70308
- let listFormatType = "";
70309
- switch (numberingList.levels[listsInInterval[listToStartIndex].listLevelIndex].getListLevelProperties().format) {
70310
- case NumberingFormat.Bullet:
70311
- listFormatType = "disc";
70312
- break;
70313
- case NumberingFormat.Decimal:
70314
- listFormatType = "decimal";
70315
- break;
70316
- case NumberingFormat.LowerLetter:
70317
- listFormatType = "lower-alpha";
70318
- break;
70319
- case NumberingFormat.UpperLetter:
70320
- listFormatType = "upper-alpha";
70321
- break;
70322
- case NumberingFormat.LowerRoman:
70323
- listFormatType = "lower-roman";
70324
- break;
70325
- case NumberingFormat.UpperRoman:
70326
- listFormatType = "upper-roman";
70327
- break;
70328
- default:
70329
- break;
70330
- }
70331
- resultBuilder
70332
- .startChild(numberingList.getListType() != numbering_list_NumberingType.Bullet ? "ol" : "ul")
70333
- .configure((e) => e.style.cssText = "list-style-type:" + listFormatType);
70334
- }
70335
- }
70336
70267
  const run = iterator.currentRun;
70337
70268
  const isRunInEmptyParagraph = run.paragraph.length === 1;
70338
70269
  if (paragraphs.length && (run.getType() != RunType.ParagraphRun || isRunInEmptyParagraph)) {
@@ -70403,6 +70334,7 @@ class HtmlExporter {
70403
70334
  });
70404
70335
  }
70405
70336
  }
70337
+ this.startList(model, subDocument, interval, resultBuilder, lists, iterator.currentInterval().start);
70406
70338
  if (!isContinueMergingCell) {
70407
70339
  const maskedParagraphProperties = currentParagraph.getParagraphMergedProperties();
70408
70340
  let paragraphStyle = "";
@@ -70483,17 +70415,15 @@ class HtmlExporter {
70483
70415
  paragraphStyle += HtmlConverter.getCssRules(charProps, charProps.textColor.toRgb(this.colorProvider), false, false, false)
70484
70416
  .join(";");
70485
70417
  }
70486
- if (currentParagraph.isInList() && !tableCell)
70418
+ if (currentParagraph.isInList())
70487
70419
  resultBuilder.startChild('li');
70488
70420
  resultBuilder
70489
70421
  .startChild('p')
70490
70422
  .configure((e) => {
70491
- if (paragraphStyle) {
70423
+ if (paragraphStyle)
70492
70424
  e.style.cssText = paragraphStyle;
70493
- }
70494
- if (isRunInEmptyParagraph) {
70425
+ if (isRunInEmptyParagraph)
70495
70426
  e.innerHTML = "&nbsp;";
70496
- }
70497
70427
  });
70498
70428
  }
70499
70429
  }
@@ -70505,6 +70435,10 @@ class HtmlExporter {
70505
70435
  case RunType.ParagraphRun:
70506
70436
  if (!isContinueMergingCell) {
70507
70437
  html.addCallback((builder) => builder.endChild('p'));
70438
+ if (run.paragraph.isInList()) {
70439
+ html.addCallback((builder) => builder.endChild('li'));
70440
+ html.addCallback((builder) => this.endList(model, builder, lists, iterator.currentInterval().end));
70441
+ }
70508
70442
  let paragraphEndPosition = run.paragraph.getEndPosition();
70509
70443
  if (tableCell) {
70510
70444
  let parentRow = tableCell.parentRow;
@@ -70682,10 +70616,6 @@ class HtmlExporter {
70682
70616
  }
70683
70617
  }
70684
70618
  resultBuilder.assignFrom(html);
70685
- if (listsToEndIndices.length) {
70686
- for (let i = listsToEndIndices.length - 1; i >= 0; i--)
70687
- resultBuilder.endChild(model.numberingLists[listsInInterval[listsToEndIndices[i]].numberingListIndex].getListType() != numbering_list_NumberingType.Bullet ? "ol" : "ul");
70688
- }
70689
70619
  currentPosition += length;
70690
70620
  remainLength -= length;
70691
70621
  }
@@ -70722,6 +70652,57 @@ class HtmlExporter {
70722
70652
  .endChild('span');
70723
70653
  return resultBuilder;
70724
70654
  }
70655
+ getParagraphsByInterval(subDocument, interval) {
70656
+ const paragraphsInInterval = subDocument.getParagraphsByInterval(interval);
70657
+ const paragraphs = [];
70658
+ for (let i = 0, paragraphInInterval; paragraphInInterval = paragraphsInInterval[i]; i++) {
70659
+ if (interval.containsWithIntervalEnd(paragraphInInterval.getEndPosition()))
70660
+ paragraphs.push(paragraphInInterval);
70661
+ }
70662
+ return paragraphs;
70663
+ }
70664
+ getListsByParagraphs(paragraphs) {
70665
+ const listsInInterval = [];
70666
+ for (let i = 0, paragraph; paragraph = paragraphs[i]; i++) {
70667
+ if (paragraph.isInList()) {
70668
+ const paragraphNumberingListIndex = paragraph.getNumberingListIndex();
70669
+ const paragraphListLevelIndex = paragraph.getListLevelIndex();
70670
+ const paragraphStart = paragraph.startLogPosition.value;
70671
+ const paragraphEnd = paragraph.getEndPosition();
70672
+ let existingItem = null;
70673
+ for (let j = 0; j < listsInInterval.length; j++) {
70674
+ if (listsInInterval[j].numberingListIndex === paragraphNumberingListIndex
70675
+ && listsInInterval[j].listLevelIndex === paragraphListLevelIndex) {
70676
+ existingItem = listsInInterval[j];
70677
+ }
70678
+ }
70679
+ if (existingItem && (paragraphListLevelIndex === 0 || existingItem.end == paragraphStart
70680
+ || listsInInterval[listsInInterval.length - 1].listLevelIndex > paragraphListLevelIndex)) {
70681
+ existingItem.end = paragraphEnd;
70682
+ }
70683
+ else {
70684
+ listsInInterval.push({
70685
+ numberingListIndex: paragraphNumberingListIndex,
70686
+ listLevelIndex: paragraphListLevelIndex,
70687
+ start: paragraphStart,
70688
+ end: paragraphEnd,
70689
+ });
70690
+ }
70691
+ let listLevelIndex = paragraphListLevelIndex;
70692
+ while (listLevelIndex > 0) {
70693
+ let parentItem = null;
70694
+ for (let j = 0; j < listsInInterval.length; j++) {
70695
+ if (listsInInterval[j].listLevelIndex == listLevelIndex - 1)
70696
+ parentItem = listsInInterval[j];
70697
+ }
70698
+ if (parentItem)
70699
+ parentItem.end = paragraphEnd;
70700
+ listLevelIndex--;
70701
+ }
70702
+ }
70703
+ }
70704
+ return listsInInterval;
70705
+ }
70725
70706
  addParentTableRecursively(model, builder, parentCell, paragraphStartPosition) {
70726
70707
  const parentRow = parentCell.parentRow;
70727
70708
  const parentTable = parentRow.parentTable;
@@ -70739,9 +70720,9 @@ class HtmlExporter {
70739
70720
  builder
70740
70721
  .startChild('td')
70741
70722
  .configure(el => {
70742
- el.style.cssText = "mso-cell-special:placeholder";
70723
+ el.style.cssText = 'mso-cell-special:placeholder';
70743
70724
  el.setAttribute('colspan', parentRow.gridBefore.toString());
70744
- el.innerHTML = "&nbsp;";
70725
+ el.innerHTML = '&nbsp;';
70745
70726
  })
70746
70727
  .endChild('td');
70747
70728
  }
@@ -70756,6 +70737,56 @@ class HtmlExporter {
70756
70737
  });
70757
70738
  }
70758
70739
  }
70740
+ startList(model, subDocument, interval, builder, lists, position) {
70741
+ if (!lists.length)
70742
+ return;
70743
+ let listIndex = lists.findIndex((list) => list.start === position);
70744
+ if (listIndex < 0 && position === interval.start) {
70745
+ const firstParagraph = subDocument.getParagraphByPosition(position);
70746
+ if (firstParagraph.getNumberingListIndex() === lists[0].numberingListIndex)
70747
+ listIndex = 0;
70748
+ }
70749
+ if (listIndex > -1) {
70750
+ const numberingList = model.numberingLists[lists[listIndex].numberingListIndex];
70751
+ const numberingListFormat = numberingList.levels[lists[listIndex].listLevelIndex].getListLevelProperties().format;
70752
+ const numberingListType = numberingList.getListType();
70753
+ let listFormatType = "";
70754
+ switch (numberingListFormat) {
70755
+ case NumberingFormat.Bullet:
70756
+ listFormatType = "disc";
70757
+ break;
70758
+ case NumberingFormat.Decimal:
70759
+ listFormatType = "decimal";
70760
+ break;
70761
+ case NumberingFormat.LowerLetter:
70762
+ listFormatType = "lower-alpha";
70763
+ break;
70764
+ case NumberingFormat.UpperLetter:
70765
+ listFormatType = "upper-alpha";
70766
+ break;
70767
+ case NumberingFormat.LowerRoman:
70768
+ listFormatType = "lower-roman";
70769
+ break;
70770
+ case NumberingFormat.UpperRoman:
70771
+ listFormatType = "upper-roman";
70772
+ break;
70773
+ default:
70774
+ break;
70775
+ }
70776
+ builder
70777
+ .startChild(numberingListType !== numbering_list_NumberingType.Bullet ? "ol" : "ul")
70778
+ .configure((e) => e.style.cssText = "list-style-type:" + listFormatType);
70779
+ }
70780
+ }
70781
+ endList(model, builder, lists, endPosition) {
70782
+ for (let i = lists.length - 1; i >= 0; i--) {
70783
+ if (lists[i].end === endPosition) {
70784
+ const listType = model.numberingLists[lists[i].numberingListIndex].getListType();
70785
+ lists.splice(i, 1);
70786
+ builder.endChild(listType != numbering_list_NumberingType.Bullet ? "ol" : "ul");
70787
+ }
70788
+ }
70789
+ }
70759
70790
  getHtmlText(text) {
70760
70791
  const result = new HtmlBuilder();
70761
70792
  for (let i = 0; i < text.length; i++) {
@@ -89382,15 +89413,20 @@ class ControlFontsLoader {
89382
89413
  };
89383
89414
  const xhr = new XMLHttpRequest();
89384
89415
  xhr.onload = (_e) => {
89385
- const fontSource = xhr.response;
89386
- if (xhr.status >= 400 || !fontSource) {
89387
- if (fontInfo.next())
89388
- this.makeRequest(fontInfo, afterLoading);
89416
+ const contentType = xhr.getResponseHeader("Content-Type");
89417
+ if (contentType != null && contentType.startsWith('font')) {
89418
+ const fontSource = xhr.response;
89419
+ if (xhr.status >= 400 || !fontSource) {
89420
+ if (fontInfo.next())
89421
+ this.makeRequest(fontInfo, afterLoading);
89422
+ else
89423
+ notLoaded();
89424
+ }
89389
89425
  else
89390
- notLoaded();
89426
+ afterLoading(fontSource);
89391
89427
  }
89392
89428
  else
89393
- afterLoading(fontSource);
89429
+ notLoaded();
89394
89430
  };
89395
89431
  xhr.onerror = () => notLoaded();
89396
89432
  xhr.open("GET", fontInfo.currentPath, true);
@@ -94328,6 +94364,7 @@ class AnchorObjectPositionCalculatorBase {
94328
94364
  this.obj = obj;
94329
94365
  this.isRelativeCell = !!this.manager.activeFormatter.tableFormatter &&
94330
94366
  (obj.anchorInfo.layoutTableCell || this.manager.model.compatibilitySettings.layoutInTableCell);
94367
+ this.isSimpleView = this.manager.innerClientProperties.viewsSettings.isSimpleView;
94331
94368
  }
94332
94369
  }
94333
94370
 
@@ -94538,13 +94575,15 @@ class AnchorObjectVerticalPositionCalculator extends AnchorObjectPositionCalcula
94538
94575
  switch (this.anchorInfo.verticalPositionType) {
94539
94576
  case AnchorObjectVerticalPositionType.Page:
94540
94577
  return this.isRelativeCell ? this.relativeColumnPos() + this.lp.row.tableCellInfo.y + this.topCellMargin : 0;
94541
- case AnchorObjectVerticalPositionType.Paragraph:
94542
- return this.relativeColumnPos() + this.getRowWhatStartParagraphY();
94543
94578
  case AnchorObjectVerticalPositionType.Line:
94544
94579
  return this.relativeColumnPos() + this.lp.row.y;
94545
94580
  case AnchorObjectVerticalPositionType.Margin:
94546
- return this.isRelativeCell ? this.relativeColumnPos() + this.lp.row.tableCellInfo.y + this.topCellMargin :
94547
- this.manager.boundsCalculator.marginTop;
94581
+ if (!this.isSimpleView) {
94582
+ return this.isRelativeCell ? this.relativeColumnPos() + this.lp.row.tableCellInfo.y + this.topCellMargin :
94583
+ this.manager.boundsCalculator.marginTop;
94584
+ }
94585
+ case AnchorObjectVerticalPositionType.Paragraph:
94586
+ return this.relativeColumnPos() + this.getRowWhatStartParagraphY();
94548
94587
  case AnchorObjectVerticalPositionType.TopMargin:
94549
94588
  case AnchorObjectVerticalPositionType.InsideMargin:
94550
94589
  return this.isRelativeCell ? this.relativeColumnPos() + this.lp.row.tableCellInfo.y + this.topCellMargin : 0;
@@ -109844,7 +109883,7 @@ class CanvasManager extends batch_updatable/* BatchUpdatableObject */.IS {
109844
109883
  dom.DomUtils.removeClassName(this.viewManager.canvas, CSSCLASS_FOCUSED);
109845
109884
  }
109846
109885
  getCanvasWidth() {
109847
- return SizeUtils.getOffsetWidth(this.viewManager.canvas.firstElementChild);
109886
+ return SizeUtils.getClientWidth(this.viewManager.canvas);
109848
109887
  }
109849
109888
  onCanvasMouseWheel(evt) {
109850
109889
  if (!this.viewManager.layout)
@@ -114615,6 +114654,7 @@ class RulerBase {
114615
114654
 
114616
114655
 
114617
114656
 
114657
+
114618
114658
  const MINOR_TOP_AND_BOTTOM_MARGIN = 4;
114619
114659
  const MAJOR_TOP_AND_BOTTOM_MARGIN = 2;
114620
114660
  const DIVISION_CONTAINER_CLASS_NAME = RULER_CLASS_NAME + "Divisions";
@@ -114631,7 +114671,7 @@ class RulerDivisionsControl extends RulerBase {
114631
114671
  this.controls.ruler.rootElement.appendChild(this.rootElement);
114632
114672
  if (browser.Browser.IE && browser.Browser.MajorVersion <= 9)
114633
114673
  this.rootElement.offsetParent;
114634
- this.height = this.rootElement.offsetHeight;
114674
+ this.height = SizeUtils.getOffsetHeight(this.rootElement);
114635
114675
  createDivisionElements(this.rootElement, unitCount, divisionInfo, this.height);
114636
114676
  this.initialLeft = -(unitCount * divisionInfo.unitSize - RULLER_NUMBER_CORRECTION);
114637
114677
  }
@@ -114881,6 +114921,7 @@ class RulerBaseIndentControl extends RulerBase {
114881
114921
 
114882
114922
 
114883
114923
 
114924
+
114884
114925
  class RulerFirstLineIndentDragHandle extends RulerBaseIndentControl {
114885
114926
  constructor(modelData, controls) {
114886
114927
  super(modelData, controls);
@@ -114890,8 +114931,8 @@ class RulerFirstLineIndentDragHandle extends RulerBaseIndentControl {
114890
114931
  this.rootElement.title = this.modelData.settings.titles.firstLineIndent;
114891
114932
  this.controls.ruler.rootElement.appendChild(this.rootElement);
114892
114933
  this.adjustByTop();
114893
- this.leftCorrection = Math.round(this.rootElement.offsetWidth / 2);
114894
- this._heightOfProtrudingPart = this.rootElement.offsetHeight - this.controls.divisions.height / 2;
114934
+ this.leftCorrection = Math.round(SizeUtils.getOffsetWidth(this.rootElement) / 2);
114935
+ this._heightOfProtrudingPart = SizeUtils.getOffsetHeight(this.rootElement) - this.controls.divisions.height / 2;
114895
114936
  }
114896
114937
  get heightOfProtrudingPart() { return this.modelData.settings.showLeftIndent ? this._heightOfProtrudingPart : 0; }
114897
114938
  getRootClassName() {
@@ -114899,7 +114940,7 @@ class RulerFirstLineIndentDragHandle extends RulerBaseIndentControl {
114899
114940
  this.modelData.settings.styles.firstLineIndent.className;
114900
114941
  }
114901
114942
  adjustByTop() {
114902
- const mainElementHeight = this.rootElement.offsetHeight;
114943
+ const mainElementHeight = SizeUtils.getOffsetHeight(this.rootElement);
114903
114944
  const divisionsControlHeight = this.controls.divisions.height;
114904
114945
  this.rootElement.style.marginTop = (mainElementHeight - divisionsControlHeight) / 2 + "px";
114905
114946
  }
@@ -114941,6 +114982,7 @@ class RulerFirstLineIndentDragHandle extends RulerBaseIndentControl {
114941
114982
 
114942
114983
 
114943
114984
 
114985
+
114944
114986
  const LEFT_INDENT_DRAG_HANDLE_BODY = RICH_EDIT_CLASS_NAME_PREFIX + "leftIndentDragHandleBody";
114945
114987
  class RulerLeftIndentDragHandle extends RulerBaseIndentControl {
114946
114988
  constructor(modelData, controls) {
@@ -114961,18 +115003,18 @@ class RulerLeftIndentDragHandle extends RulerBaseIndentControl {
114961
115003
  const mainElementWidth = this.topElement.offsetWidth;
114962
115004
  this.bodyElement.style.width = mainElementWidth + "px";
114963
115005
  const style = this.rootElement.style;
114964
- style.height = this.topElement.offsetHeight + this.bodyElement.offsetHeight + "px";
115006
+ style.height = SizeUtils.getOffsetHeight(this.topElement) + SizeUtils.getOffsetHeight(this.bodyElement) + "px";
114965
115007
  style.width = mainElementWidth + "px";
114966
115008
  style.marginTop = this.controls.divisions.height / 2 + "px";
114967
115009
  this.bodyElement.title = this.modelData.settings.titles.leftIndent;
114968
115010
  this.topElement.title = this.modelData.settings.titles.hangingIndent;
114969
- this.leftCorrection = Math.round(this.rootElement.offsetWidth / 2);
114970
- this._heightOfProtrudingPart = this.rootElement.offsetHeight - this.controls.divisions.height / 2;
115011
+ this.leftCorrection = Math.round(SizeUtils.getOffsetWidth(this.rootElement) / 2);
115012
+ this._heightOfProtrudingPart = SizeUtils.getOffsetHeight(this.rootElement) - this.controls.divisions.height / 2;
114971
115013
  }
114972
115014
  get heightOfProtrudingPart() { return this.modelData.settings.showLeftIndent ? this._heightOfProtrudingPart : 0; }
114973
115015
  getRootClassName() { return this.modelData.settings.styles.leftIndent.className; }
114974
115016
  adjustByTop() {
114975
- const mainElementHeight = this.rootElement.offsetHeight;
115017
+ const mainElementHeight = SizeUtils.getOffsetHeight(this.rootElement);
114976
115018
  const divisionsControlHeight = this.controls.divisions.height;
114977
115019
  this.rootElement.style.marginTop = (mainElementHeight - divisionsControlHeight) / 2 + "px";
114978
115020
  }
@@ -116807,6 +116849,7 @@ class RulerModelData {
116807
116849
 
116808
116850
 
116809
116851
 
116852
+
116810
116853
  var HorizontalRulerEventType;
116811
116854
  (function (HorizontalRulerEventType) {
116812
116855
  HorizontalRulerEventType[HorizontalRulerEventType["None"] = 0] = "None";
@@ -116993,7 +117036,7 @@ class HorizontalRulerControl extends batch_updatable/* BatchUpdatableObject */.I
116993
117036
  return this._visible;
116994
117037
  }
116995
117038
  getHeight() {
116996
- return this.initialized ? this.controls.wrapper.rootElement.offsetHeight : 0;
117039
+ return this.initialized ? SizeUtils.getOffsetHeight(this.controls.wrapper.rootElement) : 0;
116997
117040
  }
116998
117041
  onViewTypeChanged() {
116999
117042
  this.innerSetVisible(this._visible && !this.modelData.innerClientProperties.viewsSettings.isSimpleView);
@@ -123925,10 +123968,100 @@ class RibbonNumberBoxItem extends RibbonItemBase {
123925
123968
  }
123926
123969
  }
123927
123970
 
123971
+ ;// CONCATENATED MODULE: ./src/client/public/utils.ts
123972
+
123973
+
123974
+
123975
+
123976
+
123977
+
123978
+
123979
+
123980
+
123981
+ class FilePathInfo {
123982
+ constructor(filePath) {
123983
+ this.path = filePath.replace(/\\/g, '/');
123984
+ this.documentFormat = Utils.getDocumentFormat(this.path);
123985
+ this.extension = this.documentFormat === null ? '' : Utils.documentFormatToExtension(this.documentFormat);
123986
+ const index = this.path.lastIndexOf('/');
123987
+ if (index >= 0) {
123988
+ this.directoryPath = this.path.substring(0, index);
123989
+ this.name = this.path.substring(index + 1);
123990
+ }
123991
+ else {
123992
+ this.directoryPath = "";
123993
+ this.name = this.path;
123994
+ }
123995
+ this.nameWithoutExtension = this.name.substring(0, this.name.length - this.extension.length);
123996
+ }
123997
+ }
123998
+ class Utils {
123999
+ static download(content, fileName) {
124000
+ utils_file.FileUtils.startDownloadFileLocal(content, fileName);
124001
+ }
124002
+ static parseFilePath(filePath) {
124003
+ return new FilePathInfo(filePath);
124004
+ }
124005
+ static documentFormatToExtension(documentFormat) {
124006
+ return FileNameHelper.convertToString(documentFormat);
124007
+ }
124008
+ static getDocumentFormat(filePath) {
124009
+ const pointIndex = filePath.lastIndexOf('.');
124010
+ const extenion = pointIndex >= 0 ? filePath.substr(pointIndex) : filePath;
124011
+ const coreDocFormat = FileNameHelper.convertExtensionToDocumentFormat(extenion);
124012
+ return coreDocFormat === DocumentFormat.Undefined ? null : coreDocFormat;
124013
+ }
124014
+ static convertArrayBufferToBase64(content) {
124015
+ return utils_base64.Base64Utils.fromArrayBuffer(content);
124016
+ }
124017
+ static convertBlobToBase64(content, callback) {
124018
+ utils_base64.Base64Utils.fromBlobAsDataUrl(content, callback);
124019
+ }
124020
+ static convertToBlob(content, options) {
124021
+ return (0,common.isString)(content) ?
124022
+ new Blob([utils_base64.Base64Utils.getUint8Array(content)], options) :
124023
+ new Blob([content], options);
124024
+ }
124025
+ static convertToFile(content, fileName = '', options) {
124026
+ return (0,common.isString)(content) ?
124027
+ utils_base64.Base64Utils.getFileFromBase64(utils_base64.Base64Utils.deleteDataUrlPrefix(content), fileName, options) :
124028
+ utils_file.FileUtils.createFile([content], fileName, options);
124029
+ }
124030
+ static convertBase64ToArrayBuffer(content) {
124031
+ return utils_base64.Base64Utils.getUint8Array(content);
124032
+ }
124033
+ static convertBlobToArrayBuffer(content, callback) {
124034
+ const reader = new FileReader();
124035
+ reader.onloadend = () => callback(reader.result);
124036
+ reader.readAsArrayBuffer(content);
124037
+ }
124038
+ static getIntervalComplement(bound, intervals) {
124039
+ const apiIntervals = utils_list.ListUtils.map(intervals, curr => convertFromIntervalApi(curr));
124040
+ const coreResult = algorithms.IntervalAlgorithms.reflectIntervalsTemplate(apiIntervals, convertFromIntervalApi(bound), new fixed.FixedInterval(0, 0));
124041
+ return utils_list.ListUtils.map(coreResult, curr => convertToIntervalApi(curr));
124042
+ }
124043
+ }
124044
+ class TypeConverterFactory {
124045
+ static create(valueType) {
124046
+ const converter = this.createCore(valueType);
124047
+ return converter ? text => { var _a; return (_a = converter(text)) !== null && _a !== void 0 ? _a : text; } : null;
124048
+ }
124049
+ static createCore(valueType) {
124050
+ const strType = valueType.toLowerCase();
124051
+ switch (strType) {
124052
+ case 'number':
124053
+ return text => parseFloat(text);
124054
+ default:
124055
+ return null;
124056
+ }
124057
+ }
124058
+ }
124059
+
123928
124060
  ;// CONCATENATED MODULE: ./src/client/public/ribbon/items/select-box.ts
123929
124061
 
123930
124062
 
123931
124063
 
124064
+
123932
124065
  class RibbonSelectBoxItem extends RibbonItemBase {
123933
124066
  constructor(id, dataSource, options = {}) {
123934
124067
  var _a;
@@ -123939,12 +124072,18 @@ class RibbonSelectBoxItem extends RibbonItemBase {
123939
124072
  this.displayExpr = options.displayExpr;
123940
124073
  this.valueExpr = options.valueExpr;
123941
124074
  this.value = options.value;
124075
+ this.valueType = options.valueType;
123942
124076
  this._localizeDataSourceItems = options._localizeDataSourceItems === undefined ? false : options._localizeDataSourceItems;
123943
124077
  this.textOptions = (_a = options.textOptions) !== null && _a !== void 0 ? _a : {};
123944
124078
  this.showClearButton = options.showClearButton === undefined ? false : options.showClearButton;
123945
124079
  this.placeholder = options.placeholder;
123946
124080
  this.acceptCustomValue = (0,common.isDefined)(options.acceptCustomValue) ? options.acceptCustomValue : false;
123947
124081
  this.onCustomItemCreating = options.onCustomItemCreating ? (0,utils/* convertToFunction */.tm)(options.onCustomItemCreating) : undefined;
124082
+ if (!this.onCustomItemCreating && this.valueType) {
124083
+ const converter = TypeConverterFactory.create(this.valueType);
124084
+ if (converter)
124085
+ this.onCustomItemCreating = (e) => e.customItem = { text: e.text, value: converter(e.text) };
124086
+ }
123948
124087
  }
123949
124088
  }
123950
124089
 
@@ -124092,6 +124231,7 @@ function createItems(rawItems) {
124092
124231
  displayExpr: rawItem.displayExpr,
124093
124232
  valueExpr: rawItem.valueExpr,
124094
124233
  value: rawItem.value,
124234
+ valueType: rawItem.valueType,
124095
124235
  showClearButton: rawItem.showClearButton,
124096
124236
  placeholder: rawItem.placeholder,
124097
124237
  acceptCustomValue: rawItem.acceptCustomValue,
@@ -143435,6 +143575,7 @@ class FullScreenHelper {
143435
143575
 
143436
143576
  ;// CONCATENATED MODULE: external "DevExpress.config"
143437
143577
  var external_DevExpress_config_namespaceObject = DevExpress.config;
143578
+ var external_DevExpress_config_default = /*#__PURE__*/__webpack_require__.n(external_DevExpress_config_namespaceObject);
143438
143579
  ;// CONCATENATED MODULE: ./src/client/client-rich-edit.ts
143439
143580
 
143440
143581
 
@@ -143491,8 +143632,8 @@ class ClientRichEdit {
143491
143632
  this.rawDataSource = settings.rawDataSource;
143492
143633
  this.contextMenuSettings = settings.contextMenuSettings;
143493
143634
  this.fullScreenHelper = new FullScreenHelper(element);
143494
- if (false)
143495
- {}
143635
+ if (true)
143636
+ external_DevExpress_config_default()(JSON.parse(atob('eyJsaWNlbnNlS2V5IjoiZXdvZ0lDSm1iM0p0WVhRaU9pQXhMQW9nSUNKcGJuUmxjbTVoYkZWellXZGxTV1FpT2lBaWFUbHhVemQxYzBSQ01HVlpTbDlrVGkxb2FYaGtVU0lLZlE9PS5INTlJcG94ZC90cWdVcE1leVdhamhubjl2NnFtMkFrQmc2MW0yU05ZUHIreFBrdnRLUm04Wm4rU08rUVQ3NEt3MVpWQ0pGeEJYV1dJRlNyRG1EZlVqYmV6N2RzTnpJbTR6S1A5M2l4amVQR0Jnb2o4eG9VSmZvNldmZzNMblpTUlNLcHFpZz09In0=')));
143496
143637
  this.prepareElement(element, settings);
143497
143638
  this.initDefaultFontsAndStyles();
143498
143639
  this.initBars(settings.ribbon, settings.fonts);
@@ -145771,80 +145912,6 @@ function addAttribute(element, name, value) {
145771
145912
  element.setAttribute(name, value);
145772
145913
  }
145773
145914
 
145774
- ;// CONCATENATED MODULE: ./src/client/public/utils.ts
145775
-
145776
-
145777
-
145778
-
145779
-
145780
-
145781
-
145782
-
145783
-
145784
- class FilePathInfo {
145785
- constructor(filePath) {
145786
- this.path = filePath.replace(/\\/g, '/');
145787
- this.documentFormat = Utils.getDocumentFormat(this.path);
145788
- this.extension = this.documentFormat === null ? '' : Utils.documentFormatToExtension(this.documentFormat);
145789
- const index = this.path.lastIndexOf('/');
145790
- if (index >= 0) {
145791
- this.directoryPath = this.path.substring(0, index);
145792
- this.name = this.path.substring(index + 1);
145793
- }
145794
- else {
145795
- this.directoryPath = "";
145796
- this.name = this.path;
145797
- }
145798
- this.nameWithoutExtension = this.name.substring(0, this.name.length - this.extension.length);
145799
- }
145800
- }
145801
- class Utils {
145802
- static download(content, fileName) {
145803
- utils_file.FileUtils.startDownloadFileLocal(content, fileName);
145804
- }
145805
- static parseFilePath(filePath) {
145806
- return new FilePathInfo(filePath);
145807
- }
145808
- static documentFormatToExtension(documentFormat) {
145809
- return FileNameHelper.convertToString(documentFormat);
145810
- }
145811
- static getDocumentFormat(filePath) {
145812
- const pointIndex = filePath.lastIndexOf('.');
145813
- const extenion = pointIndex >= 0 ? filePath.substr(pointIndex) : filePath;
145814
- const coreDocFormat = FileNameHelper.convertExtensionToDocumentFormat(extenion);
145815
- return coreDocFormat === DocumentFormat.Undefined ? null : coreDocFormat;
145816
- }
145817
- static convertArrayBufferToBase64(content) {
145818
- return utils_base64.Base64Utils.fromArrayBuffer(content);
145819
- }
145820
- static convertBlobToBase64(content, callback) {
145821
- utils_base64.Base64Utils.fromBlobAsDataUrl(content, callback);
145822
- }
145823
- static convertToBlob(content, options) {
145824
- return (0,common.isString)(content) ?
145825
- new Blob([utils_base64.Base64Utils.getUint8Array(content)], options) :
145826
- new Blob([content], options);
145827
- }
145828
- static convertToFile(content, fileName = '', options) {
145829
- return (0,common.isString)(content) ?
145830
- utils_base64.Base64Utils.getFileFromBase64(utils_base64.Base64Utils.deleteDataUrlPrefix(content), fileName, options) :
145831
- utils_file.FileUtils.createFile([content], fileName, options);
145832
- }
145833
- static convertBase64ToArrayBuffer(content) {
145834
- return utils_base64.Base64Utils.getUint8Array(content);
145835
- }
145836
- static convertBlobToArrayBuffer(content, callback) {
145837
- const reader = new FileReader();
145838
- reader.onloadend = () => callback(reader.result);
145839
- reader.readAsArrayBuffer(content);
145840
- }
145841
- static getIntervalComplement(bound, intervals) {
145842
- const apiIntervals = utils_list.ListUtils.map(intervals, curr => convertFromIntervalApi(curr));
145843
- const coreResult = algorithms.IntervalAlgorithms.reflectIntervalsTemplate(apiIntervals, convertFromIntervalApi(bound), new fixed.FixedInterval(0, 0));
145844
- return utils_list.ListUtils.map(coreResult, curr => convertToIntervalApi(curr));
145845
- }
145846
- }
145847
-
145848
145915
  ;// CONCATENATED MODULE: external "DevExpress.trial"
145849
145916
  var external_DevExpress_trial_namespaceObject = DevExpress.trial;
145850
145917
  var external_DevExpress_trial_default = /*#__PURE__*/__webpack_require__.n(external_DevExpress_trial_namespaceObject);