@vitrosoftware/common-ui-ts 1.1.96 → 1.1.98

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 (113) hide show
  1. package/css/std/controls/action-handler/action-result-list.css +86 -0
  2. package/css/std/controls/action-handler/confirm-dialog.css +25 -0
  3. package/css/std/controls/action-handler/img/question.svg +39 -8
  4. package/css/std/controls/action-handler/img/save-blue.svg +5 -0
  5. package/css/std/controls/action-handler/result-dialog.css +124 -0
  6. package/css/std/controls/button-cancel/button-cancel.css +12 -0
  7. package/css/std/controls/button-group/button-group.css +1 -0
  8. package/css/std/controls/checkbox/checkbox.css +4 -4
  9. package/css/std/controls/checkbox/img/checkbox-active.svg +4 -0
  10. package/css/std/controls/checkbox/img/checkbox-empty.svg +3 -0
  11. package/css/std/controls/criterion/criterion.css +1 -1
  12. package/css/std/controls/date-picker/date-picker.css +1 -4
  13. package/css/std/controls/dialog/dialog-content.css +12 -0
  14. package/css/std/controls/dialog/dialog-footer.css +52 -4
  15. package/css/std/controls/dialog/dialog-header.css +14 -17
  16. package/css/std/controls/dialog/dialog.css +45 -9
  17. package/css/std/controls/dialog/img/cancel-white.svg +9 -2
  18. package/css/std/controls/dialog/img/collapse-bottom-grey.svg +3 -0
  19. package/css/std/controls/dialog/img/collapse-up-grey.svg +3 -0
  20. package/css/std/controls/expand-collapse-button/expand-collapse-button.css +33 -0
  21. package/css/std/controls/expand-control-group/expand-control-group.css +1 -10
  22. package/css/std/controls/field-iterator/field-iterator.css +4 -0
  23. package/css/std/controls/file-version-select/file-version-select.css +8 -4
  24. package/css/std/controls/heading/heading.css +49 -0
  25. package/css/std/controls/image-picker/image-picker.css +31 -1
  26. package/css/std/controls/input/input.css +2 -7
  27. package/css/std/controls/lookup-picker/lookup-picker.css +1 -4
  28. package/css/std/controls/pdf-viewer/custom.css +25 -2
  29. package/css/std/controls/pdf-viewer/img/cancel-black.svg +3 -0
  30. package/css/std/controls/pdf-viewer/img/create-issue-black.svg +5 -0
  31. package/css/std/controls/pdf-viewer/img/delete-black.svg +11 -0
  32. package/css/std/controls/pdf-viewer/img/hide-measures.svg +16 -0
  33. package/css/std/controls/pdf-viewer/img/measures-area.svg +17 -0
  34. package/css/std/controls/pdf-viewer/img/measures-area_active.svg +17 -0
  35. package/css/std/controls/pdf-viewer/img/measures-line.svg +8 -0
  36. package/css/std/controls/pdf-viewer/img/measures-line_active.svg +8 -0
  37. package/css/std/controls/pdf-viewer/img/measures-settings.svg +4 -0
  38. package/css/std/controls/pdf-viewer/img/measures-settings_active.svg +4 -0
  39. package/css/std/controls/pdf-viewer/img/measures-toolbar.svg +15 -0
  40. package/css/std/controls/pdf-viewer/img/show-measures.svg +16 -0
  41. package/css/std/controls/pdf-viewer/measure.css +137 -0
  42. package/css/std/controls/pdf-viewer/pdf-viewer-index.css +2570 -236
  43. package/css/std/controls/pdf-viewer/pdf-viewer.css +124 -87
  44. package/css/std/controls/pdf-viewer/viewer.css +158 -147
  45. package/css/std/controls/progress-bar/progress-bar.css +25 -0
  46. package/css/std/controls/scrollbar/scrollbar.css +2 -2
  47. package/css/std/controls/sidebar/sidebar.css +4 -3
  48. package/css/std/controls/system-exception-dialog/img/error.svg +40 -0
  49. package/css/std/controls/system-exception-dialog/system-exception-dialog.css +119 -0
  50. package/css/std/controls/time-picker/time-picker.css +1 -4
  51. package/css/std/controls/tree-view/tree-view.css +4 -0
  52. package/css/std/controls/uploader/uploader.css +1 -12
  53. package/css/std/controls/view/view.css +8 -1
  54. package/css/std/controls/view-part/view-part.css +0 -5
  55. package/css/third-party/jquery-contextMenu/jquery.contextMenu.min.css +1 -1
  56. package/dist/index.css +802 -627
  57. package/dist/index.js +1197 -1096
  58. package/dist/index.js.map +1 -1
  59. package/dist/src/constants/KeyCode.d.ts +1 -0
  60. package/dist/src/controls/ActionHandler/ActionHandler.d.ts +15 -11
  61. package/dist/src/controls/ActionHandler/ActionHandlerConstants.d.ts +7 -28
  62. package/dist/src/controls/ActionHandler/ActionHandlerItem.d.ts +6 -0
  63. package/dist/src/controls/ActionHandler/ActionHandlerResult.d.ts +3 -0
  64. package/dist/src/controls/ActionHandler/ActionResultItem.d.ts +11 -0
  65. package/dist/src/controls/ActionHandler/ActionResultList.d.ts +9 -0
  66. package/dist/src/controls/ActionHandler/ConfirmDialog.d.ts +11 -0
  67. package/dist/src/controls/ActionHandler/ResultDialog.d.ts +17 -0
  68. package/dist/src/controls/ButtonCancel/ButtonCancel.d.ts +3 -0
  69. package/dist/src/controls/ButtonGroup/ButtonGroup.d.ts +1 -0
  70. package/dist/src/controls/Checkbox/Checkbox.d.ts +4 -3
  71. package/dist/src/controls/Checkbox/CheckboxRef.d.ts +4 -0
  72. package/dist/src/controls/Dialog/Dialog.d.ts +7 -3
  73. package/dist/src/controls/Dialog/DialogComponent.d.ts +1 -0
  74. package/dist/src/controls/Dialog/DialogConstants.d.ts +3 -1
  75. package/dist/src/controls/Dialog/DialogDetailExpandButton.d.ts +6 -0
  76. package/dist/src/controls/Dialog/DialogFooter.d.ts +5 -3
  77. package/dist/src/controls/Dialog/DialogHeader.d.ts +4 -2
  78. package/dist/src/controls/ExpandCollapseButton/ExpandCollapseButton.d.ts +12 -0
  79. package/dist/src/controls/Heading/Heading.d.ts +11 -0
  80. package/dist/src/controls/Heading/HeadingConstants.d.ts +7 -0
  81. package/dist/src/controls/ImagePicker/ImagePicker.d.ts +2 -0
  82. package/dist/src/controls/Input/Input.d.ts +2 -1
  83. package/dist/src/controls/Input/InputRef.d.ts +5 -0
  84. package/dist/src/controls/ProgressBar/ProgressBar.d.ts +7 -0
  85. package/dist/src/controls/ScrollBar/ScrollBar.d.ts +1 -0
  86. package/dist/src/controls/Sidebar/Section.d.ts +0 -1
  87. package/dist/src/controls/SystemExceptionDialog/SystemExceptionDialog.d.ts +11 -0
  88. package/dist/src/controls/SystemExceptionDialog/SystemExceptionDialogConstants.d.ts +11 -0
  89. package/dist/src/controls/SystemExceptionDialog/SystemExceptionDialogData.d.ts +7 -0
  90. package/dist/src/controls/TelerikUploader/TelerikUploaderContextImpl.d.ts +2 -1
  91. package/dist/src/controls/TelerikUploader/TelerikUploaderSettings.d.ts +4 -1
  92. package/dist/src/controls/UpdatingPopover/UpdatingPopover.d.ts +2 -0
  93. package/dist/src/index.d.ts +16 -2
  94. package/lib/screen.dpi.detector/screen.dpi.detector.js +92 -0
  95. package/lib/third-party.js +92 -0
  96. package/package.json +1 -1
  97. package/src/controls/BimViewer/js/bim-viewer.js +2 -2
  98. package/src/controls/PdfViewer/js/pdf-viewer.js +1104 -58
  99. package/css/std/controls/action-handler/action-handler-info.css +0 -99
  100. package/css/std/controls/action-handler/action-handler.css +0 -265
  101. package/css/std/controls/action-handler/img/cancel-red-big.svg +0 -5
  102. package/css/std/controls/action-handler/img/progress.svg +0 -1
  103. package/css/std/controls/action-handler/img/warning.svg +0 -10
  104. package/css/std/controls/checkbox/img/checkbox-big-active.svg +0 -4
  105. package/css/std/controls/checkbox/img/checkbox-big-empty.svg +0 -5
  106. package/css/std/controls/dialog/dialog-button-close.css +0 -34
  107. package/css/std/controls/dialog/dialog-button.css +0 -7
  108. package/css/std/controls/expand-control-group/img/collapse-bottom.svg +0 -5
  109. package/css/std/controls/expand-control-group/img/collapse-up.svg +0 -3
  110. package/css/std/controls/pdf-viewer/img/delete-active.svg +0 -11
  111. package/css/std/controls/pdf-viewer/img/delete.svg +0 -11
  112. /package/css/std/controls/{action-handler → expand-collapse-button}/img/collapse-bottom.svg +0 -0
  113. /package/css/std/controls/{action-handler → expand-collapse-button}/img/collapse-up.svg +0 -0
