@talrace/ngx-noder 0.0.11 → 0.0.13

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 (80) hide show
  1. package/README.md +374 -71
  2. package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +1 -1
  3. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +2 -2
  4. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +2 -5
  5. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +3 -3
  6. package/esm2022/lib/editor/components/edges/edge-element.model.mjs +30 -1
  7. package/esm2022/lib/editor/components/edges/edge.component.mjs +23 -23
  8. package/esm2022/lib/editor/components/edges/edges.mjs +30 -15
  9. package/esm2022/lib/editor/components/image/components/image.component.mjs +2 -2
  10. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +2 -2
  11. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +5 -3
  12. package/esm2022/lib/editor/components/table/components/table.component.mjs +7 -5
  13. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +12 -5
  14. package/esm2022/lib/editor/content/display-data/display-data.mjs +4 -4
  15. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +1 -1
  16. package/esm2022/lib/editor/content/helpers/link.helper.mjs +39 -3
  17. package/esm2022/lib/editor/display/layers/text.layer.mjs +100 -75
  18. package/esm2022/lib/editor/display/print/print.helper.mjs +3 -3
  19. package/esm2022/lib/editor/display/print/print.renderer.mjs +5 -5
  20. package/esm2022/lib/editor/display/renderer.mjs +23 -25
  21. package/esm2022/lib/editor/display/virtual.renderer.mjs +10 -43
  22. package/esm2022/lib/editor/execution/edit.session.mjs +26 -16
  23. package/esm2022/lib/editor/execution/editor.mjs +88 -127
  24. package/esm2022/lib/editor/execution/regulator.service.mjs +44 -39
  25. package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +2 -3
  26. package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +2 -3
  27. package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +2 -2
  28. package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +1 -1
  29. package/esm2022/lib/editor/gadgets/history/operation-history.mjs +39 -37
  30. package/esm2022/lib/editor/interaction/editor.service.mjs +22 -22
  31. package/esm2022/lib/editor/interaction/mouse.handler.mjs +2 -2
  32. package/esm2022/lib/editor/operations/helpers/content-operations.helper.mjs +4 -4
  33. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +2 -2
  34. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +59 -7
  35. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +24 -25
  36. package/esm2022/lib/editor/operations/save-commands.helper.mjs +6 -5
  37. package/esm2022/lib/editor/positioning/content.helper.mjs +10 -1
  38. package/esm2022/lib/editor/positioning/position.helper.mjs +49 -35
  39. package/esm2022/lib/editor/revision.helper.mjs +3 -1
  40. package/esm2022/lib/models/generated/delete.model.mjs +1 -1
  41. package/esm2022/lib/models/generated/link-data.model.mjs +1 -1
  42. package/esm2022/lib/models/generated/link.model.mjs +1 -1
  43. package/esm2022/lib/models/generated/restore-text-styles.model.mjs +1 -1
  44. package/esm2022/lib/models/generated/target.model.mjs +1 -1
  45. package/fesm2022/talrace-ngx-noder.mjs +672 -545
  46. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  47. package/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.d.ts +1 -3
  48. package/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.d.ts +1 -1
  49. package/lib/editor/components/edges/edge-element.model.d.ts +9 -1
  50. package/lib/editor/components/edges/edge.component.d.ts +4 -4
  51. package/lib/editor/components/edges/edges.d.ts +8 -2
  52. package/lib/editor/components/table/components/table.component.d.ts +4 -2
  53. package/lib/editor/components/table/selection/table-selection.d.ts +5 -2
  54. package/lib/editor/content/display-data/display-data.d.ts +2 -1
  55. package/lib/editor/content/helpers/content-style.helper.d.ts +1 -1
  56. package/lib/editor/content/helpers/link.helper.d.ts +4 -1
  57. package/lib/editor/display/layers/text.layer.d.ts +8 -10
  58. package/lib/editor/display/print/print.helper.d.ts +1 -2
  59. package/lib/editor/display/print/print.renderer.d.ts +1 -2
  60. package/lib/editor/display/renderer.d.ts +9 -9
  61. package/lib/editor/display/virtual.renderer.d.ts +3 -10
  62. package/lib/editor/execution/edit.session.d.ts +7 -2
  63. package/lib/editor/execution/editor.d.ts +10 -9
  64. package/lib/editor/execution/regulator.service.d.ts +6 -4
  65. package/lib/editor/execution/targeting/cell-session-source.model.d.ts +0 -1
  66. package/lib/editor/execution/targeting/edge-session-source.model.d.ts +0 -1
  67. package/lib/editor/execution/targeting/session-source.model.d.ts +0 -1
  68. package/lib/editor/gadgets/history/operation-history.d.ts +7 -3
  69. package/lib/editor/interaction/editor.service.d.ts +13 -12
  70. package/lib/editor/operations/helpers/content-operations.helper.d.ts +1 -1
  71. package/lib/editor/operations/helpers/link-operations.helper.d.ts +7 -2
  72. package/lib/editor/operations/operations-helper.helper.d.ts +3 -3
  73. package/lib/editor/operations/save-commands.helper.d.ts +1 -1
  74. package/lib/editor/positioning/content.helper.d.ts +2 -0
  75. package/lib/editor/positioning/position.helper.d.ts +21 -6
  76. package/lib/models/generated/delete.model.d.ts +1 -1
  77. package/lib/models/generated/restore-text-styles.model.d.ts +1 -0
  78. package/lib/models/generated/target.model.d.ts +0 -1
  79. package/package.json +1 -1
  80. package/src/scss/base-editor.scss +4 -0
@@ -64,7 +64,7 @@ export class FormatOperationsHelper {
64
64
  firstIndex++;
65
65
  }
66
66
  let lastIndex = firstIndex;
67
- while (formats[lastIndex].endIndex < endIndex) {
67
+ while (lastIndex < formats.length - 1 && formats[lastIndex].endIndex < endIndex) {
68
68
  lastIndex++;
69
69
  }
70
70
  if (formats[lastIndex].endIndex > endIndex) {
@@ -82,4 +82,4 @@ export class FormatOperationsHelper {
82
82
  FormatStyleHelper.mergeFormats(formats, startIndex - 1, endIndex + 1);
83
83
  }
84
84
  }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LW9wZXJhdGlvbnMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL29wZXJhdGlvbnMvaGVscGVycy9mb3JtYXQtb3BlcmF0aW9ucy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUU1RSxNQUFNLE9BQU8sc0JBQXNCO0lBQy9CLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBc0IsRUFBRSxVQUFrQixFQUFFLFFBQWdCO1FBQzdFLE1BQU0sTUFBTSxHQUFHLFFBQVEsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxFQUFFO2dCQUN4RSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN4QjtTQUNKO1FBRUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksUUFBUSxFQUFFO2dCQUN4RCxDQUFDLENBQUMsVUFBVSxHQUFH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LE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM1RjtRQUNELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudFN0eWxlSGVscGVyIH0gZnJvbSAnLi4vLi4vY29udGVudC9oZWxwZXJzL2NvbnRlbnQtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IEZvcm1hdE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9mb3JtYXQubW9kZWwnO1xuaW1wb3J0IHsgRm9ybWF0U3R5bGVIZWxwZXIgfSBmcm9tICcuLi8uLi9leGVjdXRpb24vaGVscGVycy9mb3JtYXQtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE9wZXJhdGlvbnNIZWxwZXIge1xuICAgIHN0YXRpYyByZW1vdmVDb250ZW50KGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gZm9ybWF0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdHNbaV0uc3RhcnRJbmRleCA+PSBzdGFydEluZGV4ICYmIGZvcm1hdHNbaV0uZW5kSW5kZXggPD0gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdHMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh4LnN0YXJ0SW5kZXggPj0gc3RhcnRJbmRleCAmJiB4LnN0YXJ0SW5kZXggPD0gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB4LnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4LnN0YXJ0SW5kZXggPiBlbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIHguc3RhcnRJbmRleCAtPSBsZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeC5lbmRJbmRleCA+PSBzdGFydEluZGV4ICYmIHguZW5kSW5kZXggPD0gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB4LmVuZEluZGV4ID0gc3RhcnRJbmRleCAtIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHguZW5kSW5kZXggPiBlbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIHguZW5kSW5kZXggLT0gbGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBGb3JtYXRTdHlsZUhlbHBlci5tZXJnZUZvcm1hdHMoZm9ybWF0cywgc3RhcnRJbmRleCAtIDEsIHN0YXJ0SW5kZXgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnRDb250ZW50KGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIGluZGV4OiBudW1iZXIsIHRleHRMZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBmb3JtYXRzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBpZiAoeC5zdGFydEluZGV4ID4gaW5kZXggfHwgKHguc3RhcnRJbmRleCA9PT0gaW5kZXggJiYgaW5kZXggIT09IDApKSB7XG4gICAgICAgICAgICAgICAgeC5zdGFydEluZGV4ICs9IHRleHRMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeC5lbmRJbmRleCA+PSBpbmRleCAtIDEpIHtcbiAgICAgICAgICAgICAgICB4LmVuZEluZGV4ICs9IHRleHRMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnRTdHlsZWRDb250ZW50KGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIGluZGV4OiBudW1iZXIsIHRleHRMZW5ndGg6IG51bWJlciwgc3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29udGVudChmb3JtYXRzLCBpbmRleCwgdGV4dExlbmd0aCk7XG4gICAgICAgIHRoaXMuYXBwbHkoZm9ybWF0cywgaW5kZXgsIGluZGV4ICsgdGV4dExlbmd0aCAtIDEsIHN0eWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVzdG9yZShmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBpbmRleDogbnVtYmVyLCB0ZXh0TGVuZ3RoOiBudW1iZXIsIHRleHRGb3JtYXRzOiBGb3JtYXRNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29udGVudChmb3JtYXRzLCBpbmRleCwgdGV4dExlbmd0aCk7XG4gICAgICAgIHRoaXMucmVzdG9yZUZvcm1hdHMoZm9ybWF0cywgdGV4dEZvcm1hdHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyByZXBsYWNlQ29udGVudChmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHRleHRMZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUNvbnRlbnQoZm9ybWF0cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmluc2VydENvbnRlbnQoZm9ybWF0cywgc3RhcnRJbmRleCwgdGV4dExlbmd0aCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlc3RvcmVGb3JtYXRzKGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIHRleHRGb3JtYXRzOiBGb3JtYXRNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRleHRGb3JtYXRzLmZvckVhY2goeCA9PiB0aGlzLmFwcGx5KGZvcm1hdHMsIHguc3RhcnRJbmRleCwgeC5lbmRJbmRleCwgeC50ZXh0U3R5bGUpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXBwbHkoZm9ybWF0czogRm9ybWF0TW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbGV0IGZpcnN0SW5kZXggPSBmb3JtYXRzLmZpbmRJbmRleCh4ID0+IHguZW5kSW5kZXggPj0gc3RhcnRJbmRleCk7XG4gICAgICAgIGlmIChmb3JtYXRzW2ZpcnN0SW5kZXhdLnN0YXJ0SW5kZXggPCBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBGb3JtYXRNb2RlbCh7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogZm9ybWF0c1tmaXJzdEluZGV4XS5zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGVuZEluZGV4OiBzdGFydEluZGV4IC0gMSxcbiAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IG5ldyBUZXh0U3R5bGVNb2RlbChmb3JtYXRzW2ZpcnN0SW5kZXhdLnRleHRTdHlsZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybWF0c1tmaXJzdEluZGV4XS5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGZvcm1hdHMuc3BsaWNlKGZpcnN0SW5kZXgsIDAsIG1vZGVsKTtcbiAgICAgICAgICAgIGZpcnN0SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICAgICAgd2hpbGUgKGZvcm1hdHNbbGFzdEluZGV4XS5lbmRJbmRleCA8IGVuZEluZGV4KSB7XG4gICAgICAgICAgICBsYXN0SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0c1tsYXN0SW5kZXhdLmVuZEluZGV4ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IEZvcm1hdE1vZGVsKHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiBlbmRJbmRleCArIDEsXG4gICAgICAgICAgICAgICAgZW5kSW5kZXg6IGZvcm1hdHNbbGFzdEluZGV4XS5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IG5ldyBUZXh0U3R5bGVNb2RlbChmb3JtYXRzW2xhc3RJbmRleF0udGV4dFN0eWxlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtYXRzW2xhc3RJbmRleF0uZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgICAgIGZvcm1hdHMuc3BsaWNlKGxhc3RJbmRleCArIDEsIDAsIG1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gZmlyc3RJbmRleDsgaSA8PSBsYXN0SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgZm9ybWF0c1tpXS50ZXh0U3R5bGUgPSBDb250ZW50U3R5bGVIZWxwZXIuY29tYmluZVRleHRTdHlsZXMoc3R5bGUsIGZvcm1hdHNbaV0udGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgICAgICBGb3JtYXRTdHlsZUhlbHBlci5tZXJnZUZvcm1hdHMoZm9ybWF0cywgc3RhcnRJbmRleCAtIDEsIGVuZEluZGV4ICsgMSk7XG4gICAgfVxufVxuIl19
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LW9wZXJhdGlvbnMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL29wZXJhdGlvbnMvaGVscGVycy9mb3JtYXQtb3BlcmF0aW9ucy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUU1RSxNQUFNLE9BQU8sc0JBQXNCO0lBQy9CLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBc0IsRUFBRSxVQUFrQixFQUFFLFFBQWdCO1FBQzdFLE1BQU0sTUFBTSxHQUFHLFFBQVEsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxFQUFFO2dCQUN4RSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN4QjtTQUNKO1FBRUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksUUFBUSxFQUFFO2dCQUN4RCxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQzthQUM3QjtpQkFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsUUFBUSxFQUFFO2dCQUNoQyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUU7Z0JBQ3BELENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUMvQjtpQkFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxFQUFFO2dCQUM5QixDQUFDLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQzthQUN4QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsaUJBQWlCLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQXNCLEVBQUUsS0FBYSxFQUFFLFVBQWtCO1FBQzFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDakUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUM7YUFDOUI7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDekIsQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUM7YUFDNUI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBc0IsRUFBRSxLQUFhLEVBQUUsVUFBa0IsRUFBRSxLQUFxQjtRQUN2RyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQXNCLEVBQUUsS0FBYSxFQUFFLFVBQWtCLEVBQUUsV0FBMEI7UUFDaEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQXNCLEVBQUUsVUFBa0IsRUFBRSxRQUFnQixFQUFFLFVBQWtCO1FBQ2xHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBc0IsRUFBRSxXQUEwQjtRQUNwRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQXNCLEVBQUUsVUFBa0IsRUFBRSxRQUFnQixFQUFFLEtBQXFCO1FBQzVGLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLEVBQUU7WUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUM7Z0JBQzFCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVTtnQkFDMUMsUUFBUSxFQUFFLFVBQVUsR0FBRyxDQUFDO2dCQUN4QixTQUFTLEVBQUUsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUMvRCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUM1QyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckMsVUFBVSxFQUFFLENBQUM7U0FDaEI7UUFDRCxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUM7UUFDM0IsT0FBTyxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUU7WUFDN0UsU0FBUyxFQUFFLENBQUM7U0FDZjtRQUNELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUU7WUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUM7Z0JBQzFCLFVBQVUsRUFBRSxRQUFRLEdBQUcsQ0FBQztnQkFDeEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRO2dCQUNyQyxTQUFTLEVBQUUsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUM5RCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDNUY7UUFDRCxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRlbnRTdHlsZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvbnRlbnQvaGVscGVycy9jb250ZW50LXN0eWxlLmhlbHBlcic7XG5pbXBvcnQgeyBGb3JtYXRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZm9ybWF0Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdFN0eWxlSGVscGVyIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2hlbHBlcnMvZm9ybWF0LXN0eWxlLmhlbHBlcic7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRPcGVyYXRpb25zSGVscGVyIHtcbiAgICBzdGF0aWMgcmVtb3ZlQ29udGVudChmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGZvcm1hdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRzW2ldLnN0YXJ0SW5kZXggPj0gc3RhcnRJbmRleCAmJiBmb3JtYXRzW2ldLmVuZEluZGV4IDw9IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXRzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBpZiAoeC5zdGFydEluZGV4ID49IHN0YXJ0SW5kZXggJiYgeC5zdGFydEluZGV4IDw9IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgeC5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeC5zdGFydEluZGV4ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB4LnN0YXJ0SW5kZXggLT0gbGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHguZW5kSW5kZXggPj0gc3RhcnRJbmRleCAmJiB4LmVuZEluZGV4IDw9IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgeC5lbmRJbmRleCA9IHN0YXJ0SW5kZXggLSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4LmVuZEluZGV4ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB4LmVuZEluZGV4IC09IGxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgRm9ybWF0U3R5bGVIZWxwZXIubWVyZ2VGb3JtYXRzKGZvcm1hdHMsIHN0YXJ0SW5kZXggLSAxLCBzdGFydEluZGV4KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0Q29udGVudChmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBpbmRleDogbnVtYmVyLCB0ZXh0TGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZm9ybWF0cy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgaWYgKHguc3RhcnRJbmRleCA+IGluZGV4IHx8ICh4LnN0YXJ0SW5kZXggPT09IGluZGV4ICYmIGluZGV4ICE9PSAwKSkge1xuICAgICAgICAgICAgICAgIHguc3RhcnRJbmRleCArPSB0ZXh0TGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHguZW5kSW5kZXggPj0gaW5kZXggLSAxKSB7XG4gICAgICAgICAgICAgICAgeC5lbmRJbmRleCArPSB0ZXh0TGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0U3R5bGVkQ29udGVudChmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBpbmRleDogbnVtYmVyLCB0ZXh0TGVuZ3RoOiBudW1iZXIsIHN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluc2VydENvbnRlbnQoZm9ybWF0cywgaW5kZXgsIHRleHRMZW5ndGgpO1xuICAgICAgICB0aGlzLmFwcGx5KGZvcm1hdHMsIGluZGV4LCBpbmRleCArIHRleHRMZW5ndGggLSAxLCBzdHlsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlc3RvcmUoZm9ybWF0czogRm9ybWF0TW9kZWxbXSwgaW5kZXg6IG51bWJlciwgdGV4dExlbmd0aDogbnVtYmVyLCB0ZXh0Rm9ybWF0czogRm9ybWF0TW9kZWxbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmluc2VydENvbnRlbnQoZm9ybWF0cywgaW5kZXgsIHRleHRMZW5ndGgpO1xuICAgICAgICB0aGlzLnJlc3RvcmVGb3JtYXRzKGZvcm1hdHMsIHRleHRGb3JtYXRzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVwbGFjZUNvbnRlbnQoZm9ybWF0czogRm9ybWF0TW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCB0ZXh0TGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDb250ZW50KGZvcm1hdHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5pbnNlcnRDb250ZW50KGZvcm1hdHMsIHN0YXJ0SW5kZXgsIHRleHRMZW5ndGgpO1xuICAgIH1cblxuICAgIHN0YXRpYyByZXN0b3JlRm9ybWF0cyhmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCB0ZXh0Rm9ybWF0czogRm9ybWF0TW9kZWxbXSk6IHZvaWQge1xuICAgICAgICB0ZXh0Rm9ybWF0cy5mb3JFYWNoKHggPT4gdGhpcy5hcHBseShmb3JtYXRzLCB4LnN0YXJ0SW5kZXgsIHguZW5kSW5kZXgsIHgudGV4dFN0eWxlKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFwcGx5KGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgc3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGxldCBmaXJzdEluZGV4ID0gZm9ybWF0cy5maW5kSW5kZXgoeCA9PiB4LmVuZEluZGV4ID49IHN0YXJ0SW5kZXgpO1xuICAgICAgICBpZiAoZm9ybWF0c1tmaXJzdEluZGV4XS5zdGFydEluZGV4IDwgc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgRm9ybWF0TW9kZWwoe1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGZvcm1hdHNbZmlyc3RJbmRleF0uc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICBlbmRJbmRleDogc3RhcnRJbmRleCAtIDEsXG4gICAgICAgICAgICAgICAgdGV4dFN0eWxlOiBuZXcgVGV4dFN0eWxlTW9kZWwoZm9ybWF0c1tmaXJzdEluZGV4XS50ZXh0U3R5bGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvcm1hdHNbZmlyc3RJbmRleF0uc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgICBmb3JtYXRzLnNwbGljZShmaXJzdEluZGV4LCAwLCBtb2RlbCk7XG4gICAgICAgICAgICBmaXJzdEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7XG4gICAgICAgIHdoaWxlIChsYXN0SW5kZXggPCBmb3JtYXRzLmxlbmd0aCAtIDEgJiYgZm9ybWF0c1tsYXN0SW5kZXhdLmVuZEluZGV4IDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGxhc3RJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXRzW2xhc3RJbmRleF0uZW5kSW5kZXggPiBlbmRJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgRm9ybWF0TW9kZWwoe1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGVuZEluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICBlbmRJbmRleDogZm9ybWF0c1tsYXN0SW5kZXhdLmVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHRleHRTdHlsZTogbmV3IFRleHRTdHlsZU1vZGVsKGZvcm1hdHNbbGFzdEluZGV4XS50ZXh0U3R5bGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvcm1hdHNbbGFzdEluZGV4XS5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgICAgICAgICAgZm9ybWF0cy5zcGxpY2UobGFzdEluZGV4ICsgMSwgMCwgbW9kZWwpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBmaXJzdEluZGV4OyBpIDw9IGxhc3RJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBmb3JtYXRzW2ldLnRleHRTdHlsZSA9IENvbnRlbnRTdHlsZUhlbHBlci5jb21iaW5lVGV4dFN0eWxlcyhzdHlsZSwgZm9ybWF0c1tpXS50ZXh0U3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIEZvcm1hdFN0eWxlSGVscGVyLm1lcmdlRm9ybWF0cyhmb3JtYXRzLCBzdGFydEluZGV4IC0gMSwgZW5kSW5kZXggKyAxKTtcbiAgICB9XG59XG4iXX0=
@@ -1,14 +1,15 @@
1
+ import { FormatStyleHelper } from './../../execution/helpers/format-style.helper';
1
2
  import { FormatModel } from '../../../models/generated/format.model';
2
3
  import { FormatOperationsHelper } from './format-operations.helper';
3
4
  import { LinkModel } from '../../../models/generated/link.model';
4
5
  export class LinkOperationsHelper {
5
- static insert(links, link, startIndex, endIndex, textStyle) {
6
+ static insert(links, link, startIndex, endIndex, linkStyle) {
6
7
  LinkOperationsHelper.insertContent(links, startIndex, endIndex - startIndex + 1);
7
8
  const linkModel = new LinkModel({
8
9
  startIndex: startIndex,
9
10
  link,
10
11
  endIndex,
11
- formats: [new FormatModel({ startIndex: 0, endIndex: endIndex - startIndex, textStyle })]
12
+ formats: [new FormatModel({ startIndex: 0, endIndex: endIndex - startIndex, textStyle: linkStyle })]
12
13
  });
13
14
  const index = links.findIndex(x => x.startIndex > linkModel.startIndex);
14
15
  if (index < 0) {
@@ -18,6 +19,10 @@ export class LinkOperationsHelper {
18
19
  links.splice(index, 0, linkModel);
19
20
  }
20
21
  }
22
+ static insertStyledContent(links, index, textLength, style) {
23
+ this.insertContent(links, index, textLength);
24
+ this.apply(links, index, index + textLength - 1, style);
25
+ }
21
26
  static insertContent(links, insertIndex, textLength) {
22
27
  for (let link of links) {
23
28
  if (link.startIndex < insertIndex && link.endIndex >= insertIndex) {
@@ -47,13 +52,13 @@ export class LinkOperationsHelper {
47
52
  }
48
53
  if (links[i].startIndex <= startIndex && links[i].endIndex >= endIndex) {
49
54
  const startInLink = startIndex - links[i].startIndex;
50
- const endInLink = startInLink + length - 1;
55
+ const endInLink = endIndex - links[i].startIndex;
51
56
  links[i].endIndex -= length;
52
57
  FormatOperationsHelper.removeContent(links[i].formats, startInLink, endInLink);
53
58
  continue;
54
59
  }
55
60
  if (links[i].startIndex >= startIndex && links[i].startIndex <= endIndex) {
56
- const endInLink = links[i].startIndex - startIndex - 1;
61
+ const endInLink = endIndex - links[i].startIndex;
57
62
  links[i].startIndex = startIndex;
58
63
  links[i].endIndex -= length;
59
64
  FormatOperationsHelper.removeContent(links[i].formats, 0, endInLink);
@@ -67,15 +72,62 @@ export class LinkOperationsHelper {
67
72
  }
68
73
  }
69
74
  }
70
- static restore(links, startIndex, contentLength, newlinks) {
75
+ static restore(links, startIndex, contentLength, newLinks) {
71
76
  this.insertContent(links, startIndex, contentLength);
72
77
  let indexInElements = links.findIndex(x => x.startIndex >= startIndex);
73
78
  indexInElements = indexInElements === -1 ? links.length : indexInElements;
74
- links.splice(indexInElements, 0, ...newlinks);
79
+ links.splice(indexInElements, 0, ...newLinks);
80
+ this.merge(links, startIndex - 1, startIndex + contentLength);
81
+ }
82
+ static restoreFormats(links, formats) {
83
+ formats.forEach(x => this.apply(links, x.startIndex, x.endIndex, x.textStyle));
75
84
  }
76
85
  static replaceContent(links, startIndex, endIndex, length) {
77
86
  this.removeContent(links, startIndex, endIndex);
78
87
  this.insertContent(links, startIndex, length);
79
88
  }
89
+ static apply(links, startIndex, endIndex, style) {
90
+ for (let link of links) {
91
+ if (link.startIndex > endIndex || link.endIndex < startIndex) {
92
+ continue;
93
+ }
94
+ const start = startIndex > link.startIndex ? startIndex - link.startIndex : 0;
95
+ FormatOperationsHelper.apply(link.formats, start, endIndex - link.startIndex, style);
96
+ }
97
+ }
98
+ static merge(links, start, end) {
99
+ const firstIndex = links.findIndex(x => x.endIndex >= start);
100
+ for (let link of links) {
101
+ if (link.startIndex <= start && link.endIndex >= end) {
102
+ const newLink = links[firstIndex + 1];
103
+ newLink.formats.forEach(x => {
104
+ x.startIndex += newLink.startIndex - link.startIndex;
105
+ x.endIndex += newLink.startIndex - link.startIndex;
106
+ });
107
+ for (let { startIndex, endIndex, textStyle } of newLink.formats) {
108
+ FormatOperationsHelper.apply(link.formats, startIndex, endIndex - startIndex + 1, textStyle);
109
+ }
110
+ links.splice(firstIndex + 1, 1);
111
+ return;
112
+ }
113
+ }
114
+ let lastIndex = firstIndex;
115
+ while (lastIndex < links.length - 1 && links[lastIndex].endIndex < end) {
116
+ lastIndex++;
117
+ }
118
+ for (let i = lastIndex; i > firstIndex; i--) {
119
+ const previous = links[i - 1];
120
+ if (previous.endIndex + 1 === links[i].startIndex && previous.link === links[i].link) {
121
+ previous.endIndex = links[i].endIndex;
122
+ links[i].formats.forEach(x => {
123
+ x.startIndex += previous.formats[previous.formats.length - 1].endIndex + 1;
124
+ x.endIndex += previous.formats[previous.formats.length - 1].endIndex + 1;
125
+ });
126
+ previous.formats.push(...links[i].formats);
127
+ links.splice(i, 1);
128
+ FormatStyleHelper.mergeFormats(previous.formats, 0, previous.endIndex - previous.startIndex);
129
+ }
130
+ }
131
+ }
80
132
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1vcGVyYXRpb25zLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9vcGVyYXRpb25zL2hlbHBlcnMvbGluay1vcGVyYXRpb25zLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR2pFLE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFrQixFQUFFLElBQVksRUFBRSxVQUFrQixFQUFFLFFBQWdCLEVBQUUsU0FBeUI7UUFDM0csb0JBQW9CLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUM1QixVQUFVLEVBQUUsVUFBVTtZQUN0QixJQUFJO1lBQ0osUUFBUTtZQUNSLE9BQU8sRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxHQUFHLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzVGLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDWCxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3pCO2FB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SyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQzFFLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWtCLEVBQUUsVUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQWM7UUFDMUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtYXRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZm9ybWF0Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdE9wZXJhdGlvbnNIZWxwZXIgfSBmcm9tICcuL2Zvcm1hdC1vcGVyYXRpb25zLmhlbHBlcic7XG5pbXBvcnQgeyBMaW5rTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2xpbmsubW9kZWwnO1xuaW1wb3J0IHsgVGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RleHQtc3R5bGUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgTGlua09wZXJhdGlvbnNIZWxwZXIge1xuICAgIHN0YXRpYyBpbnNlcnQobGlua3M6IExpbmtNb2RlbFtdLCBsaW5rOiBzdHJpbmcsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgdGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBMaW5rT3BlcmF0aW9uc0hlbHBlci5pbnNlcnRDb250ZW50KGxpbmtzLCBzdGFydEluZGV4LCBlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgY29uc3QgbGlua01vZGVsID0gbmV3IExpbmtNb2RlbCh7XG4gICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgbGluayxcbiAgICAgICAgICAgIGVuZEluZGV4LFxuICAgICAgICAgICAgZm9ybWF0czogW25ldyBGb3JtYXRNb2RlbCh7IHN0YXJ0SW5kZXg6IDAsIGVuZEluZGV4OiBlbmRJbmRleCAtIHN0YXJ0SW5kZXgsIHRleHRTdHlsZSB9KV1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlua3MuZmluZEluZGV4KHggPT4geC5zdGFydEluZGV4ID4gbGlua01vZGVsLnN0YXJ0SW5kZXgpO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICBsaW5rcy5wdXNoKGxpbmtNb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5rcy5zcGxpY2UoaW5kZXgsIDAsIGxpbmtNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0Q29udGVudChsaW5rczogTGlua01vZGVsW10sIGluc2VydEluZGV4OiBudW1iZXIsIHRleHRMZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgICBpZiAobGluay5zdGFydEluZGV4IDwgaW5zZXJ0SW5kZXggJiYgbGluay5lbmRJbmRleCA+PSBpbnNlcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGxpbmsuZW5kSW5kZXggKz0gdGV4dExlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleEluTGluayA9IGluc2VydEluZGV4IC0gbGluay5zdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGxpbmsuZm9ybWF0cy5maW5kKHggPT4geC5zdGFydEluZGV4IDw9IGluZGV4SW5MaW5rICYmIHguZW5kSW5kZXggPj0gaW5kZXhJbkxpbmspO1xuICAgICAgICAgICAgICAgIGZvcm1hdC5lbmRJbmRleCArPSB0ZXh0TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbmsuc3RhcnRJbmRleCA+PSBpbnNlcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGxpbmsuc3RhcnRJbmRleCArPSB0ZXh0TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxpbmsuZW5kSW5kZXggKz0gdGV4dExlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyByZW1vdmVDb250ZW50KGxpbmtzOiBMaW5rTW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDE7XG4gICAgICAgIGZvciAobGV0IGkgPSBsaW5rcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGxpbmtzW2ldLnN0YXJ0SW5kZXggPj0gc3RhcnRJbmRleCAmJiBsaW5rc1tpXS5lbmRJbmRleCA8PSBlbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGxpbmtzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRJbmRleCA8IGxpbmtzW2ldLnN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5zdGFydEluZGV4IC09IGxlbmd0aDtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5lbmRJbmRleCAtPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGlua3NbaV0uc3RhcnRJbmRleCA8PSBzdGFydEluZGV4ICYmIGxpbmtzW2ldLmVuZEluZGV4ID49IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbkxpbmsgPSBzdGFydEluZGV4IC0gbGlua3NbaV0uc3RhcnRJbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRJbkxpbmsgPSBzdGFydEluTGluayArIGxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgbGlua3NbaV0uZW5kSW5kZXggLT0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIEZvcm1hdE9wZXJhdGlvbnNIZWxwZXIucmVtb3ZlQ29udGVudChsaW5rc1tpXS5mb3JtYXRzLCBzdGFydEluTGluaywgZW5kSW5MaW5rKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW5rc1tpXS5zdGFydEluZGV4ID49IHN0YXJ0SW5kZXggJiYgbGlua3NbaV0uc3RhcnRJbmRleCA8PSBlbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZEluTGluayA9IGxpbmtzW2ldLnN0YXJ0SW5kZXggLSBzdGFydEluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5lbmRJbmRleCAtPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgRm9ybWF0T3BlcmF0aW9uc0hlbHBlci5yZW1vdmVDb250ZW50KGxpbmtzW2ldLmZvcm1hdHMsIDAsIGVuZEluTGluayk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGlua3NbaV0uZW5kSW5kZXggPj0gc3RhcnRJbmRleCAmJiBsaW5rc1tpXS5lbmRJbmRleCA8PSBlbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5MaW5rID0gc3RhcnRJbmRleCAtIGxpbmtzW2ldLnN0YXJ0SW5kZXg7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kSW5MaW5rID0gbGlua3NbaV0uZm9ybWF0c1tsaW5rc1tpXS5mb3JtYXRzLmxlbmd0aCAtIDFdLmVuZEluZGV4O1xuICAgICAgICAgICAgICAgIGxpbmtzW2ldLmVuZEluZGV4ID0gc3RhcnRJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgRm9ybWF0T3BlcmF0aW9uc0hlbHBlci5yZW1vdmVDb250ZW50KGxpbmtzW2ldLmZvcm1hdHMsIHN0YXJ0SW5MaW5rLCBlbmRJbkxpbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJlc3RvcmUobGlua3M6IExpbmtNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGNvbnRlbnRMZW5ndGg6IG51bWJlciwgbmV3bGlua3M6IExpbmtNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29udGVudChsaW5rcywgc3RhcnRJbmRleCwgY29udGVudExlbmd0aCk7XG4gICAgICAgIGxldCBpbmRleEluRWxlbWVudHMgPSBsaW5rcy5maW5kSW5kZXgoeCA9PiB4LnN0YXJ0SW5kZXggPj0gc3RhcnRJbmRleCk7XG4gICAgICAgIGluZGV4SW5FbGVtZW50cyA9IGluZGV4SW5FbGVtZW50cyA9PT0gLTEgPyBsaW5rcy5sZW5ndGggOiBpbmRleEluRWxlbWVudHM7XG4gICAgICAgIGxpbmtzLnNwbGljZShpbmRleEluRWxlbWVudHMsIDAsIC4uLm5ld2xpbmtzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVwbGFjZUNvbnRlbnQobGlua3M6IExpbmtNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ29udGVudChsaW5rcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmluc2VydENvbnRlbnQobGlua3MsIHN0YXJ0SW5kZXgsIGxlbmd0aCk7XG4gICAgfVxufVxuIl19
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1vcGVyYXRpb25zLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9vcGVyYXRpb25zL2hlbHBlcnMvbGluay1vcGVyYXRpb25zLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR2pFLE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFrQixFQUFFLElBQVksRUFBRSxVQUFrQixFQUFFLFFBQWdCLEVBQUUsU0FBeUI7UUFDM0csb0JBQW9CLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUM1QixVQUFVLEVBQUUsVUFBVTtZQUN0QixJQUFJO1lBQ0osUUFBUTtZQUNSLE9BQU8sRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxHQUFHLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN2RyxDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEUsSUFBSSxLQUFLLEdBQUcsQ0FB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QUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUMzRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDN0UsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEc7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1hdFN0eWxlSGVscGVyIH0gZnJvbSAnLi8uLi8uLi9leGVjdXRpb24vaGVscGVycy9mb3JtYXQtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IEZvcm1hdE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9mb3JtYXQubW9kZWwnO1xuaW1wb3J0IHsgRm9ybWF0T3BlcmF0aW9uc0hlbHBlciB9IGZyb20gJy4vZm9ybWF0LW9wZXJhdGlvbnMuaGVscGVyJztcbmltcG9ydCB7IExpbmtNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbGluay5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBMaW5rT3BlcmF0aW9uc0hlbHBlciB7XG4gICAgc3RhdGljIGluc2VydChsaW5rczogTGlua01vZGVsW10sIGxpbms6IHN0cmluZywgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBsaW5rU3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIExpbmtPcGVyYXRpb25zSGVscGVyLmluc2VydENvbnRlbnQobGlua3MsIHN0YXJ0SW5kZXgsIGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDEpO1xuICAgICAgICBjb25zdCBsaW5rTW9kZWwgPSBuZXcgTGlua01vZGVsKHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsaW5rLFxuICAgICAgICAgICAgZW5kSW5kZXgsXG4gICAgICAgICAgICBmb3JtYXRzOiBbbmV3IEZvcm1hdE1vZGVsKHsgc3RhcnRJbmRleDogMCwgZW5kSW5kZXg6IGVuZEluZGV4IC0gc3RhcnRJbmRleCwgdGV4dFN0eWxlOiBsaW5rU3R5bGUgfSldXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpbmtzLmZpbmRJbmRleCh4ID0+IHguc3RhcnRJbmRleCA+IGxpbmtNb2RlbC5zdGFydEluZGV4KTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgbGlua3MucHVzaChsaW5rTW9kZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlua3Muc3BsaWNlKGluZGV4LCAwLCBsaW5rTW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGluc2VydFN0eWxlZENvbnRlbnQobGlua3M6IExpbmtNb2RlbFtdLCBpbmRleDogbnVtYmVyLCB0ZXh0TGVuZ3RoOiBudW1iZXIsIHN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluc2VydENvbnRlbnQobGlua3MsIGluZGV4LCB0ZXh0TGVuZ3RoKTtcbiAgICAgICAgdGhpcy5hcHBseShsaW5rcywgaW5kZXgsIGluZGV4ICsgdGV4dExlbmd0aCAtIDEsIHN0eWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0Q29udGVudChsaW5rczogTGlua01vZGVsW10sIGluc2VydEluZGV4OiBudW1iZXIsIHRleHRMZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgICBpZiAobGluay5zdGFydEluZGV4IDwgaW5zZXJ0SW5kZXggJiYgbGluay5lbmRJbmRleCA+PSBpbnNlcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGxpbmsuZW5kSW5kZXggKz0gdGV4dExlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleEluTGluayA9IGluc2VydEluZGV4IC0gbGluay5zdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGxpbmsuZm9ybWF0cy5maW5kKHggPT4geC5zdGFydEluZGV4IDw9IGluZGV4SW5MaW5rICYmIHguZW5kSW5kZXggPj0gaW5kZXhJbkxpbmspO1xuICAgICAgICAgICAgICAgIGZvcm1hdC5lbmRJbmRleCArPSB0ZXh0TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbmsuc3RhcnRJbmRleCA+PSBpbnNlcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGxpbmsuc3RhcnRJbmRleCArPSB0ZXh0TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxpbmsuZW5kSW5kZXggKz0gdGV4dExlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyByZW1vdmVDb250ZW50KGxpbmtzOiBMaW5rTW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDE7XG4gICAgICAgIGZvciAobGV0IGkgPSBsaW5rcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGxpbmtzW2ldLnN0YXJ0SW5kZXggPj0gc3RhcnRJbmRleCAmJiBsaW5rc1tpXS5lbmRJbmRleCA8PSBlbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGxpbmtzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRJbmRleCA8IGxpbmtzW2ldLnN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5zdGFydEluZGV4IC09IGxlbmd0aDtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5lbmRJbmRleCAtPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGlua3NbaV0uc3RhcnRJbmRleCA8PSBzdGFydEluZGV4ICYmIGxpbmtzW2ldLmVuZEluZGV4ID49IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbkxpbmsgPSBzdGFydEluZGV4IC0gbGlua3NbaV0uc3RhcnRJbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRJbkxpbmsgPSBlbmRJbmRleCAtIGxpbmtzW2ldLnN0YXJ0SW5kZXg7XG4gICAgICAgICAgICAgICAgbGlua3NbaV0uZW5kSW5kZXggLT0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIEZvcm1hdE9wZXJhdGlvbnNIZWxwZXIucmVtb3ZlQ29udGVudChsaW5rc1tpXS5mb3JtYXRzLCBzdGFydEluTGluaywgZW5kSW5MaW5rKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW5rc1tpXS5zdGFydEluZGV4ID49IHN0YXJ0SW5kZXggJiYgbGlua3NbaV0uc3RhcnRJbmRleCA8PSBlbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZEluTGluayA9IGVuZEluZGV4IC0gbGlua3NbaV0uc3RhcnRJbmRleDtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5lbmRJbmRleCAtPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgRm9ybWF0T3BlcmF0aW9uc0hlbHBlci5yZW1vdmVDb250ZW50KGxpbmtzW2ldLmZvcm1hdHMsIDAsIGVuZEluTGluayk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGlua3NbaV0uZW5kSW5kZXggPj0gc3RhcnRJbmRleCAmJiBsaW5rc1tpXS5lbmRJbmRleCA8PSBlbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5MaW5rID0gc3RhcnRJbmRleCAtIGxpbmtzW2ldLnN0YXJ0SW5kZXg7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kSW5MaW5rID0gbGlua3NbaV0uZm9ybWF0c1tsaW5rc1tpXS5mb3JtYXRzLmxlbmd0aCAtIDFdLmVuZEluZGV4O1xuICAgICAgICAgICAgICAgIGxpbmtzW2ldLmVuZEluZGV4ID0gc3RhcnRJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgRm9ybWF0T3BlcmF0aW9uc0hlbHBlci5yZW1vdmVDb250ZW50KGxpbmtzW2ldLmZvcm1hdHMsIHN0YXJ0SW5MaW5rLCBlbmRJbkxpbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJlc3RvcmUobGlua3M6IExpbmtNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGNvbnRlbnRMZW5ndGg6IG51bWJlciwgbmV3TGlua3M6IExpbmtNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29udGVudChsaW5rcywgc3RhcnRJbmRleCwgY29udGVudExlbmd0aCk7XG4gICAgICAgIGxldCBpbmRleEluRWxlbWVudHMgPSBsaW5rcy5maW5kSW5kZXgoeCA9PiB4LnN0YXJ0SW5kZXggPj0gc3RhcnRJbmRleCk7XG4gICAgICAgIGluZGV4SW5FbGVtZW50cyA9IGluZGV4SW5FbGVtZW50cyA9PT0gLTEgPyBsaW5rcy5sZW5ndGggOiBpbmRleEluRWxlbWVudHM7XG4gICAgICAgIGxpbmtzLnNwbGljZShpbmRleEluRWxlbWVudHMsIDAsIC4uLm5ld0xpbmtzKTtcbiAgICAgICAgdGhpcy5tZXJnZShsaW5rcywgc3RhcnRJbmRleCAtIDEsIHN0YXJ0SW5kZXggKyBjb250ZW50TGVuZ3RoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVzdG9yZUZvcm1hdHMobGlua3M6IExpbmtNb2RlbFtdLCBmb3JtYXRzOiBGb3JtYXRNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGZvcm1hdHMuZm9yRWFjaCh4ID0+IHRoaXMuYXBwbHkobGlua3MsIHguc3RhcnRJbmRleCwgeC5lbmRJbmRleCwgeC50ZXh0U3R5bGUpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVwbGFjZUNvbnRlbnQobGlua3M6IExpbmtNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ29udGVudChsaW5rcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmluc2VydENvbnRlbnQobGlua3MsIHN0YXJ0SW5kZXgsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFwcGx5KGxpbmtzOiBMaW5rTW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgaWYgKGxpbmsuc3RhcnRJbmRleCA+IGVuZEluZGV4IHx8IGxpbmsuZW5kSW5kZXggPCBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRJbmRleCA+IGxpbmsuc3RhcnRJbmRleCA/IHN0YXJ0SW5kZXggLSBsaW5rLnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgRm9ybWF0T3BlcmF0aW9uc0hlbHBlci5hcHBseShsaW5rLmZvcm1hdHMsIHN0YXJ0LCBlbmRJbmRleCAtIGxpbmsuc3RhcnRJbmRleCwgc3R5bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgbWVyZ2UobGlua3M6IExpbmtNb2RlbFtdLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gbGlua3MuZmluZEluZGV4KHggPT4geC5lbmRJbmRleCA+PSBzdGFydCk7XG4gICAgICAgIGZvciAobGV0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICAgIGlmIChsaW5rLnN0YXJ0SW5kZXggPD0gc3RhcnQgJiYgbGluay5lbmRJbmRleCA+PSBlbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMaW5rID0gbGlua3NbZmlyc3RJbmRleCArIDFdO1xuICAgICAgICAgICAgICAgIG5ld0xpbmsuZm9ybWF0cy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICB4LnN0YXJ0SW5kZXggKz0gbmV3TGluay5zdGFydEluZGV4IC0gbGluay5zdGFydEluZGV4O1xuICAgICAgICAgICAgICAgICAgICB4LmVuZEluZGV4ICs9IG5ld0xpbmsuc3RhcnRJbmRleCAtIGxpbmsuc3RhcnRJbmRleDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSB9IG9mIG5ld0xpbmsuZm9ybWF0cykge1xuICAgICAgICAgICAgICAgICAgICBGb3JtYXRPcGVyYXRpb25zSGVscGVyLmFwcGx5KGxpbmsuZm9ybWF0cywgc3RhcnRJbmRleCwgZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSwgdGV4dFN0eWxlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsaW5rcy5zcGxpY2UoZmlyc3RJbmRleCArIDEsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYXN0SW5kZXggPSBmaXJzdEluZGV4O1xuICAgICAgICB3aGlsZSAobGFzdEluZGV4IDwgbGlua3MubGVuZ3RoIC0gMSAmJiBsaW5rc1tsYXN0SW5kZXhdLmVuZEluZGV4IDwgZW5kKSB7XG4gICAgICAgICAgICBsYXN0SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBsYXN0SW5kZXg7IGkgPiBmaXJzdEluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gbGlua3NbaSAtIDFdO1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzLmVuZEluZGV4ICsgMSA9PT0gbGlua3NbaV0uc3RhcnRJbmRleCAmJiBwcmV2aW91cy5saW5rID09PSBsaW5rc1tpXS5saW5rKSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXMuZW5kSW5kZXggPSBsaW5rc1tpXS5lbmRJbmRleDtcbiAgICAgICAgICAgICAgICBsaW5rc1tpXS5mb3JtYXRzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHguc3RhcnRJbmRleCArPSBwcmV2aW91cy5mb3JtYXRzW3ByZXZpb3VzLmZvcm1hdHMubGVuZ3RoIC0gMV0uZW5kSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICB4LmVuZEluZGV4ICs9IHByZXZpb3VzLmZvcm1hdHNbcHJldmlvdXMuZm9ybWF0cy5sZW5ndGggLSAxXS5lbmRJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXMuZm9ybWF0cy5wdXNoKC4uLmxpbmtzW2ldLmZvcm1hdHMpO1xuICAgICAgICAgICAgICAgIGxpbmtzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBGb3JtYXRTdHlsZUhlbHBlci5tZXJnZUZvcm1hdHMocHJldmlvdXMuZm9ybWF0cywgMCwgcHJldmlvdXMuZW5kSW5kZXggLSBwcmV2aW91cy5zdGFydEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==