@@ -602,30 +602,37 @@ const PDFViewerApplication = {
602
602
  get initializedPromise() {
603
603
  return this._initializedCapability.promise;
604
604
  },
605
- zoomIn(steps, scaleFactor) {
605
+ // @TODO.SA - changed
606
+ //zoomIn(steps, scaleFactor) {
607
+ zoomIn(steps, scaleFactor, isMouseEvt) {
606
608
  if (this.pdfViewer.isInPresentationMode) {
607
609
  return;
608
610
  }
609
611
  this.pdfViewer.increaseScale({
610
612
  drawingDelay: _app_options.AppOptions.get("defaultZoomDelay"),
611
613
  steps,
612
- scaleFactor
614
+ scaleFactor,
615
+ isMouseEvt // @TODO.SA - changed. Fix Zoom - mouse
613
616
  });
614
617
  },
615
- zoomOut(steps, scaleFactor) {
618
+ // @TODO.SA - changed
619
+ //zoomOut(steps, scaleFactor) {
620
+ zoomOut(steps, scaleFactor, isMouseEvt) {
616
621
  if (this.pdfViewer.isInPresentationMode) {
617
622
  return;
618
623
  }
619
624
  this.pdfViewer.decreaseScale({
620
625
  drawingDelay: _app_options.AppOptions.get("defaultZoomDelay"),
621
626
  steps,
622
- scaleFactor
627
+ scaleFactor,
628
+ isMouseEvt // @TODO.SA - changed. Fix Zoom - mouse
623
629
  });
624
630
  },
625
631
  zoomReset() {
626
632
  if (this.pdfViewer.isInPresentationMode) {
627
633
  return;
628
634
  }
635
+ $(document).trigger('zoomResetStart'); // @TODO.SA - changed
629
636
  this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
630
637
  },
631
638
  get pagesCount() {
@@ -2000,7 +2007,7 @@ function webViewerWheel(evt) {
2000
2007
  const isPinchToZoom = evt.ctrlKey && !PDFViewerApplication._isCtrlKeyDown && deltaMode === WheelEvent.DOM_DELTA_PIXEL && evt.deltaX === 0 && (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) && evt.deltaZ === 0;
2001
2008
  /* @TODO.SA - fix Zoom */
2002
2009
  if (isPinchToZoom || evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) {
2003
- hidePageZoomCanvas();
2010
+ hidePageZoomCanvas();
2004
2011
  hideNotesLayer();
2005
2012
  /* *** */
2006
2013
  evt.preventDefault();
@@ -2021,7 +2028,7 @@ function webViewerWheel(evt) {
2021
2028
  /* *** */
2022
2029
  PDFViewerApplication.zoomIn(null, scaleFactor);
2023
2030
  } else {
2024
- /* @TODO.SA - zoom without Ctrl-key */
2031
+ /* @TODO.SA - zoom */
2025
2032
  showPageZoomCanvas();
2026
2033
  showNotesLayer();
2027
2034
  /* *** */
@@ -2044,12 +2051,14 @@ function webViewerWheel(evt) {
2044
2051
  /* @TODO.SA - fix Zoom Scale factor */
2045
2052
  ticks = -1;
2046
2053
  /* *** */
2047
- PDFViewerApplication.zoomOut(-ticks);
2054
+ //PDFViewerApplication.zoomOut(-ticks);
2055
+ PDFViewerApplication.zoomOut(-ticks, null, true);
2048
2056
  } else if (ticks > 0) {
2049
2057
  /* @TODO.SA - fix Zoom Scale factor */
2050
2058
  ticks = 1;
2051
2059
  /* *** */
2052
- PDFViewerApplication.zoomIn(ticks);
2060
+ //PDFViewerApplication.zoomIn(ticks);
2061
+ PDFViewerApplication.zoomIn(ticks, null, true);
2053
2062
  } else {
2054
2063
  /* @TODO.SA - zoom without Ctrl-key */
2055
2064
  showPageZoomCanvas();
@@ -3213,7 +3222,7 @@ const defaultOptions = {
3213
3222
  kind: OptionKind.WORKER
3214
3223
  },
3215
3224
  workerSrc: {
3216
- value: "resource/pdfViewer/js/pdf.worker.js?version=1.1.96",
3225
+ value: "resource/pdfViewer/js/pdf.worker.js?version=1.1.98",
3217
3226
  kind: OptionKind.WORKER
3218
3227
  }
3219
3228
  };
@@ -9094,6 +9103,12 @@ class PDFViewer {
9094
9103
  return 1;
9095
9104
  }
9096
9105
  #setScale(value, options) {
9106
+ // @TODO.SA - changed
9107
+ if(this._currentScale != value) {
9108
+ $(document).trigger('setScaleStart');
9109
+ }
9110
+ //
9111
+
9097
9112
  let scale = parseFloat(value);
9098
9113
  if (scale > 0) {
9099
9114
  options.preset = false;
@@ -9688,7 +9703,9 @@ class PDFViewer {
9688
9703
  increaseScale({
9689
9704
  drawingDelay,
9690
9705
  scaleFactor,
9691
- steps
9706
+ steps,
9707
+ // @TODO.SA - changed
9708
+ isMouseEvt
9692
9709
  } = {}) {
9693
9710
  if (!this.pdfDocument) {
9694
9711
  return;
@@ -9699,9 +9716,12 @@ class PDFViewer {
9699
9716
  } else {
9700
9717
  steps ??= 1;
9701
9718
  do {
9702
- /* @TODO.SA - fix Zoom Scale factor */
9703
- //newScale = Math.ceil((newScale * _ui_utils.DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;
9704
- newScale = Math.round((newScale+getZoomOutScaleFactor()).toFixed(2) * 100) / 100;
9719
+ /* @TODO.SA - fix Zoom Scale factor */
9720
+ if(isMouseEvt) {
9721
+ newScale = Math.round((newScale+getZoomOutScaleFactor()).toFixed(2) * 100) / 100;
9722
+ } else {
9723
+ newScale = Math.ceil((newScale * _ui_utils.DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;
9724
+ }
9705
9725
  /* *** */
9706
9726
  } while (--steps > 0 && newScale < _ui_utils.MAX_SCALE);
9707
9727
  }
@@ -9713,7 +9733,9 @@ class PDFViewer {
9713
9733
  decreaseScale({
9714
9734
  drawingDelay,
9715
9735
  scaleFactor,
9716
- steps
9736
+ steps,
9737
+ // @TODO.SA - changed
9738
+ isMouseEvt
9717
9739
  } = {}) {
9718
9740
  if (!this.pdfDocument) {
9719
9741
  return;
@@ -9724,9 +9746,12 @@ class PDFViewer {
9724
9746
  } else {
9725
9747
  steps ??= 1;
9726
9748
  do {
9727
- /* @TODO.SA - fix Zoom Scale factor */
9728
- //newScale = Math.floor((newScale / _ui_utils.DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;
9729
- newScale = Math.round((newScale-getZoomOutScaleFactor()).toFixed(2) * 100) / 100;
9749
+ /* @TODO.SA - fix Zoom Scale factor */
9750
+ if(isMouseEvt) {
9751
+ newScale = Math.round((newScale-getZoomOutScaleFactor()).toFixed(2) * 100) / 100;
9752
+ } else {
9753
+ newScale = Math.floor((newScale / _ui_utils.DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;
9754
+ }
9730
9755
  /* *** */
9731
9756
  } while (--steps > 0 && newScale > _ui_utils.MIN_SCALE);
9732
9757
  }
@@ -12072,7 +12097,7 @@ class Toolbar {
12072
12097
  });
12073
12098
  });
12074
12099
  scaleSelect.addEventListener("change", function (e) {
12075
- if (e.detail.value === "custom") {
12100
+ if (e.detail.value === "custom") {
12076
12101
  return;
12077
12102
  }
12078
12103
  self.eventBus.dispatch("scalechanged", {
@@ -13899,6 +13924,7 @@ function initContextMenuCanvas() {
13899
13924
  var pages = '#viewer .page';
13900
13925
  $.contextMenu({
13901
13926
  selector: pages,
13927
+ trigger: 'right',
13902
13928
  items: {
13903
13929
  "addNote": {
13904
13930
  name: "Add Note",
@@ -13917,11 +13943,15 @@ function initContextMenuCanvas() {
13917
13943
  }
13918
13944
  },
13919
13945
  build: function($triggerElement, e){
13920
- return {
13921
- callback: function(key, options){
13922
- $(document).trigger(key, [options, $triggerElement, e]);
13923
- }
13924
- };
13946
+ if($('.svgsketch-wrap').hasClass('measures')) {
13947
+ return false;
13948
+ } else {
13949
+ return {
13950
+ callback: function(key, options){
13951
+ $(document).trigger(key, [options, $triggerElement, e]);
13952
+ }
13953
+ };
13954
+ }
13925
13955
  }
13926
13956
  });
13927
13957
  }
@@ -14694,6 +14724,9 @@ function normalizeNoteLabel270dg(pos, pageH) {
14694
14724
  }
14695
14725
 
14696
14726
 
14727
+ var label_deleteMeasure = "Delete Measure";
14728
+ var label_cancel = "Cancel";
14729
+
14697
14730
  /* *** Sketchpad *** */
14698
14731
  var fillVal = 'none';
14699
14732
  var strokeColorVal = 'yellowgreen';
@@ -14707,25 +14740,342 @@ var offset = null;
14707
14740
 
14708
14741
  var isSketchpadActive = false;
14709
14742
 
14743
+ var measuresNodes = {};
14744
+ var isSketchpadMeasureActive = false;
14745
+ var measureStrokeColorVal = 'red';
14746
+ var measureStrokeWidthVal = 3;
14747
+ var measureFillVal = 'none';
14748
+ var measureBlockStrokeColorVal = 'blue'; // TODO
14749
+ var measureBlockStrokeWidthVal = 3; // TODO
14750
+ var measureFontSize = 16;
14751
+ var measureFontFamily = 'Arial';
14752
+ var measureOutlineText = null;
14753
+ var measureOutlineTextBg = null;
14754
+ var measurePrecision = 0; // decimal symbols. TODO - calibration!
14755
+ var measureUnit = 'mm'; // TODO - calibration!
14756
+ var measurePxScale = 1; // TODO - calibration!
14757
+ var measureLast = null;
14758
+
14710
14759
  var arrowMarkerAngle = 45;
14711
14760
  var arrowMarkerSize = 30;
14712
14761
 
14713
14762
  function initSketchpadCanvasByPageNr(pageNr) {
14714
14763
  $('#svgsketch-'+pageNr).svg({onLoad: function(svg) {
14715
- sketchpad[pageNr] = svg;
14716
- var surface = svg.rect(0, 0, '100%', '100%', {id: 'surface-'+pageNr, fill: 'transparent'});
14717
- $(surface).mousedown(function(eMousedown) {
14718
- startDrag(eMousedown, pageNr);
14719
- }).mousemove(function(eMousemove) {
14720
- dragging(eMousemove, pageNr);
14721
- }).mouseup(function(eMouseup) {
14722
- endDrag(eMouseup, pageNr);
14723
- });
14724
- resetSize(svg, '100%', '100%');
14764
+ sketchpad[pageNr] = svg;
14765
+ var surface = svg.rect(0, 0, '100%', '100%', {id: 'surface-'+pageNr, fill: 'transparent'});
14766
+
14767
+ createMeasureLineMarker(pageNr);
14768
+ createMeasureTxtFilterBg(pageNr);
14769
+
14770
+ $(surface).mousedown(function(eMousedown) {
14771
+ sketchpadCanvasMousedownHandler(eMousedown, pageNr);
14772
+ }).mousemove(function(eMousemove) {
14773
+ sketchpadCanvasMousemoveHandler(eMousemove, pageNr)
14774
+ }).mouseup(function(eMouseup) {
14775
+ sketchpadCanvasMouseupHandler(eMouseup, pageNr);
14776
+ });
14777
+
14778
+ resetSize(svg, '100%', '100%');
14725
14779
  }
14726
14780
  });
14727
14781
  }
14728
14782
 
14783
+ function sketchpadCanvasMouseupHandler(eMouseup, pageNr) {
14784
+ if(isSketchpadActive) {
14785
+ endDrag(eMouseup, pageNr);
14786
+ } else if(isSketchpadMeasureActive) {
14787
+ endDragMeasure(eMouseup, pageNr);
14788
+ }
14789
+ }
14790
+
14791
+ function sketchpadCanvasMousemoveHandler(eMousemove, pageNr) {
14792
+ if(isSketchpadActive) {
14793
+ dragging(eMousemove, pageNr);
14794
+ } else if(isSketchpadMeasureActive) {
14795
+ draggingMeasure(eMousemove, pageNr);
14796
+ }
14797
+ }
14798
+
14799
+ function sketchpadCanvasMousedownHandler(eMousedown, pageNr) {
14800
+ if(isSketchpadActive) {
14801
+ startDrag(eMousedown, pageNr);
14802
+ } else if(isSketchpadMeasureActive) {
14803
+ startDragMeasure(eMousedown, pageNr);
14804
+ }
14805
+ }
14806
+
14807
+ function startDragMeasure(event, pageNr) {
14808
+ startDrag(event, pageNr);
14809
+ }
14810
+
14811
+ function isMeasureLine() {
14812
+ return $('#btnMeasureLine').hasClass('active');
14813
+ }
14814
+
14815
+ function isMeasureArea() {
14816
+ return $('#btnMeasureArea').hasClass('active');
14817
+ }
14818
+
14819
+ function getOutlineMeasureSettings() {
14820
+ var settings = {
14821
+ fill: measureFillVal,
14822
+ stroke: measureStrokeColorVal,
14823
+ strokeWidth: measureStrokeWidthVal,
14824
+ id: 'tmpOutlineMeasure'
14825
+ };
14826
+
14827
+ return settings;
14828
+ }
14829
+
14830
+ function getMeasureTextSettings() {
14831
+ var settings = {
14832
+ fontFamily: measureFontFamily,
14833
+ fontSize: measureFontSize,
14834
+ fill: measureStrokeColorVal,
14835
+ id: 'tmpOutlineMeasureTxt',
14836
+ 'font-weight': 'bold',
14837
+ 'text-anchor': 'middle'
14838
+ };
14839
+
14840
+ return settings;
14841
+ }
14842
+
14843
+ function getMeasureLineMarkerSettings() {
14844
+ var settings = {
14845
+ fill: measureFillVal,
14846
+ stroke: measureStrokeColorVal
14847
+ };
14848
+
14849
+ return settings;
14850
+ }
14851
+
14852
+ function createMeasureLineMarker(pageNr) {
14853
+ var measureLineMarkerStart = sketchpad[pageNr].marker('measureLineMarker'+pageNr, 2, 2, 4, 4, 'auto', getMeasureLineMarkerSettings());
14854
+ sketchpad[pageNr].path(measureLineMarkerStart, 'M 2 0 L 2 4 M 0 4 L 4 0');
14855
+ }
14856
+
14857
+ function createMeasureTxtFilterBg(pageNr) {
14858
+ var defs = sketchpad[pageNr].defs();
14859
+ var filter = sketchpad[pageNr].filter(defs, 'txtFilterBg', 0, 0, 1, 1);
14860
+ var filterHtml = '<feFlood flood-color="rgba(255,255,255, 0.85)" result="bg" />' +
14861
+ ' <feMerge>' +
14862
+ ' <feMergeNode in="bg"/>' +
14863
+ ' <feMergeNode in="SourceGraphic"/>' +
14864
+ ' </feMerge>';
14865
+ $(filter).html(filterHtml);
14866
+ }
14867
+
14868
+ function draggingMeasure(event, pageNr) {
14869
+ if (!drawStart) {
14870
+ return;
14871
+ }
14872
+
14873
+ if (!outline) {
14874
+ var outlineSettings = getOutlineMeasureSettings();
14875
+ var outlineTextSettings = getMeasureTextSettings();
14876
+ outlineTextSettings.style = 'pointer-events: none; user-select: none;';
14877
+ outlineTextSettings.filter = 'url(#txtFilterBg)';
14878
+
14879
+ if(isMeasureLine()) {
14880
+ // TODO: Path? - connectors for edit mode
14881
+ // Measure Line
14882
+ outlineSettings.markerStart = 'url(#measureLineMarker'+pageNr+')';
14883
+ outlineSettings.markerEnd = 'url(#measureLineMarker'+pageNr+')';
14884
+ outline = sketchpad[pageNr].line(0, 0, 0, 0, outlineSettings);
14885
+ // Measure Text
14886
+ measureOutlineText = sketchpad[pageNr].text(0, 0, '', outlineTextSettings);
14887
+ } else if(isMeasureArea()) {
14888
+ outline = sketchpad[pageNr].rect(0, 0, 0, 0, outlineSettings);
14889
+ measureOutlineText = sketchpad[pageNr].text('', outlineTextSettings);
14890
+ }
14891
+
14892
+ $(outline).mouseup(function(e) {
14893
+ endDragMeasure(e, pageNr);
14894
+ });
14895
+ }
14896
+
14897
+ var otlineMeasureLabel;
14898
+ var textWidth;
14899
+ var textHeight;
14900
+
14901
+ if(isMeasureLine()) {
14902
+ sketchpad[pageNr].change(outline, {
14903
+ x1: drawStart.X,
14904
+ y1: drawStart.Y,
14905
+ x2: (event.clientX - offset.left),
14906
+ y2: (event.clientY - offset.top)
14907
+ });
14908
+
14909
+ otlineMeasureLabel = getMeasureLineLabelByCoords(event.clientX, event.clientY);
14910
+ $(sketchpad[pageNr].getElementById('tmpOutlineMeasureTxt')).html(otlineMeasureLabel);
14911
+
14912
+ textWidth = measureOutlineText.getBBox().width;
14913
+ textHeight = measureOutlineText.getBBox().height;
14914
+
14915
+ textX = (drawStart.X + event.clientX - offset.left)/2;
14916
+ textY = (drawStart.Y + event.clientY - offset.top)/2 + getMeasureLineTxtShiftY(drawStart.Y, event.clientY-offset.top);
14917
+
14918
+ } else if(isMeasureArea()) {
14919
+ var outlineWidth = Math.abs(event.clientX - offset.left - drawStart.X);
14920
+ var outlineHeight = Math.abs(event.clientY - offset.top - drawStart.Y);
14921
+
14922
+ sketchpad[pageNr].change(outline, {
14923
+ x: Math.min(event.clientX - offset.left, drawStart.X),
14924
+ y: Math.min(event.clientY - offset.top, drawStart.Y),
14925
+ width: outlineWidth,
14926
+ height: outlineHeight
14927
+ });
14928
+
14929
+ otlineMeasureLabel = getMeasureAreaLabelBySize(outlineWidth, outlineHeight);
14930
+ $(sketchpad[pageNr].getElementById('tmpOutlineMeasureTxt')).html(otlineMeasureLabel);
14931
+
14932
+ textWidth = measureOutlineText.getBBox().width;
14933
+ textHeight = measureOutlineText.getBBox().height;
14934
+
14935
+ textX = (drawStart.X + event.clientX - offset.left)/2;
14936
+ if(textWidth+10 > outlineWidth || textHeight+10 > outlineHeight) {
14937
+ textY = Math.min(event.clientY - offset.top, drawStart.Y) - 10;
14938
+ } else {
14939
+ textY = (drawStart.Y + event.clientY - offset.top)/2 + 5;
14940
+ }
14941
+ }
14942
+
14943
+ sketchpad[pageNr].change(measureOutlineText, {x:textX, y:textY});
14944
+
14945
+ if(isMeasureLine()) {
14946
+ setMeasureLast(textX, textY, textWidth, textHeight, otlineMeasureLabel, getMeasureLinePxVal(event.clientX, event.clientY), 'line');
14947
+ } else if(isMeasureArea()) {
14948
+ setMeasureLast(textX, textY, textWidth, textHeight, otlineMeasureLabel, getMeasureAreaPxVal(outlineWidth, outlineHeight), 'rect');
14949
+ }
14950
+
14951
+ event.preventDefault();
14952
+ }
14953
+
14954
+ function getMeasureAreaLabelBySize(width, height) {
14955
+ var measureVal = getMeasureAreaPxVal(width, height);
14956
+ measureVal = getMeasureValSq(measureVal);
14957
+ var measureLabel = getMeasureAreaLabel(measureVal);
14958
+ return measureLabel;
14959
+ }
14960
+
14961
+ function getMeasureAreaPxVal(width, height) {
14962
+ var areaVal = (width*height)/Math.pow(getPdfCanvasScale(), 2);
14963
+ return areaVal;
14964
+ }
14965
+
14966
+ function setMeasureLast(textX, textY, textW, textH, otlineMeasureLabel, pxVal, measureType) {
14967
+ measureLast = {
14968
+ txt: {
14969
+ x: textX,
14970
+ y: textY,
14971
+ label: otlineMeasureLabel,
14972
+ width: textW,
14973
+ height: textH
14974
+ },
14975
+ pxVal: pxVal,
14976
+ type: measureType
14977
+ };
14978
+ }
14979
+
14980
+ function getMeasureLineTxtShiftY(yStart, y) {
14981
+ if(Math.abs(y - yStart) > 10) {
14982
+ return 5;
14983
+ } else {
14984
+ return -10;
14985
+ }
14986
+ }
14987
+
14988
+ function getMeasureLineLabel(measureVal) {
14989
+ var measureTxtVal = ' <tspan class="measure-val-lbl">' + measureVal + '</tspan>' + ' <tspan class="measure-unit-lbl">' + measureUnit + '</tspan>';
14990
+ return measureTxtVal;
14991
+ }
14992
+
14993
+ function getMeasureAreaLabel(measureVal) {
14994
+ var measureTxtVal = ' <tspan class="measure-val-lbl">' + measureVal + '</tspan>'
14995
+ + ' <tspan class="measure-unit-lbl">' + measureUnit + '<tspan font-size="'+(measureFontSize-4)+'" dy="-6">2</tspan></tspan>';
14996
+ return measureTxtVal;
14997
+ }
14998
+
14999
+ function getMeasureLineLabelByCoords(clientX, clientY) {
15000
+ var measureVal = getMeasureLinePxVal(clientX, clientY);
15001
+ measureVal = getMeasureVal(measureVal);
15002
+ var measureLabel = getMeasureLineLabel(measureVal);
15003
+ return measureLabel;
15004
+ }
15005
+
15006
+ function getMeasureLinePxVal(clientX, clientY) {
15007
+ var measureVal = Math.sqrt(Math.pow(Math.abs(clientX - offset.left - drawStart.X), 2) + Math.pow(Math.abs(clientY - offset.top - drawStart.Y), 2))/getPdfCanvasScale();
15008
+ return measureVal;
15009
+ }
15010
+
15011
+ function getMeasureValSqWithPxScale(measurePxVal) {
15012
+ var measureVal = measurePxVal*Math.pow(measurePxScale, 2);
15013
+ return measureVal;
15014
+ }
15015
+
15016
+ function getMeasureValWithPxScale(measurePxVal) {
15017
+ var measureVal = measurePxVal*measurePxScale;
15018
+ return measureVal;
15019
+ }
15020
+
15021
+ function getMeasureValWithPrecision(measureVal) {
15022
+ if(measurePrecision) {
15023
+ measureVal = measureVal.toFixed(measurePrecision);
15024
+ } else {
15025
+ measureVal = Math.round(measureVal);
15026
+ }
15027
+
15028
+ return measureVal;
15029
+ }
15030
+
15031
+ function getMeasureValSq(measurePxVal) {
15032
+ var measureVal = getMeasureValSqByPx(measurePxVal);
15033
+ measureVal = getMeasureValSqWithPxScale(measureVal);
15034
+ measureVal = getMeasureValWithPrecision(measureVal);
15035
+ return measureVal;
15036
+ }
15037
+
15038
+ function getMeasureVal(measurePxVal) {
15039
+ var measureVal = getMeasureValByPx(measurePxVal);
15040
+ measureVal = getMeasureValWithPxScale(measureVal);
15041
+ measureVal = getMeasureValWithPrecision(measureVal);
15042
+ return measureVal;
15043
+ }
15044
+
15045
+ function getMeasureType() {
15046
+ if(isMeasureArea()) {
15047
+ return 'rect';
15048
+ } else {
15049
+ return 'line';
15050
+ }
15051
+ }
15052
+
15053
+ function endDragMeasure(event, pageNr) {
15054
+ if (!drawStart) {
15055
+ return;
15056
+ }
15057
+
15058
+ removeMeasureOutlineItems();
15059
+
15060
+ if(measureLast?.pxVal > 0) {
15061
+ var shape = getMeasureType();
15062
+ drawMeasure(drawStart.X, drawStart.Y, event.clientX - offset.left, event.clientY - offset.top, pageNr, shape);
15063
+ }
15064
+
15065
+ drawStart = null;
15066
+ event.preventDefault();
15067
+ }
15068
+
15069
+ function removeMeasureOutlineItems() {
15070
+ $(measureOutlineText).remove();
15071
+ $(measureOutlineTextBg).remove();
15072
+ $(outline).remove();
15073
+
15074
+ outline = null;
15075
+ measureOutlineText = null;
15076
+ measureOutlineTextBg = null;
15077
+ }
15078
+
14729
15079
  function resetSize(svg, width, height) {
14730
15080
  svg.configure({width: width || $(svg._container).width(),
14731
15081
  height: height || $(svg._container).height()});
@@ -14818,6 +15168,209 @@ function isShapeTypeArrow() {
14818
15168
  return ($('#btnDrawArrow').length && $('#btnDrawArrow').hasClass('toggled'));
14819
15169
  }
14820
15170
 
15171
+ function getMeasureGrpId() {
15172
+ // TODO
15173
+ var id = 'measure_'+Date.now();
15174
+ return id;
15175
+ }
15176
+
15177
+ function getMeasureShapeId(measureGrpId) {
15178
+ var id = measureGrpId + '_shape';
15179
+ return id;
15180
+ }
15181
+
15182
+ function getMeasureTxtId(measureGrpId) {
15183
+ var id = measureGrpId + '_txt';
15184
+ return id;
15185
+ }
15186
+
15187
+ function drawMeasure(x1, y1, x2, y2, pageNr, shape) {
15188
+ var left = Math.min(x1, x2);
15189
+ var top = Math.min(y1, y2);
15190
+ var right = Math.max(x1, x2);
15191
+ var bottom = Math.max(y1, y2);
15192
+
15193
+ var measureGrpId = getMeasureGrpId();
15194
+ var measureGrp = sketchpad[pageNr].group(measureGrpId);
15195
+
15196
+ var measureNode = null;
15197
+ var measureText = null;
15198
+
15199
+ var measureSettings = getOutlineMeasureSettings();
15200
+ measureSettings.id = getMeasureShapeId(measureGrpId);
15201
+
15202
+ var measureTextSettings = getMeasureTextSettings();
15203
+ measureTextSettings.id = getMeasureTxtId(measureGrpId);
15204
+ measureTextSettings.filter = 'url(#txtFilterBg)';
15205
+
15206
+ if (shape == 'rect') {
15207
+ measureNode = sketchpad[pageNr].rect(measureGrp, left, top, right - left, bottom - top, measureSettings);
15208
+ } else if (shape == 'line') {
15209
+ measureSettings.markerStart = 'url(#measureLineMarker'+pageNr+')';
15210
+ measureSettings.markerEnd = 'url(#measureLineMarker'+pageNr+')';
15211
+ measureNode = sketchpad[pageNr].line(measureGrp, x1, y1, x2, y2, measureSettings);
15212
+ }
15213
+
15214
+ //measureTextSettings.fontSize = measureTextSettings.fontSize*getPdfCanvasScale(); // ?
15215
+ measureText = sketchpad[pageNr].text(measureGrp, measureLast.txt.x, measureLast.txt.y, '', measureTextSettings);
15216
+ $(measureText).html(measureLast.txt.label);
15217
+
15218
+ // Bind context menu
15219
+ bindMeasureContextMenu(measureSettings.id);
15220
+ bindMeasureContextMenu(measureTextSettings.id);
15221
+
15222
+ var width = right - left;
15223
+ var height = bottom - top;
15224
+ var pagesRotation = getPdfPagesRotation();
15225
+ var direction = getDrawDirectionByPagesRotation(x1, y1, x2, y2, pagesRotation);
15226
+
15227
+ if(pagesRotation > 0) {
15228
+ var measureData = {
15229
+ pageNr: pageNr,
15230
+ position: {
15231
+ x: left,
15232
+ y: top
15233
+ },
15234
+ width: width,
15235
+ height: height
15236
+ };
15237
+ var measureSvgData = getNormalizedSvgData(measureData, pagesRotation);
15238
+
15239
+ var measureTxtSvgData = getMeasureTxtNormalizedSvgData(measureSvgData.position.x, measureSvgData.position.y, measureSvgData.width, measureSvgData.height,
15240
+ shape, measureLast.txt.width, measureLast.txt.height);
15241
+ setMeasure(pageNr, measureGrpId, measureGrp, measureSvgData.position.x, measureSvgData.position.y, measureSvgData.width, measureSvgData.height,
15242
+ shape, direction, measureLast.txt.label, {x:measureTxtSvgData.x, y:measureTxtSvgData.y, width:measureLast.txt.width, height: measureLast.txt.height},
15243
+ measureLast.pxVal);
15244
+ } else {
15245
+ setMeasure(pageNr, measureGrpId, measureGrp, left, top, width, height, shape, direction,
15246
+ measureLast.txt.label, {x:measureLast.txt.x, y:measureLast.txt.y, width:measureLast.txt.width, height: measureLast.txt.height},
15247
+ measureLast.pxVal);
15248
+ }
15249
+
15250
+ measureLast = null;
15251
+
15252
+ // TODO - save measure data to server
15253
+ saveMeasure(pageNr, measureGrpId);
15254
+
15255
+ $('#svgsketch-'+[pageNr]).focus();
15256
+ }
15257
+
15258
+ function getMeasureTxtNormalizedSvgData(measureX, measureY, measureW, measureH, measureType, txtW, txtH) {
15259
+ var textY;
15260
+ var textX = (2*measureX + measureW)/2;
15261
+
15262
+ if(measureType == 'line') {
15263
+ textY = (2*measureY + measureH)/2 + getMeasureLineTxtShiftY(measureY, measureY + measureH);
15264
+ } else if(measureType == 'rect') {
15265
+ if(txtW+10 > measureW || txtH+10 > measureH) {
15266
+ textY = measureY - 10;
15267
+ } else {
15268
+ textY = (2*measureY + measureH)/2 + 5;
15269
+ }
15270
+ }
15271
+
15272
+ var txtPosition = {
15273
+ x: textX,
15274
+ y: textY,
15275
+ width: txtW,
15276
+ height: txtH
15277
+ };
15278
+
15279
+ return txtPosition;
15280
+ }
15281
+
15282
+ // TODO - save measure data to server
15283
+ function saveMeasure(pageNr, measureGrpId) {
15284
+ // measuresNodes[pageNr][measureGrpId]
15285
+ }
15286
+
15287
+ function bindMeasureContextMenu(measureElmId) {
15288
+ $.contextMenu({
15289
+ selector: '.svgsketch-wrap.active.measures #'+measureElmId,
15290
+ trigger: 'left', // mouse button
15291
+ callback: function(key, options, e) {
15292
+ e.preventDefault();
15293
+ e.stopPropagation();
15294
+ $(document).trigger(key, [options.$trigger]);
15295
+ },
15296
+ items: {
15297
+ "deleteMeasure": {
15298
+ name: label_deleteMeasure,
15299
+ icon: 'delete'
15300
+ },
15301
+ "sep1": "---------",
15302
+ "quit": {
15303
+ name: label_cancel,
15304
+ icon: function(){
15305
+ return 'context-menu-icon context-menu-icon-quit';
15306
+ }
15307
+ }
15308
+ }
15309
+ });
15310
+ }
15311
+
15312
+ function bindDeleteMeasureEventHandler() {
15313
+ $(document).on('deleteMeasure', function(e, item) {
15314
+ var measureId = item.closest('g').attr('id');
15315
+ var pageNr = item.closest('.page').attr('data-page-number');
15316
+
15317
+ // TODO -> Ajax -> send data to server
15318
+ // ...
15319
+ // on success -> deleteMeasure
15320
+ deleteMeasure(measureId, pageNr);
15321
+ });
15322
+ }
15323
+
15324
+ function deleteMeasure(measureId, pageNr) {
15325
+ delete measuresNodes[pageNr][measureId];
15326
+ sketchpad[pageNr].getElementById(measureId).remove();
15327
+ }
15328
+
15329
+ function setMeasure(pageNr, measureGrpId, measureGrp, posX, posY, width, height, shapeType, direction, measureLabel, txtOptions, measurePxVal) {
15330
+ var scale = getPdfCanvasScale();
15331
+ if(!measuresNodes[pageNr]) {
15332
+ measuresNodes[pageNr] = {};
15333
+ }
15334
+
15335
+ measuresNodes[pageNr][measureGrpId] = {
15336
+ data: {
15337
+ id: measureGrpId,
15338
+ pageNr: pageNr,
15339
+ type: shapeType,
15340
+ position: {
15341
+ x: posX/scale,
15342
+ y: posY/scale,
15343
+ },
15344
+ direction: direction,
15345
+ width: width/scale,
15346
+ height: height/scale,
15347
+ stroke: {
15348
+ color: measureStrokeColorVal,
15349
+ width: measureStrokeWidthVal
15350
+ },
15351
+ fill: measureFillVal,
15352
+ measureLabel: {
15353
+ position: {
15354
+ x: txtOptions.x/scale,
15355
+ y: txtOptions.y/scale,
15356
+ },
15357
+ width: txtOptions.width,
15358
+ height: txtOptions.height,
15359
+ fontSize: measureFontSize,
15360
+ fontFamily: measureFontFamily,
15361
+ txt: measureLabel
15362
+ },
15363
+ measure: {
15364
+ pxVal: measurePxVal,
15365
+ pxScale: measurePxScale,
15366
+ unit: measureUnit,
15367
+ precision: measurePrecision
15368
+ }
15369
+ },
15370
+ nodeObj: measureGrp
15371
+ };
15372
+ }
15373
+
14821
15374
  /* Draw the selected element on the canvas */
14822
15375
  function drawShape(x1, y1, x2, y2, pageNr, shape) {
14823
15376
 
@@ -15196,6 +15749,68 @@ function loadSvgShape(svgData) {
15196
15749
 
15197
15750
  setDrawNodes(svgData.pageNr, svgData.id, node, svgData.position.x, svgData.position.y, svgData.width, svgData.height, svgData.type, direction);
15198
15751
  // }, 50);
15752
+ showNotesLayer();
15753
+ }
15754
+ }
15755
+
15756
+
15757
+ function loadMeasureShape(measure) {
15758
+ if(typeof measure === 'object' && measure !== null && measure !== false) {
15759
+
15760
+ var scale = getPdfCanvasScale();
15761
+ var pageNr = measure.data.pageNr;
15762
+ var shape = measure.data.type;
15763
+ var measureId = measure.data.id;
15764
+ var measureObj = $('#'+measureId);
15765
+
15766
+ var pagesRotation = getPdfPagesRotation();
15767
+ var nodeSvgData = measure.data;
15768
+
15769
+ if(pagesRotation > 0) {
15770
+ nodeSvgData = getSvgDataWithRotation(measure.data, pagesRotation, scale);
15771
+ }
15772
+
15773
+ if(measureObj.length) {
15774
+ sketchpad[pageNr].remove(measureObj);
15775
+ }
15776
+
15777
+ var x1 = nodeSvgData.position.x*scale;
15778
+ var x2 = x1 + nodeSvgData.width*scale;
15779
+ var y1 = nodeSvgData.position.y*scale;
15780
+ var y2 = y1 + nodeSvgData.height*scale;
15781
+
15782
+ var direction = ('direction' in measure.data) ? measure.data.direction : false;
15783
+
15784
+ var measureGrp = sketchpad[pageNr].group(measureId);
15785
+
15786
+ var measureNode = null;
15787
+ var measureText = null;
15788
+
15789
+ var measureSettings = getOutlineMeasureSettings();
15790
+ measureSettings.id = getMeasureShapeId(measureId);
15791
+
15792
+ var measureTextSettings = getMeasureTextSettings();
15793
+ measureTextSettings.id = getMeasureTxtId(measureId);
15794
+ measureTextSettings.filter = 'url(#txtFilterBg)';
15795
+
15796
+ if (shape == 'rect') {
15797
+ measureNode = sketchpad[pageNr].rect(measureGrp, x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale, measureSettings);
15798
+ } else if (shape == 'line') {
15799
+ measureSettings.markerStart = 'url(#measureLineMarker'+pageNr+')';
15800
+ measureSettings.markerEnd = 'url(#measureLineMarker'+pageNr+')';
15801
+ var linePos = getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation);
15802
+ measureNode = sketchpad[pageNr].line(measureGrp, linePos[0], linePos[1], linePos[2], linePos[3], measureSettings);
15803
+ }
15804
+
15805
+ var measureTxtData = getMeasureTxtNormalizedSvgData(x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale,
15806
+ shape, measure.data.measureLabel.width, measure.data.measureLabel.height);
15807
+
15808
+ //measureTextSettings.fontSize = measureTextSettings.fontSize*getPdfCanvasScale(); // ?
15809
+ measureText = sketchpad[pageNr].text(measureGrp, measureTxtData.x, measureTxtData.y, '', measureTextSettings);
15810
+
15811
+ $(measureText).html(nodeSvgData.measureLabel.txt);
15812
+
15813
+ measuresNodes[pageNr][measureId].nodeObj = measureGrp;
15199
15814
  }
15200
15815
  }
15201
15816
 
@@ -15345,6 +15960,9 @@ function initSketchpadButtons() {
15345
15960
  initSketchpadBtnDrawCloud();
15346
15961
  initSketchpadBtnDrawLine();
15347
15962
  initSketchpadBtnDrawArrow();
15963
+
15964
+ initSketchpadMeasureButtons();
15965
+ bindDeactivateMenuSketchpadDrawButtons();
15348
15966
  }
15349
15967
 
15350
15968
  function initBtnDrawAnnotation() {
@@ -15353,6 +15971,8 @@ function initBtnDrawAnnotation() {
15353
15971
  btn.on('click', function() {
15354
15972
  $(this).toggleClass('toggled');
15355
15973
  if($(this).hasClass('toggled')) {
15974
+ untoggleBtnsMeasure();
15975
+ hideMeasureToolbar();
15356
15976
  activateDrawAnnotation();
15357
15977
  } else {
15358
15978
  deactivateDrawAnnotation();
@@ -15363,7 +15983,6 @@ function initBtnDrawAnnotation() {
15363
15983
 
15364
15984
  function initBtnDrawAnnotationToolbar() {
15365
15985
  var btnDrawAnnotationToolbar = $('#btnDrawAnnotationToolbarToggle');
15366
- var btnDrawAnnotation = $('#btnDrawAnnotation');
15367
15986
  btnDrawAnnotationToolbar.on('click', function() {
15368
15987
  $(this).toggleClass('toggled');
15369
15988
  if($(this).hasClass('toggled')) {
@@ -15372,17 +15991,6 @@ function initBtnDrawAnnotationToolbar() {
15372
15991
  hideDrawAnnotationToolbar();
15373
15992
  }
15374
15993
  });
15375
- $(document).on('click', '#btnCompare, #presentationMode, #print, #btnToggleNotes', function(e) {
15376
- hideDrawAnnotationToolbar();
15377
- btnDrawAnnotation.removeClass('toggled');
15378
- btnDrawAnnotationToolbar.removeClass('toggled');
15379
- if(($(this).attr('id') == 'btnToggleNotes' && !$(this).hasClass('show')) || $(this).attr('id') != 'btnToggleNotes') {
15380
- deactivateDrawAnnotation();
15381
- btnDrawAnnotation.prop('disabled', false);
15382
- } else if($(this).attr('id') == 'btnToggleNotes' && $(this).hasClass('show')) {
15383
- btnDrawAnnotation.prop('disabled', true);
15384
- }
15385
- });
15386
15994
  $(document).on('click', '#secondaryToolbarToggle', function(e) {
15387
15995
  hideDrawAnnotationToolbar();
15388
15996
  btnDrawAnnotationToolbar.removeClass('toggled');
@@ -15390,6 +15998,45 @@ function initBtnDrawAnnotationToolbar() {
15390
15998
  bindDrawAnnotationToolbarPositionOnWindowResize();
15391
15999
  }
15392
16000
 
16001
+ function bindDeactivateMenuSketchpadDrawButtons() {
16002
+ $(document).on('click', '#btnCompare, #presentationMode, #print, #btnToggleNotes, #btnToggleMeasures', function(e) {
16003
+ deactivateMenuSketchpadDrawAnnotationsButtons($(this));
16004
+ deactivateMenuSketchpadDrawMeasuresButtons($(this));
16005
+ });
16006
+ }
16007
+
16008
+ function deactivateMenuSketchpadDrawAnnotationsButtons(elm) {
16009
+ var btnDrawAnnotation = $('#btnDrawAnnotation');
16010
+ var btnDrawAnnotationToolbar = $('#btnDrawAnnotationToolbarToggle');
16011
+
16012
+ hideDrawAnnotationToolbar();
16013
+ if(elm.attr('id') != 'btnToggleMeasures') {
16014
+ btnDrawAnnotation.removeClass('toggled');
16015
+ }
16016
+ btnDrawAnnotationToolbar.removeClass('toggled');
16017
+
16018
+ if((elm.attr('id') == 'btnToggleNotes' && !elm.hasClass('show')) || elm.attr('id') != 'btnToggleNotes') {
16019
+ deactivateDrawAnnotation();
16020
+ btnDrawAnnotation.prop('disabled', false);
16021
+ } else if(elm.attr('id') == 'btnToggleNotes' && elm.hasClass('show')) {
16022
+ btnDrawAnnotation.prop('disabled', true);
16023
+ }
16024
+ }
16025
+
16026
+ function deactivateMenuSketchpadDrawMeasuresButtons(elm) {
16027
+ var btnMeasuresToolbar = $('#btnMeasure');
16028
+ if( elm.attr('id') != 'btnToggleNotes') {
16029
+ untoggleBtnsMeasure();
16030
+ hideMeasureToolbar();
16031
+ }
16032
+
16033
+ if((elm.attr('id') == 'btnToggleMeasures' && !elm.hasClass('show')) || elm.attr('id') != 'btnToggleMeasures') {
16034
+ btnMeasuresToolbar.prop('disabled', false);
16035
+ } else if(elm.attr('id') == 'btnToggleMeasures' && elm.hasClass('show')) {
16036
+ btnMeasuresToolbar.prop('disabled', true);
16037
+ }
16038
+ }
16039
+
15393
16040
  function activateDrawAnnotation() {
15394
16041
  var svgsketchWrap = $('.svgsketch-wrap');
15395
16042
  svgsketchWrap.addClass('active');
@@ -15469,9 +16116,92 @@ function bindSketchpadBtnOnclilckHandler(btnId, typeCssClass) {
15469
16116
  $('.btn-draw-annotation').not('#'+t_.attr('id')).removeClass('toggled');
15470
16117
  $('#btnDrawAnnotation').removeClass('rect ellipse polygon cloud line arrow').addClass(typeCssClass);
15471
16118
  hideDrawAnnotationToolbar();
16119
+ $('#btnDrawAnnotation').addClass('toggled');
16120
+ activateDrawAnnotation();
15472
16121
  });
15473
16122
  }
15474
16123
 
16124
+ function initSketchpadMeasureButtons() {
16125
+ bindToggleMeasures();
16126
+ bindMeasureToolbarBtnOnclickHandler();
16127
+ bindMeasureLineBtnOnclickHandler();
16128
+ bindMeasureAreaBtnOnclickHandler();
16129
+ }
16130
+
16131
+ function bindMeasureToolbarBtnOnclickHandler() {
16132
+ $(document).on('click', '#btnMeasure', function() {
16133
+ $(this).toggleClass('toggled');
16134
+ toggleMeasureToolbar();
16135
+ if($(this).hasClass('toggled')) {
16136
+ untoggleBtnsDrawNote();
16137
+ activateMeasuresSketchpad();
16138
+ } else {
16139
+ $('.svgsketch-wrap').removeClass('active').removeClass('measures');
16140
+ $('.measure-toolbar-btn').removeClass('active');
16141
+ }
16142
+ });
16143
+ }
16144
+
16145
+ function hideMeasureToolbar() {
16146
+ $('.measure-toolbar').removeClass('active');
16147
+ }
16148
+
16149
+ function toggleMeasureToolbar() {
16150
+ $('.measure-toolbar').toggleClass('active');
16151
+ }
16152
+
16153
+ function untoggleBtnsMeasure() {
16154
+ $('.measure-toolbar-btn').removeClass('active');
16155
+ $('#btnMeasure').removeClass('toggled');
16156
+ $('.svgsketch-wrap').removeClass('measures');
16157
+ isSketchpadMeasureActive = false;
16158
+ }
16159
+
16160
+ // TODO - перепроверить!!!!!
16161
+ function untoggleBtnsDrawNote() {
16162
+ //$('.btn-draw-annotation').removeClass('toggled');
16163
+ hideDrawAnnotationToolbar();
16164
+ $('#btnDrawAnnotation').removeClass('toggled');
16165
+ isSketchpadActive = false;
16166
+ }
16167
+ //
16168
+
16169
+ function getSvgSketchWrap() {
16170
+ return $('.svgsketch-wrap');
16171
+ }
16172
+
16173
+ function activateMeasuresSketchpad() {
16174
+ $('.svgsketch-wrap').addClass('active').addClass('measures');
16175
+ $('#cursorSelectTool').click();
16176
+ }
16177
+
16178
+ function bindMeasureBtnOnclickHandler(btnId, fnActive) {
16179
+ $(document).on('click', '#'+btnId, function() {
16180
+ $(this).toggleClass('active');
16181
+ if($(this).hasClass('active')) {
16182
+ var t_ = $(this);
16183
+ $('.measure-toolbar-btn').not('#'+t_.attr('id')).removeClass('active');
16184
+
16185
+ isSketchpadMeasureActive = true;
16186
+ $('.svgsketch-wrap').addClass('active');
16187
+ if($.isFunction(fnActive)) {
16188
+ fnActive();
16189
+ }
16190
+ } else {
16191
+ $('.svgsketch-wrap').removeClass('active');
16192
+ isSketchpadMeasureActive = false;
16193
+ }
16194
+ });
16195
+ }
16196
+
16197
+ function bindMeasureLineBtnOnclickHandler() {
16198
+ bindMeasureBtnOnclickHandler('btnMeasureLine', false);
16199
+ }
16200
+
16201
+ function bindMeasureAreaBtnOnclickHandler() {
16202
+ bindMeasureBtnOnclickHandler('btnMeasureArea', false);
16203
+ }
16204
+
15475
16205
  function rotateRect90dg(rectPos, rectW, rectH, pageW) {
15476
16206
  var result = {
15477
16207
  position: {
@@ -15548,6 +16278,242 @@ function normalizeRect270dg(rectPos, rectW, rectH, pageH) {
15548
16278
  };
15549
16279
 
15550
16280
  return result;
16281
+ }
16282
+
16283
+ function initMeasures() {
16284
+ bindDeleteMeasureEventHandler();
16285
+
16286
+ // TODO -> load and set measures settings
16287
+ initMeasuresSettings();
16288
+ // TODO - load and set measures data
16289
+ initMeasuresData();
16290
+
16291
+ $(document).on('webViewerPageRendered', function(e, pageNr) {
16292
+ initMeasuresByPageNr(pageNr);
16293
+
16294
+ if($('#btnMeasure').hasClass('toggled')) {
16295
+ $('.svgsketch-wrap').addClass('active').addClass('measures');
16296
+ }
16297
+ });
16298
+
16299
+ initDlgMeasures();
16300
+ }
16301
+
16302
+ // TODO - load and set measures data
16303
+ function initMeasuresData() {
16304
+ // measuresNodes = ...;
16305
+ }
16306
+
16307
+ // TODO -> load and set measures settings
16308
+ function initMeasuresSettings() {
16309
+ // measurePrecision = ...; // TODO
16310
+ // measureUnit = ...; // TODO
16311
+ // measurePxScale = ...; // TODO
16312
+ }
16313
+
16314
+ function initMeasuresByPageNr(pageNr) {
16315
+ doInitMeasuresByPageNr(pageNr);
16316
+ }
16317
+
16318
+ function doInitMeasuresByPageNr(pageNr) {
16319
+ var measuresList = measuresNodes[pageNr];
16320
+ $.each(measuresList, function(index, options) {
16321
+ loadMeasureShape(options);
16322
+ });
16323
+ }
16324
+
16325
+ function getMeasureValSqByPx(px) {
16326
+ if(measureUnit == 'mm') {
16327
+ return getMeasureMmValSqByPx(px);
16328
+ } else if(measureUnit == 'cm') {
16329
+ return getMeasureCmValSqByPx(px);
16330
+ } else if(measureUnit == 'm') {
16331
+ return getMeasureMValSqByPx(px);
16332
+ }
16333
+ }
16334
+
16335
+ function getMeasureMmValSqByPx(pxSq) {
16336
+ var pixelRatio = getDevicePixelRatio();
16337
+ var dpi = getDeviceDpi();
16338
+ var mmValSq = (pxSq*Math.pow(25.4, 2))/Math.pow((dpi/pixelRatio), 2);
16339
+
16340
+ return mmValSq;
16341
+ }
16342
+
16343
+ function getMeasureCmValSqByPx(pxSq) {
16344
+ var cmValSq = getMeasureMmValSqByPx(pxSq)*0.01;
16345
+
16346
+ return cmValSq;
16347
+ }
16348
+
16349
+ function getMeasureMValSqByPx(pxSq) {
16350
+ var mValSq = getMeasureMmValSqByPx(pxSq)*0.000001;
16351
+
16352
+ return mValSq;
16353
+ }
16354
+
16355
+ function getMeasureValByPx(px) {
16356
+ if(measureUnit == 'mm') {
16357
+ return getMeasureMmValByPx(px);
16358
+ } else if(measureUnit == 'cm') {
16359
+ return getMeasureCmValByPx(px);
16360
+ } else if(measureUnit == 'm') {
16361
+ return getMeasureMValByPx(px);
16362
+ }
16363
+ }
16364
+
16365
+ function getMeasureMmValByPx(px) {
16366
+ var pixelRatio = getDevicePixelRatio();
16367
+ var dpi = getDeviceDpi();
16368
+ var mmVal = (px * 25.4) / (dpi/pixelRatio);
16369
+
16370
+ return mmVal;
16371
+ }
16372
+
16373
+ function getMeasureCmValByPx(px) {
16374
+ var cmVal = getMeasureMmValByPx(px)*0.1;
16375
+ return cmVal;
16376
+ }
16377
+
16378
+ function getMeasureMValByPx(px) {
16379
+ var mVal = getMeasureMmValByPx(px)*0.001;
16380
+ return mVal;
16381
+ }
16382
+
16383
+ function getDevicePixelRatio() {
16384
+ var devicePixelRatio = window.devicePixelRatio;
16385
+ if(devicePixelRatio) {
16386
+ return devicePixelRatio;
16387
+ } else {
16388
+ return 1;
16389
+ }
16390
+ }
16391
+
16392
+ function getDeviceDpi() {
16393
+ var dpi = Detector.dpi;
16394
+ if(dpi) {
16395
+ return dpi;
16396
+ } else {
16397
+ return 96;
16398
+ }
16399
+ }
16400
+
16401
+ function initDlgMeasures() {
16402
+ bindBtnMeasureSettingsOnclickHandler();
16403
+ bindButtonsDlgMeasuresOnclickHandler();
16404
+ }
16405
+ function bindBtnMeasureSettingsOnclickHandler() {
16406
+ $('#btnMeasuresSettings').on('click', function() {
16407
+ showDlgOverlay();
16408
+ showDlgMeasureSettings();
16409
+ });
16410
+ }
16411
+
16412
+ function showDlgMeasureSettings() {
16413
+ $('.measures-dlg-wrap').show();
16414
+ }
16415
+
16416
+ function hideDlgMeasureSettings() {
16417
+ $('.measures-dlg-wrap').hide();
16418
+ }
16419
+
16420
+ function bindButtonsDlgMeasuresOnclickHandler() {
16421
+ bindDlgMeasuresBtnSave();
16422
+ bindBtnDlgMeasuresCancel();
16423
+ bindBtnDlgMeasuresClose();
16424
+ }
16425
+
16426
+ function bindDlgMeasuresBtnSave() {
16427
+ $('#btnMeasuresSettingsSave').on('click', function() {
16428
+ saveMeasuresSettings();
16429
+ });
16430
+ }
16431
+
16432
+ function saveMeasuresSettings() {
16433
+ var scaleNew = parseInt($('#measuresScale').val());
16434
+ var unitsNew = $('#measuresUnits').val();
16435
+ var precisionNew = parseInt($('#measuresPrecision').val());
16436
+
16437
+ if(scaleNew != measurePxScale || unitsNew != measureUnit || precisionNew != measurePrecision) {
16438
+ measurePxScale = scaleNew;
16439
+ measureUnit = unitsNew;
16440
+ measurePrecision = precisionNew;
16441
+
16442
+ // TODO
16443
+ doSaveMeasuresSettings();
16444
+ // TODO
16445
+ updateMeasuresData();
16446
+ }
16447
+ hideDlgOverlay();
16448
+ hideDlgMeasureSettings();
16449
+ }
16450
+
16451
+ // TODO - save to server
16452
+ function doSaveMeasuresSettings() {
16453
+ // measurePxScale
16454
+ // measureUnit
16455
+ // measurePrecision
16456
+ }
16457
+
16458
+ // TODO - update measures data and save to server
16459
+ function updateMeasuresData() {
16460
+ $.each(measuresNodes, function(indexPage, measuresNodesPage) {
16461
+ $.each(measuresNodesPage, function(indexItem, measuresNodesPageItem){
16462
+ updateMeasure(measuresNodesPageItem);
16463
+ // TODO - save to server
16464
+ // measuresNodesPageItem['data']
16465
+ });
16466
+ });
16467
+ }
16468
+
16469
+ function updateMeasure(measure) {
16470
+ measure['data']['measure']['pxScale'] = measurePxScale;
16471
+ measure['data']['measure']['unit'] = measureUnit;
16472
+ measure['data']['measure']['precision'] = measurePrecision;
16473
+
16474
+ var measureVal;
16475
+ var measureLabel;
16476
+
16477
+ if(measure['data']['type'] == 'line') {
16478
+ measureVal = getMeasureVal(measure['data']['measure']['pxVal']);
16479
+ measureLabel = getMeasureLineLabel(measureVal);
16480
+ } else if(measure['data']['type'] == 'rect') {
16481
+ measureVal = getMeasureValSq(measure['data']['measure']['pxVal']);
16482
+ measureLabel = getMeasureAreaLabel(measureVal);
16483
+ }
16484
+
16485
+ measure['data']['measureLabel']['txt'] = measureLabel;
16486
+
16487
+ var pageNr = measure['data']['pageNr'];
16488
+
16489
+ if(sketchpad[pageNr] && sketchpad[pageNr].getElementById(getMeasureTxtId(measure['data']['id']))
16490
+ && $(sketchpad[pageNr].getElementById(getMeasureTxtId(measure['data']['id']))).length) {
16491
+
16492
+ var measureTxt = sketchpad[pageNr].getElementById(getMeasureTxtId(measure['data']['id']));
16493
+ $(measureTxt).html(measureLabel);
16494
+ measure['data']['measureLabel']['width'] = measureTxt.getBBox().width;
16495
+ }
16496
+ }
16497
+
16498
+ function bindBtnDlgMeasuresCancel() {
16499
+ $('#btnMeasuresSettingsCancel').click(function() {
16500
+ hideDlgOverlay();
16501
+ hideDlgMeasureSettings();
16502
+ });
16503
+ }
16504
+
16505
+ function bindBtnDlgMeasuresClose() {
16506
+ $('.measures-dlg-header .close').click(function() {
16507
+ hideDlgOverlay();
16508
+ hideDlgMeasureSettings();
16509
+ });
16510
+ }
16511
+
16512
+ function bindToggleMeasures() {
16513
+ $(document).on('click', '#btnToggleMeasures', function() {
16514
+ $('#viewer').toggleClass('hide-measures');
16515
+ $(this).toggleClass('show');
16516
+ });
15551
16517
  }
15552
16518
  var needZoomEventsTimeout = 250; // ms
15553
16519
  var scrollStoppedEventsTimeout = 200; // ms
@@ -15563,10 +16529,34 @@ var firstTimeRendered = false; // for first check
15563
16529
  var pages = {};
15564
16530
 
15565
16531
  function initZoomPage() {
16532
+ bindViewerZoomEventsHandler();
15566
16533
  bindZoomPageHandler();
15567
16534
  initZoomPageEvent();
15568
16535
  }
15569
16536
 
16537
+ function bindViewerZoomEventsHandler() {
16538
+ bindViewerSetScaleStartEventHandler();
16539
+ bindViewerZoomResetStartEventHandler();
16540
+ }
16541
+
16542
+ function bindViewerSetScaleStartEventHandler() {
16543
+ $(document).on('setScaleStart', function() {
16544
+ setZoomCanvasTransparent();
16545
+ hideNotesLayer();
16546
+ });
16547
+ }
16548
+
16549
+ function bindViewerZoomResetStartEventHandler() {
16550
+ $(document).on('zoomResetStart', function() {
16551
+ setZoomCanvasTransparent();
16552
+ hideNotesLayer();
16553
+ });
16554
+ }
16555
+
16556
+ function setZoomCanvasTransparent() {
16557
+ $('canvas.zoom').addClass('transparent');
16558
+ }
16559
+
15570
16560
  function initZoomPageEvent() {
15571
16561
  PDFViewerApplication.initializedPromise.then(function() {
15572
16562
  // PDFViewerApplication.eventBus.on('webviewerloaded', function(e) {
@@ -17445,15 +18435,22 @@ lbl_hide = context.createLocale('app.viewer.pdf.compare.panel.hide');
17445
18435
  lbl_comparisonWarning = context.createLocale('app.viewer.pdf.compare.warning');
17446
18436
 
17447
18437
 
18438
+ var label_deleteMeasure = context.createLocale('app.viewer.pdf.contextMenu.deleteMeasure');
18439
+ var label_cancel = context.createLocale('app.viewer.pdf.contextMenu.cancel');
17448
18440
  function initContextMenuCanvas() {
17449
18441
  var pages = '#viewer .page';
17450
18442
  $.contextMenu({
17451
18443
  selector: pages,
18444
+ trigger: 'right',
17452
18445
  items: {
17453
18446
  "addNote": {
17454
18447
  name: context.createLocale('app.viewer.pdf.contextMenu.addNote'),
17455
18448
  icon: "add"
17456
18449
  },
18450
+ /*"showTxt": {
18451
+ name: "Show / Hide Text",
18452
+ icon: "page-facing-up",
18453
+ },*/
17457
18454
  "sep1": "---------",
17458
18455
  "quit": {
17459
18456
  name: context.createLocale('app.viewer.pdf.contextMenu.cancel'),
@@ -17463,11 +18460,15 @@ function initContextMenuCanvas() {
17463
18460
  }
17464
18461
  },
17465
18462
  build: function ($triggerElement, e) {
17466
- return {
17467
- callback: function (key, options) {
17468
- $(document).trigger(key, [options, $triggerElement, e]);
17469
- }
17470
- };
18463
+ if ($('.svgsketch-wrap').hasClass('measures')) {
18464
+ return false;
18465
+ } else {
18466
+ return {
18467
+ callback: function (key, options) {
18468
+ $(document).trigger(key, [options, $triggerElement, e]);
18469
+ }
18470
+ };
18471
+ }
17471
18472
  }
17472
18473
  });
17473
18474
  }
@@ -17786,6 +18787,7 @@ function bindSelect(select) {
17786
18787
  let value = $(e.target).attr('value');
17787
18788
  let text = $(e.target).text();
17788
18789
  $(input).val(text);
18790
+ $(input).data('value', value)
17789
18791
  input.dispatchEvent(new CustomEvent('change', { detail: { value: value } }));
17790
18792
  $(select).removeClass('active');
17791
18793
  }
@@ -17817,6 +18819,7 @@ function bindBtnToggleSidebarNotes() {
17817
18819
 
17818
18820
  if ($(this).hasClass('toggled')) {
17819
18821
  if (!$('.body__sidebar').is(':visible')) {
18822
+ $('#outerContainer').addClass('sidebarNotesOpen');
17820
18823
  context.toggleIssueDetail(false);
17821
18824
  if ($('#btnDrawAnnotation').hasClass('toggled')) {
17822
18825
  $('#btnDrawAnnotation').click();
@@ -17825,11 +18828,20 @@ function bindBtnToggleSidebarNotes() {
17825
18828
  expandSidebarNotes();
17826
18829
  }
17827
18830
  } else {
18831
+ $('#outerContainer').removeClass('sidebarNotesOpen');
17828
18832
  $('.body__sidebar').hide();
17829
18833
  }
17830
18834
  });
17831
18835
  }
17832
18836
 
18837
+ function bindSidebarNotesClose() {
18838
+ $('.body__sidebar-close').on('click', function () {
18839
+ $('#outerContainer').removeClass('sidebarNotesOpen');
18840
+ $('.body__sidebar').hide();
18841
+ $('#btnToggleSidebarNotes').removeClass('toggled');
18842
+ });
18843
+ }
18844
+
17833
18845
  function saveNote(pageNr, $triggerElement, clickEvent, hasSvg, svgData) {
17834
18846
  var noteOptions = getNoteOptionsForSave('', pageNr, $triggerElement, clickEvent, hasSvg, svgData);
17835
18847
 
@@ -17977,7 +18989,7 @@ function initDlgForSvg(svgData) {
17977
18989
  saveNote(false, false, false, true, svgData);
17978
18990
  }
17979
18991
 
17980
- function setDrawNodes(pageNr, nodeId, node, posX, posY, width, height, shapeType, color) {
18992
+ function setDrawNodes(pageNr, nodeId, node, posX, posY, width, height, shapeType, direction, color) {
17981
18993
  var scale = getPdfCanvasScale();
17982
18994
  drawNodes[nodeId] = {
17983
18995
  data: {
@@ -17988,6 +19000,7 @@ function setDrawNodes(pageNr, nodeId, node, posX, posY, width, height, shapeType
17988
19000
  x: posX / scale,
17989
19001
  y: posY / scale,
17990
19002
  },
19003
+ direction: direction,
17991
19004
  width: width / scale,
17992
19005
  height: height / scale,
17993
19006
  stroke: {
@@ -18060,7 +19073,7 @@ function loadSvgShape(svgData) {
18060
19073
 
18061
19074
  var direction = ('direction' in svgData) ? svgData.direction : false;
18062
19075
 
18063
- setDrawNodes(svgData.pageNr, svgData.id, node, svgData.position.x, svgData.position.y, svgData.width, svgData.height, svgData.type, svgData.stroke.color);
19076
+ setDrawNodes(svgData.pageNr, svgData.id, node, svgData.position.x, svgData.position.y, svgData.width, svgData.height, svgData.type, direction, svgData.stroke.color);
18064
19077
  }
18065
19078
  }
18066
19079
 
@@ -18075,12 +19088,12 @@ function bindUpdatePage() {
18075
19088
  }
18076
19089
 
18077
19090
  function updatePage(e) {
18078
- let item = e.detail.itemList[0];
18079
- let markup = JSON.parse(item.fieldValueMap.markup);
18080
- let page = markup ? markup.pageNr : null;
19091
+ const item = e.detail.itemList[0];
19092
+ const markup = JSON.parse(item.fieldValueMap.markup);
19093
+ const page = markup ? markup.pageNr : null;
18081
19094
 
18082
19095
  if (e.type === context.deleteIssueEvent && markup) {
18083
- let markupData = { id: item.itemId, pageNr: page };
19096
+ const markupData = { id: item.fieldValueMap.item_id, pageNr: page };
18084
19097
  removeSvg(markupData);
18085
19098
  context.initIssueList();
18086
19099
  }
@@ -18094,7 +19107,7 @@ function updatePage(e) {
18094
19107
  siteId: item.siteId
18095
19108
  };
18096
19109
 
18097
- let event = new CustomEvent('vitro.item.changed', {
19110
+ const event = new CustomEvent('vitro.item.changed', {
18098
19111
  detail: {
18099
19112
  itemIdList: [itemId],
18100
19113
  listId: item.listId
@@ -18238,8 +19251,38 @@ function drawShape(x1, y1, x2, y2, pageNr, shape) {
18238
19251
  initDlgForSvg(drawNodes[nodeId]);
18239
19252
 
18240
19253
  deactivateDrawAnnotation();
19254
+ }
19255
+
19256
+ function saveMeasuresSettings() {
19257
+ var scaleNew = parseInt($('#measuresScale').data('value'));
19258
+ var unitsNew = $('#measuresUnits').data('value');
19259
+ var precisionNew = parseInt($('#measuresPrecision').data('value'));
19260
+
19261
+ let isChanged = false;
19262
+ if (scaleNew && scaleNew != measurePxScale) {
19263
+ measurePxScale = scaleNew;
19264
+ isChanged = true;
19265
+ }
19266
+
19267
+ if (unitsNew && unitsNew != measureUnit) {
19268
+ measureUnit = unitsNew;
19269
+ isChanged = true;
19270
+ }
19271
+
19272
+ if (precisionNew && precisionNew != measurePrecision) {
19273
+ measurePrecision = precisionNew;
19274
+ isChanged = true;
19275
+ }
19276
+
19277
+ if (isChanged) {
19278
+ // TODO
19279
+ doSaveMeasuresSettings();
19280
+ // TODO
19281
+ updateMeasuresData();
19282
+ }
19283
+ hideDlgOverlay();
19284
+ hideDlgMeasureSettings();
18241
19285
  }
18242
-
18243
19286
  $(document).ready(function() {
18244
19287
  context.openFile();
18245
19288
 
@@ -18252,6 +19295,9 @@ $(document).ready(function() {
18252
19295
  initSketchpadButtons();
18253
19296
 
18254
19297
  initNotes();
19298
+
19299
+ initMeasures();
19300
+
18255
19301
  bindSidebarNotesClose();
18256
19302
  bindBtnToggleSidebarNotes();
18257
19303