@vitrosoftware/common-ui-ts 1.1.227 → 1.1.229

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 (72) hide show
  1. package/css/std/controls/alert/alert.css +10 -47
  2. package/css/std/controls/bim-viewer/bim-viewer-index.css +4 -0
  3. package/css/std/controls/bim-viewer/style.css +4 -0
  4. package/css/std/controls/dialog/dialog-content.css +3 -0
  5. package/css/std/controls/dialog/dialog-footer.css +2 -0
  6. package/css/std/controls/dxf-viewer/common.css +4 -0
  7. package/css/std/controls/dxf-viewer/dxf-viewer-index.css +4 -0
  8. package/css/std/controls/field-iterator/field-iterator.css +6 -0
  9. package/css/std/controls/file/file.css +5 -4
  10. package/css/std/controls/filter/filter.css +1 -1
  11. package/css/std/controls/issue-tile/issue-tile-footer.css +1 -1
  12. package/css/std/controls/issue-tile/issue-tile-header.css +1 -1
  13. package/css/std/controls/issue-tile/issue-tile.css +1 -1
  14. package/css/std/controls/lookup-picker/lookup-picker-selected-item.css +0 -1
  15. package/css/std/controls/lookup-picker/lookup-picker-value-list.css +0 -1
  16. package/css/std/controls/lookup-picker/lookup-picker.css +38 -21
  17. package/css/std/controls/pdf-viewer/custom.css +4 -0
  18. package/css/std/controls/pdf-viewer/img/compare-dlg-separator.svg +3 -1
  19. package/css/std/controls/pdf-viewer/img/compare-dlg-title.svg +12 -0
  20. package/css/std/controls/pdf-viewer/pdf-viewer-index.css +217 -0
  21. package/css/std/controls/pdf-viewer/pdf-viewer.css +213 -0
  22. package/css/std/controls/select/select.css +26 -2
  23. package/css/std/controls/tab-group/tab-group.css +6 -3
  24. package/css/std/controls/table-view/table-view-custom-lookup-edit.css +1 -1
  25. package/css/std/controls/table-view/treegrid-cell.css +5 -0
  26. package/css/std/controls/table-view/treegrid-context-menu.css +22 -3
  27. package/css/std/controls/video-viewer/video-viewer.css +1 -1
  28. package/dist/index.css +101 -85
  29. package/dist/index.js +478 -344
  30. package/dist/index.js.map +1 -1
  31. package/dist/src/constants/Factory.d.ts +1 -0
  32. package/dist/src/controls/Alert/Alert.d.ts +0 -4
  33. package/dist/src/controls/BimViewer/BimViewer.d.ts +1 -0
  34. package/dist/src/controls/BimViewer/Viewer.d.ts +1 -0
  35. package/dist/src/controls/Dialog/Dialog.d.ts +2 -0
  36. package/dist/src/controls/Dialog/DialogContent.d.ts +1 -0
  37. package/dist/src/controls/DxfViewer/DxfViewer.d.ts +1 -0
  38. package/dist/src/controls/DxfViewer/Viewer.d.ts +1 -0
  39. package/dist/src/controls/IssueTile/IssueTile.d.ts +7 -5
  40. package/dist/src/controls/LookupPicker/LookupPicker.d.ts +2 -0
  41. package/dist/src/controls/LookupPicker/RightButtonGroup.d.ts +2 -2
  42. package/dist/src/controls/LookupPicker/ValueList.d.ts +2 -0
  43. package/dist/src/controls/MicroFrontend/MicroFrontend.d.ts +1 -2
  44. package/dist/src/controls/PdfViewer/services/PdfViewerService.d.ts +8 -0
  45. package/dist/src/controls/ScrollBar/ScrollBar.d.ts +4 -3
  46. package/dist/src/controls/Search/Search.d.ts +3 -2
  47. package/dist/src/controls/TabGroup/Tab.d.ts +3 -3
  48. package/dist/src/controls/TabGroup/TabGroup.d.ts +0 -1
  49. package/dist/src/controls/TabGroup/TabGroupComponent.d.ts +0 -1
  50. package/dist/src/controls/TabGroup/models/Tab.d.ts +2 -1
  51. package/dist/src/controls/TableView/TableView.d.ts +2 -0
  52. package/dist/src/controls/TableView/TableViewConstants.d.ts +8 -2
  53. package/dist/src/controls/TableView/models/TableViewMenuItem.d.ts +2 -0
  54. package/dist/src/controls/TableView/services/TableViewService.d.ts +5 -0
  55. package/dist/src/controls/TableView/services/impl/TableViewServiceImpl.d.ts +7 -1
  56. package/dist/src/controls/View/View.d.ts +1 -1
  57. package/dist/src/controls/ViewPart/ViewPart.d.ts +2 -1
  58. package/dist/src/models/Item.d.ts +0 -1
  59. package/dist/src/models/ItemCopyRequest.d.ts +5 -1
  60. package/dist/src/models/ItemId.d.ts +2 -0
  61. package/dist/src/services/FileService.d.ts +8 -0
  62. package/dist/src/services/ItemSelectDialogService.d.ts +1 -1
  63. package/dist/src/services.d.ts +3 -0
  64. package/lib/dxf-viewer/OrbitControls.js +6 -2
  65. package/lib/dxf-viewer/parser/DxfArrayScanner.js +27 -1
  66. package/lib/dxf-viewer/parser/DxfParser.js +7 -4
  67. package/lib/fflate/fflate.module.js +2672 -0
  68. package/package.json +1 -1
  69. package/src/controls/BimViewer/js/bim-viewer.js +20 -32
  70. package/src/controls/DxfViewer/js/dxf-viewer.js +170 -60
  71. package/src/controls/PdfViewer/js/pdf-viewer.js +993 -56
  72. package/css/std/controls/file/img/file-button-context.svg +0 -6
@@ -21208,7 +21208,7 @@ const defaultOptions = {
21208
21208
  kind: OptionKind.WORKER
21209
21209
  },
21210
21210
  workerSrc: {
21211
- value: "resource/pdfViewer/js/pdf.worker.js?version=1.1.227",
21211
+ value: "resource/pdfViewer/js/pdf.worker.js?version=1.1.229",
21212
21212
  kind: OptionKind.WORKER
21213
21213
  }
21214
21214
  };
@@ -35538,6 +35538,7 @@ function initZoomPageEvent() {
35538
35538
  if(e.pageNumber == getCurrentPage()) {
35539
35539
  $(document).trigger('needZoom');
35540
35540
  }
35541
+ reloadMarkupEditOutlineSettings(e.pageNumber, true);
35541
35542
  });
35542
35543
  // PDFViewerApplication.eventBus.on('pagechange', function(e) {
35543
35544
  // console.log('pagechange', e);
@@ -37418,6 +37419,13 @@ const EVENT_SEARCH_ISSUE_LIST = 'vitro.search.issue.list';
37418
37419
  const EVENT_ISSUE_LIST_REFRESH = 'vitro.issue.list.refresh';
37419
37420
  const EVENT_ISSUE_LIST_SELECT_ITEM = 'vitro.issue.list.select.item';
37420
37421
  const EVENT_ITEM_CHANGED = 'vitro.item.changed';
37422
+ const ITEM_SELECT_DIALOG = 'ItemSelectDialog';
37423
+ const FILE_EXTENSION_PDF = '.pdf';
37424
+ const DOC_A = 'docA';
37425
+ const DOC_B = 'docB';
37426
+ let currentDocFileVersionList;
37427
+ let docAFileVersionList;
37428
+ let docBFileVersionList;
37421
37429
 
37422
37430
  function initContextMenuCanvas() {
37423
37431
  var pages = '#viewer .page:not(.has-new-svg)';
@@ -37442,7 +37450,7 @@ function initContextMenuCanvas() {
37442
37450
  }
37443
37451
  },
37444
37452
  build: function ($triggerElement, e) {
37445
- if ($('.svgsketch-wrap').hasClass('measures')) {
37453
+ if ($('.svgsketch-wrap').hasClass('measures') || (e?.target && $(e?.target)?.hasClass('pdf-note'))) {
37446
37454
  return false;
37447
37455
  } else {
37448
37456
  return {
@@ -37525,6 +37533,8 @@ function initCompare() {
37525
37533
  bindCompareDlgPageChange();
37526
37534
  bindBtnsCompareDocsSelect();
37527
37535
  bindCompareDlgVersionChange();
37536
+ initButtonSelectFileDocA();
37537
+ initButtonSelectFileDocB();
37528
37538
 
37529
37539
  let fileName = context.file.fieldValueMap.name;
37530
37540
  $('div.compare-dlg_doc-a_name').text(fileName);
@@ -37542,26 +37552,8 @@ function initCompare() {
37542
37552
  }));
37543
37553
  });
37544
37554
 
37545
- let loadedVersionId = getLoadedVersionId();
37546
- let version = context.fileVersionList.find(item => item.id == loadedVersionId);
37547
- let loadedVersion = `v${version.name}`;
37548
- $('#docAVersion').val(loadedVersion);
37549
- let loadedVersionArray = version.name.split('.');
37550
- let loadedVersionMinor = loadedVersionArray[1];
37551
- let loadedVersionMajor = loadedVersionArray[0];
37552
- if (loadedVersionId != context.currentVersionId) {
37553
- let lastVersion = context.fileVersionList.find(item => item.id == context.currentVersionId);
37554
- let lastVersionLabel = `v${lastVersion.name}`;
37555
- $('#docBVersion').val(lastVersionLabel);
37556
- } else {
37557
- if (context.fileVersionList.length > 1) {
37558
- let previousVersion = context.fileVersionList[1];
37559
- let previousVersionLabel = `v${previousVersion.name}`;
37560
- $('#docBVersion').val(previousVersionLabel);
37561
- } else {
37562
- $('#docBVersion').val(loadedVersion);
37563
- }
37564
- }
37555
+ currentDocFileVersionList = context.fileVersionList;
37556
+ initDocVersion();
37565
37557
  $('#docAPage').val(1);
37566
37558
  $('#docBPage').val(1);
37567
37559
  }
@@ -37577,14 +37569,12 @@ function getLoadedVersionId() {
37577
37569
  function showDlgCompare() {
37578
37570
  $('.compare-dlg-wrap').show();
37579
37571
 
37580
- let currentPage = getCurrentPage();
37581
- $("#docAPage").val(currentPage);
37582
- $("#docBPage").val(currentPage);
37572
+ resetDocFileVersionList();
37573
+ resetDocPage();
37574
+ initDocVersion();
37583
37575
 
37584
37576
  compareObjList = getCompareObjList();
37585
-
37586
37577
  loadDocAObj(compareObjList.docA.url);
37587
-
37588
37578
  loadDocBObj(compareObjList.docB.url);
37589
37579
  }
37590
37580
 
@@ -37602,6 +37592,7 @@ function getDocA() {
37602
37592
  let docAVersion = docAVersionValue.substring(1);
37603
37593
  let docAPage = Number($("#docAPage").val());
37604
37594
  let docAVersionFile = context.fileVersionList.find(item => item.name == docAVersion);
37595
+ docAFileVersionList = context.fileVersionList;
37605
37596
  let docA = {
37606
37597
  name: fileName,
37607
37598
  version: docAVersionValue,
@@ -37621,6 +37612,7 @@ function getDocB() {
37621
37612
  let docBVersion = docBVersionValue.substring(1);
37622
37613
  let docBPage = Number($("#docBPage").val());
37623
37614
  let docBVersionFile = context.fileVersionList.find(item => item.name == docBVersion);
37615
+ docBFileVersionList = context.fileVersionList;
37624
37616
  let docB = {
37625
37617
  name: fileName,
37626
37618
  version: docBVersionValue,
@@ -37758,14 +37750,14 @@ function isComparedDocumentCurrentOpened(url) {
37758
37750
 
37759
37751
  function bindCompareDlgDcoAVersionChange() {
37760
37752
  $('#docAVersion').on('change', function () {
37761
- compareObjList.docA = getDocA();
37753
+ refreshCompareObjListDocA();
37762
37754
  loadDocAObj(compareObjList.docA.url);
37763
37755
  });
37764
37756
  }
37765
37757
 
37766
37758
  function bindCompareDlgDcoBVersionChange() {
37767
37759
  $('#docBVersion').on('change', function () {
37768
- compareObjList.docB = getDocB();
37760
+ refreshCompareObjListDocB();
37769
37761
  loadDocBObj(compareObjList.docB.url);
37770
37762
  });
37771
37763
  }
@@ -37787,7 +37779,7 @@ function bindCompareDlgDcoAPageChange() {
37787
37779
  } else {
37788
37780
  enableAllpagesInOtherDropDown($('#docBPage'));
37789
37781
  }
37790
- compareObjList.docA = getDocA();
37782
+ compareObjList.docA.page = Number($('#docAPage').val());
37791
37783
  reloadCompareThumb(pdfDocObjA, thumbContainer, Number($(this).val()));
37792
37784
  });
37793
37785
  }
@@ -37800,7 +37792,7 @@ function bindCompareDlgDcoBPageChange() {
37800
37792
  } else {
37801
37793
  enableAllpagesInOtherDropDown($('#docAPage'));
37802
37794
  }
37803
- compareObjList.docB = getDocB();
37795
+ compareObjList.docB.page = Number($('#docBPage').val());
37804
37796
  reloadCompareThumb(pdfDocObjB, thumbContainer, Number($(this).val()));
37805
37797
  });
37806
37798
  }
@@ -38226,24 +38218,13 @@ function updatePage(e) {
38226
38218
  refreshIssueList();
38227
38219
  }
38228
38220
 
38229
- if (e.type === context.updateIssueEvent && markup) {
38230
- const itemId = {
38231
- id: item.id,
38232
- contentTypeId: item.contentTypeId,
38233
- listId: item.listId,
38234
- parentId: item.parentId,
38235
- siteId: item.siteId
38236
- };
38237
-
38238
- const event = new CustomEvent('vitro.item.changed', {
38239
- detail: {
38240
- itemIdList: [itemId],
38241
- listId: item.listId
38242
- }
38243
- });
38244
- window.dispatchEvent(event);
38245
- refreshIssueList();
38246
- updateContextIssueList = true;
38221
+ if (e.type === context.updateIssueEvent) {
38222
+ if (!$('#btnToggleSidebarNotes').hasClass('toggled')) {
38223
+ refreshIssueList();
38224
+ }
38225
+ if (markup) {
38226
+ updateContextIssueList = true;
38227
+ }
38247
38228
  }
38248
38229
 
38249
38230
  removeNewSvg();
@@ -38667,13 +38648,15 @@ function initItemChangedEventListener() {
38667
38648
  window.addEventListener(EVENT_ITEM_CHANGED, onItemChanged);
38668
38649
  }
38669
38650
 
38670
- function onItemChanged() {
38671
- const width = $('.vitro-issue-detail').width();
38672
- if (width) {
38673
- setContainerInset(width);
38674
- }
38675
- if (!$('.vitro-issue-detail').resizable('instance')) {
38676
- initResizable($('.vitro-issue-detail'));
38651
+ function onItemChanged(e) {
38652
+ if (!isEventItemSelectDialog(e)) {
38653
+ const width = $('.vitro-issue-detail').width();
38654
+ if (width && $('.vitro-issue-detail').is(':visible')) {
38655
+ setContainerInset(width);
38656
+ }
38657
+ if (!$('.vitro-issue-detail').resizable('instance')) {
38658
+ initResizable($('.vitro-issue-detail'));
38659
+ }
38677
38660
  }
38678
38661
  }
38679
38662
 
@@ -38774,7 +38757,961 @@ function bindOnSidebarToggle() {
38774
38757
  function isScaleModeRelative() {
38775
38758
  const currentScaleMode = PDFViewerApplication.pdfViewer._currentScaleValue;
38776
38759
  return currentScaleMode == 'page-width' || currentScaleMode == 'page-fit' || currentScaleMode == 'auto';
38760
+ }
38761
+
38762
+ function initButtonSelectFileDocA() {
38763
+ const btn = $('<a id="btnSelectFileDocA">' + context.selectFileBtnText + '</a>');
38764
+ btn.on('click', onClickButtonSelectFileDocA);
38765
+ $('.compare-dlg_doc-a_file-select').append(btn);
38766
+ }
38767
+
38768
+ async function onClickButtonSelectFileDocA(e) {
38769
+ e.preventDefault();
38770
+ e.stopPropagation();
38771
+ const idList = await context.getItemIdList();
38772
+ const id = idList?.length ? idList[0] : false;
38773
+ onSelectFileDocA(id);
38774
+ }
38775
+
38776
+ async function onSelectFileDocA(id) {
38777
+ if (isSelectedFileChanged(id, getDocFileIdFromUrl(compareObjList.docA.url))) {
38778
+ const docObj = await getDocObj(id, $('#docAVersionList'), $("#docAVersion"), $("#docAPage"), $('div.compare-dlg_doc-a_name'), DOC_A);
38779
+ if (docObj) {
38780
+ compareObjList.docA = docObj;
38781
+ loadDocAObj(compareObjList.docA.url);
38782
+ }
38783
+ }
38784
+ }
38785
+
38786
+ function isSelectedFileChanged(id, compareObjListDocId) {
38787
+ return id && (context.file.id !== id || (context.file.id === id && id !== compareObjListDocId));
38788
+ }
38789
+
38790
+ async function getDocObj(id, fileVersionListElm, docVersionElm, docPageElm, fileNameElm, docType) {
38791
+ const file = await context.itemService.get(id);
38792
+ const fileName = file.fieldValueMap.name;
38793
+
38794
+ if (isValidDocumentFormat(fileName)) {
38795
+ const fileId = file.id;
38796
+ const versionList = await context.fileService.get(id);
38797
+ const fileVersionList = getFileVersionList(versionList);
38798
+ setDocFileVersionList(docType, fileVersionList);
38799
+ const fileVersion = file.fieldValueMap.version.fieldValueMap.name;
38800
+ setDlgDocFileName(fileNameElm, fileName);
38801
+ refreshVersionList(fileVersionListElm, fileVersionList);
38802
+ const docVersionValue = 'v' + fileVersion;
38803
+ docVersionElm.val(docVersionValue);
38804
+ docPageElm.val(1);
38805
+ const docVersionFile = fileVersionList.find(item => item.name == fileVersion);
38806
+
38807
+ const doc = {
38808
+ name: fileName,
38809
+ version: docVersionValue,
38810
+ page: 1,
38811
+ uploadBy: docVersionFile.userName,
38812
+ uploadDate: docVersionFile.date,
38813
+ url: `/api/file/getByItemId/${fileId}/${fileVersion}`
38814
+ };
38815
+
38816
+ return doc;
38817
+ }
38818
+
38819
+ return false;
38820
+ }
38821
+
38822
+ function setDocFileVersionList(docType, fileVersionList) {
38823
+ if (docType === DOC_A) {
38824
+ docAFileVersionList = fileVersionList;
38825
+ } else {
38826
+ docBFileVersionList = fileVersionList;
38827
+ }
38828
+ }
38829
+
38830
+ function refreshVersionList(fileVersionListElm, fileVersionList) {
38831
+ fileVersionListElm.html(null);
38832
+ $.each(fileVersionList, function (i, item) {
38833
+ const value = 'v' + item.name;
38834
+ fileVersionListElm.append($('<li>', {
38835
+ value: value,
38836
+ text: value,
38837
+ }));
38838
+ });
38839
+ }
38840
+
38841
+ function getFileVersionList(versionList) {
38842
+ const list = versionList?.map(version => {
38843
+ return {
38844
+ id: version.id,
38845
+ name: version.fieldValueMap.name,
38846
+ userName: version.insertUserName,
38847
+ date: context.getDateText(version.insertDate)
38848
+ };
38849
+ });
38850
+
38851
+ return list;
38852
+ };
38853
+
38854
+ function setDlgDocFileName(fileNameElm, fileName) {
38855
+ fileNameElm.text(fileName);
38856
+ }
38857
+
38858
+ function initButtonSelectFileDocB() {
38859
+ const btn = $('<a id="btnSelectFileDocB">' + context.selectFileBtnText + '</a>');
38860
+ btn.on('click', onClickButtonSelectFileDocB);
38861
+ $('.compare-dlg_doc-b_file-select').append(btn);
38862
+ }
38863
+
38864
+ async function onClickButtonSelectFileDocB(e) {
38865
+ e.preventDefault();
38866
+ e.stopPropagation();
38867
+ const idList = await context.getItemIdList();
38868
+ const id = idList?.length ? idList[0] : false;
38869
+ onSelectFileDocB(id);
38870
+ }
38871
+
38872
+ async function onSelectFileDocB(id) {
38873
+ if (isSelectedFileChanged(id, getDocFileIdFromUrl(compareObjList.docB.url))) {
38874
+ const docObj = await getDocObj(id, $('#docBVersionList'), $("#docBVersion"), $("#docBPage"), $('div.compare-dlg_doc-b_name'), DOC_B);
38875
+ if (docObj) {
38876
+ compareObjList.docB = docObj;
38877
+ loadDocBObj(compareObjList.docB.url);
38878
+ }
38879
+
38880
+ }
38881
+ }
38882
+
38883
+ function getDocFileIdFromUrl(url) {
38884
+ const urlArr = url.split('/');
38885
+ return itemId = urlArr[urlArr.length - 2];
38886
+ }
38887
+
38888
+ function refreshCompareObjListDocA() {
38889
+ refreshCompareObjListDoc(DOC_A);
38890
+ };
38891
+
38892
+ function refreshCompareObjListDocB() {
38893
+ refreshCompareObjListDoc(DOC_B);
38894
+ };
38895
+
38896
+ function refreshCompareObjListDoc(docType) {
38897
+ const docVersionValue = $("#" + docType + "Version").val();
38898
+ const docVersion = docVersionValue.substring(1);
38899
+ const docPage = Number($("#" + docType + "Page").val());
38900
+ let docVersionFile;
38901
+ if (docType === DOC_A) {
38902
+ docVersionFile = docAFileVersionList.find(item => item.name == docVersion);
38903
+ } else {
38904
+ docVersionFile = docBFileVersionList.find(item => item.name == docVersion);
38905
+ }
38906
+ compareObjList[docType].page = docPage;
38907
+ compareObjList[docType].version = docVersionValue;
38908
+ compareObjList[docType].uploadBy = docVersionFile.userName;
38909
+ compareObjList[docType].uploadDate = docVersionFile.date;
38910
+ compareObjList[docType].url = getDocVersionUrl(compareObjList[docType].url, docVersion);
38911
+ }
38912
+
38913
+ function getDocVersionUrl(url, version) {
38914
+ const lastSlashIndex = url.lastIndexOf('/');
38915
+ if (lastSlashIndex === -1) {
38916
+ return url;
38917
+ }
38918
+ const partBeforeLastSlash = url.slice(0, lastSlashIndex + 1);
38919
+ return partBeforeLastSlash + version;
38920
+ }
38921
+
38922
+ function resetDocFileVersionList() {
38923
+ docAFileVersionList = currentDocFileVersionList;
38924
+ docBFileVersionList = currentDocFileVersionList;
38925
+ }
38926
+
38927
+ function resetDocPage() {
38928
+ const currentPage = getCurrentPage();
38929
+ $("#docAPage").val(currentPage);
38930
+ $("#docBPage").val(currentPage);
38931
+ }
38932
+
38933
+ function initDocVersion() {
38934
+ const loadedVersion = getInitVersionDocA();
38935
+ const versionDocB = getInitVersionDocB(loadedVersion);
38936
+ $('#docAVersion').val(loadedVersion);
38937
+ $('#docBVersion').val(versionDocB);
38938
+ }
38939
+
38940
+ function getInitVersionDocA() {
38941
+ const loadedVersionId = getLoadedVersionId();
38942
+ const version = context.fileVersionList.find(item => item.id == loadedVersionId);
38943
+ const loadedVersion = `v${version.name}`;
38944
+ return loadedVersion;
38945
+ }
38946
+
38947
+ function getInitVersionDocB(loadedVersion) {
38948
+ const loadedVersionId = getLoadedVersionId();
38949
+ if (loadedVersionId != context.currentVersionId) {
38950
+ const lastVersion = context.fileVersionList.find(item => item.id == context.currentVersionId);
38951
+ const lastVersionLabel = `v${lastVersion.name}`;
38952
+ return lastVersionLabel;
38953
+ } else {
38954
+ if (context.fileVersionList.length > 1) {
38955
+ const previousVersion = context.fileVersionList[1];
38956
+ const previousVersionLabel = `v${previousVersion.name}`;
38957
+ return previousVersionLabel;
38958
+ } else {
38959
+ return loadedVersion;
38960
+ }
38961
+ }
38962
+ }
38963
+
38964
+ function isValidDocumentFormat(filename) {
38965
+ const lowercasedFilename = filename.toLowerCase();
38966
+ return lowercasedFilename.endsWith(FILE_EXTENSION_PDF);
38967
+ }
38968
+
38969
+ function isEventItemSelectDialog(e) {
38970
+ return e?.detail?.eventScopeId?.startsWith(ITEM_SELECT_DIALOG);
38777
38971
  }
38972
+ const MARKUP_RESIZER_ID_PREFIX = 'markupResizer';
38973
+ const CSS_CLASS_MARKUP_RESIZER = 'vitro-markup-resizer';
38974
+ const CSS_CLASS_PDF_NOTE = 'pdf-note';
38975
+ const CSS_CLASS_PAGE = 'page';
38976
+ const MARKUP_EDIT_OUTLINE_ID = 'markupEditOutline';
38977
+ let isMarkupEdit;
38978
+ let isMarkupMove;
38979
+ let isMarkupResize;
38980
+ let markupResizeCoordinates = {}; // {start: {mouseX, mouseY}, end: {mouseX, mouseY}, type: tl|tc|tr|...}
38981
+ let markupMoveCoordinates = {}; // {start: {mouseX, mouseY}, end: {mouseX, mouseY}}
38982
+ let markupUnderEditingSettings = {};
38983
+ let markupEditOutlineSettings = {};
38984
+
38985
+
38986
+ function onMarkupEditStart(e) {
38987
+ setPdfViewerCursorToolMode();
38988
+ if (isMarkupEdit) {
38989
+ endMarkupEdit();
38990
+ }
38991
+ isMarkupEdit = true;
38992
+ createMarkupEditOutline(e);
38993
+ bindMouseUpEventHandler();
38994
+ bindOnMarkupEditEndHandler();
38995
+ }
38996
+
38997
+ function onMarkupEditOutlineMouseDown(e) {
38998
+ e.stopPropagation();
38999
+ e.preventDefault();
39000
+
39001
+ isMarkupMove = true;
39002
+ markupMoveCoordinates.start = { x: e.clientX, y: e.clientY };
39003
+ bindOnMouseMoveEventHandler();
39004
+ }
39005
+
39006
+ function onMarkupEditOutlineMouseUp(e) {
39007
+ markupMoveCoordinates.end = { x: e.clientX, y: e.clientY };
39008
+ unbindOnMouseMoveEventHandler()
39009
+ onMarkupMoveEnd();
39010
+ }
39011
+
39012
+ function onMouseMove(e) {
39013
+ if (isMarkupEdit && isMarkupMove) {
39014
+ onMarkupMove(e.clientX, e.clientY);
39015
+ }
39016
+ if (isMarkupEdit && isMarkupResize) {
39017
+ onMarkupResize(e.clientX, e.clientY);
39018
+ }
39019
+ }
39020
+
39021
+ function onMarkupMove(mouseX, mouseY) {
39022
+ const x = markupEditOutlineSettings.position.x - markupMoveCoordinates.start.x + mouseX;
39023
+ const y = markupEditOutlineSettings.position.y - markupMoveCoordinates.start.y + mouseY;
39024
+ setMarkupOutlinePosition($('#' + MARKUP_EDIT_OUTLINE_ID), x, y);
39025
+ }
39026
+
39027
+ function onMarkupMoveEnd() {
39028
+ isMarkupMove = false;
39029
+ markupMoveCoordinates = {};
39030
+ setMarkupEditOutlinePositionNew();
39031
+ if (markupEditOutlineSettings.isSimple) {
39032
+ refreshMarkupSimple();
39033
+ setMarkupSimpleUnderEditingSettingsNew();
39034
+ } else {
39035
+ setMarkupUnderEditingSettingsNew(false);
39036
+ refreshMarkup();
39037
+ }
39038
+ updateMarkupInContextIssueList();
39039
+ }
39040
+
39041
+ function refreshMarkupSimple() {
39042
+ let labelPosition = { ...markupEditOutlineSettings.position };
39043
+ const rotation = getPdfPagesRotation();
39044
+ if (rotation == 90) {
39045
+ labelPosition.x = labelPosition.x + $('#markupEditOutline').height() + 1;
39046
+ }
39047
+ if (rotation == 180) {
39048
+ labelPosition.x = labelPosition.x + $('#markupEditOutline').width() + 1;
39049
+ labelPosition.y = labelPosition.y + $('#markupEditOutline').height() + 1;
39050
+ }
39051
+ if (rotation == 270) {
39052
+ labelPosition.y = labelPosition.y + $('#markupEditOutline').width() + 1;
39053
+ }
39054
+ $('.pdf-note#' + markupUnderEditingSettings.issueId).css('left', labelPosition.x)
39055
+ .css('top', labelPosition.y);
39056
+ }
39057
+
39058
+ function refreshMarkup() {
39059
+ const markupSvgData = { ...markupUnderEditingSettings.markup.svg };
39060
+ if (!$('#' + markupSvgData.id)?.length) {
39061
+ markupSvgData.id = markupUnderEditingSettings.issueId;
39062
+ }
39063
+ loadSvgShape(markupSvgData);
39064
+ refreshMarkupLabel(markupSvgData);
39065
+ }
39066
+
39067
+ function refreshMarkupLabel(markupSvgData) {
39068
+ const rotation = getPdfPagesRotation();
39069
+ const scale = getPdfCanvasScale();
39070
+ const labelPosition = getMarkupLabelPositionBySvgType(markupSvgData, markupUnderEditingSettings.markup.position);
39071
+ const labelPositionScaled = { x: labelPosition.x * scale, y: labelPosition.y * scale };
39072
+ let labelPositionWithRotation = { ...labelPositionScaled };
39073
+ if (rotation > 0) {
39074
+ const data = {
39075
+ position: { ...labelPositionScaled },
39076
+ pageNr: markupUnderEditingSettings.markup.pageNr
39077
+ };
39078
+ labelPositionWithRotation = getNoteLabelPositionWithRotation(data, rotation);
39079
+ }
39080
+ const markupLabelElm = $('#' + markupUnderEditingSettings.issueId);
39081
+ markupLabelElm.css('left', labelPositionWithRotation.x).css('top', labelPositionWithRotation.y);
39082
+ }
39083
+
39084
+ function updateMarkupInContextIssueList() {
39085
+ const issueIndex = context.issueList.findIndex(item => item.id === markupUnderEditingSettings.issueId);
39086
+ context.issueList[issueIndex].markup = JSON.stringify(markupUnderEditingSettings.markup);
39087
+ }
39088
+
39089
+ function setMarkupEditOutlinePositionNew() {
39090
+ const markupEditOutlinePosition = $('#' + MARKUP_EDIT_OUTLINE_ID).position();
39091
+ markupEditOutlineSettings.position.x = markupEditOutlinePosition?.left;
39092
+ markupEditOutlineSettings.position.y = markupEditOutlinePosition?.top;
39093
+ }
39094
+
39095
+ function getMarkupEditOutlineSettingsNormalized() {
39096
+ const svgsketchElm = $('#svgsketch-' + markupUnderEditingSettings.markup.pageNr);
39097
+ const svgsketchWidth = svgsketchElm.width();
39098
+ const svgsketchHeight = svgsketchElm.height();
39099
+ const scale = getPdfCanvasScale();
39100
+ const rotation = getPdfPagesRotation();
39101
+
39102
+ if (rotation === 90) {
39103
+ return getMarkupEditOutlineSettingsNormalizedRotation90Deg(scale, svgsketchWidth);
39104
+ } else if (rotation === 180) {
39105
+ return getMarkupEditOutlineSettingsNormalizedRotation180Deg(scale, svgsketchWidth, svgsketchHeight);
39106
+ } else if (rotation === 270) {
39107
+ return getMarkupEditOutlineSettingsNormalizedRotation270Deg(scale, svgsketchHeight);
39108
+ } else {
39109
+ return getMarkupEditOutlineSettingsNormalizedRotation0Deg(scale);
39110
+ }
39111
+ }
39112
+
39113
+ function getMarkupEditOutlineSettingsNormalizedRotation0Deg(scale) {
39114
+ const settings = {
39115
+ position: {
39116
+ x: markupEditOutlineSettings.position.x / scale,
39117
+ y: markupEditOutlineSettings.position.y / scale
39118
+ },
39119
+ width: markupEditOutlineSettings.width / scale,
39120
+ height: markupEditOutlineSettings.height / scale
39121
+ };
39122
+ return settings;
39123
+ }
39124
+
39125
+ function getMarkupEditOutlineSettingsNormalizedRotation90Deg(scale, svgsketchWidth) {
39126
+ const settings = {
39127
+ position: {
39128
+ x: markupEditOutlineSettings.position.y / scale,
39129
+ y: (svgsketchWidth - markupEditOutlineSettings.width - markupEditOutlineSettings.position.x) / scale
39130
+ },
39131
+ width: markupEditOutlineSettings.height / scale,
39132
+ height: markupEditOutlineSettings.width / scale
39133
+ };
39134
+ return settings;
39135
+ }
39136
+
39137
+ function getMarkupEditOutlineSettingsNormalizedRotation180Deg(scale, svgsketchWidth, svgsketchHeight) {
39138
+ const settings = {
39139
+ position: {
39140
+ x: (svgsketchWidth - markupEditOutlineSettings.width - markupEditOutlineSettings.position.x) / scale,
39141
+ y: (svgsketchHeight - markupEditOutlineSettings.height - markupEditOutlineSettings.position.y) / scale
39142
+ },
39143
+ width: markupEditOutlineSettings.width / scale,
39144
+ height: markupEditOutlineSettings.height / scale
39145
+ };
39146
+ return settings;
39147
+ }
39148
+
39149
+ function getMarkupEditOutlineSettingsNormalizedRotation270Deg(scale, svgsketchHeight) {
39150
+ const settings = {
39151
+ position: {
39152
+ x: (svgsketchHeight - markupEditOutlineSettings.height - markupEditOutlineSettings.position.y) / scale,
39153
+ y: markupEditOutlineSettings.position.x / scale
39154
+ },
39155
+ width: markupEditOutlineSettings.height / scale,
39156
+ height: markupEditOutlineSettings.width / scale
39157
+ };
39158
+ return settings;
39159
+ }
39160
+
39161
+ function getMarkupLabelPosition(svgData) {
39162
+ var topFix = 15;
39163
+ var leftFix = 20;
39164
+
39165
+ var relX = svgData.position.x - leftFix;
39166
+ var relY = svgData.position.y - topFix;
39167
+
39168
+ var position = {
39169
+ x: relX,
39170
+ y: relY
39171
+ };
39172
+
39173
+ return position;
39174
+ }
39175
+
39176
+ function getMarkupLabelPositionBySvgType(svgData, labelPosition) {
39177
+ let markupLabelPosition = { ...labelPosition };
39178
+ if (svgData.type == 'ellipse' || svgData.type == 'polygon') {
39179
+ markupLabelPosition.y = labelPosition.y + svgData.height / 2;
39180
+ } else if (svgData.type == 'line' || svgData.type == 'arrow' || svgData.type == 'msr_line') {
39181
+ if (svgData.direction == 'bltr') {
39182
+ markupLabelPosition.y = labelPosition.y + svgData.height;
39183
+ } else if (svgData.direction == 'trbl') {
39184
+ markupLabelPosition.x = labelPosition.x + svgData.width;
39185
+ } else if (svgData.direction == 'brtl') {
39186
+ markupLabelPosition.x = labelPosition.x + svgData.width;
39187
+ markupLabelPosition.y = labelPosition.y + svgData.height;
39188
+ }
39189
+ }
39190
+ return markupLabelPosition;
39191
+ }
39192
+
39193
+ function setMarkupUnderEditingSettingsNew(isSetSize) {
39194
+ const markupEditOutlineSettingsNormalized = getMarkupEditOutlineSettingsNormalized();
39195
+ if (isSetSize) {
39196
+ markupUnderEditingSettings.markup.svg.width = markupEditOutlineSettingsNormalized.width;
39197
+ markupUnderEditingSettings.markup.svg.height = markupEditOutlineSettingsNormalized.height;
39198
+ }
39199
+ markupUnderEditingSettings.markup.svg.position.x = markupEditOutlineSettingsNormalized.position.x;
39200
+ markupUnderEditingSettings.markup.svg.position.y = markupEditOutlineSettingsNormalized.position.y;
39201
+ const labelPosition = getMarkupLabelPosition(markupUnderEditingSettings.markup.svg);
39202
+ markupUnderEditingSettings.markup.position = labelPosition;
39203
+ }
39204
+
39205
+ function setMarkupSimpleUnderEditingSettingsNew() {
39206
+ let position = {};
39207
+
39208
+ const scale = getPdfCanvasScale();
39209
+ const rotation = getPdfPagesRotation();
39210
+
39211
+ const labelElm = $('#' + markupUnderEditingSettings.issueId);
39212
+ const labelPos = labelElm.position();
39213
+ const labelElmWidth = labelElm.outerWidth();
39214
+ const labelElmHeight = labelElm.outerHeight();
39215
+ const page = $('.' + CSS_CLASS_PAGE + '[data-page-number="' + markupUnderEditingSettings.markup.pageNr + '"]');
39216
+ const pageW = page.width();
39217
+ const pageH = page.height();
39218
+
39219
+
39220
+ if (rotation == 90) {
39221
+ position.x = labelPos.top / scale;
39222
+ position.y = pageW/scale - (labelPos.left / scale + labelElmHeight);
39223
+ } else if (rotation == 180) {
39224
+ position.x = pageW / scale - (labelPos.left / scale + labelElmWidth);
39225
+ position.y = pageH / scale - (labelPos.top / scale + labelElmHeight);
39226
+ } else if (rotation == 270) {
39227
+ position.x = pageH / scale - (labelPos.top / scale + labelElmWidth);
39228
+ position.y = labelPos.left / scale;
39229
+ } else {
39230
+ position.x = labelPos.left / scale;
39231
+ position.y = labelPos.top / scale;
39232
+ }
39233
+
39234
+ markupUnderEditingSettings.markup.position.x = position.x;
39235
+ markupUnderEditingSettings.markup.position.y = position.y;
39236
+ }
39237
+
39238
+ function onMarkupResizerMouseDown(e) {
39239
+ isMarkupMove = false;
39240
+ e.stopPropagation();
39241
+ e.preventDefault();
39242
+
39243
+ isMarkupResize = true;
39244
+ markupResizeCoordinates.start = { x: e.clientX, y: e.clientY };
39245
+ markupResizeCoordinates.type = getMarkupResizeType(e);
39246
+ bindOnMouseMoveEventHandler();
39247
+ }
39248
+
39249
+ function getMarkupResizeType(e) {
39250
+ return e?.target?.id?.replace(MARKUP_RESIZER_ID_PREFIX, '')?.toLowerCase();
39251
+ }
39252
+
39253
+ function bindOnMouseMoveEventHandler() {
39254
+ window.addEventListener('mousemove', onMouseMove);
39255
+ }
39256
+
39257
+ function unbindOnMouseMoveEventHandler() {
39258
+ window.removeEventListener('mousemove', onMouseMove);
39259
+ }
39260
+
39261
+ function onMarkupResize(mouseX, mouseY) {
39262
+ let settings;
39263
+ const outlineElm = $('#' + MARKUP_EDIT_OUTLINE_ID);
39264
+ const outlineHeight = markupEditOutlineSettings.height;
39265
+ const outlineWidth = markupEditOutlineSettings.width;
39266
+ const deltaY = mouseY - markupResizeCoordinates.start.y;
39267
+ const deltaX = mouseX - markupResizeCoordinates.start.x;
39268
+
39269
+ if (markupResizeCoordinates.type === 'tl') {
39270
+ settings = getMarkupEditOutlineSettingsOnResizeTL(outlineWidth, outlineHeight, mouseX, mouseY, deltaX, deltaY);
39271
+ }
39272
+ if (markupResizeCoordinates.type === 'tc') {
39273
+ settings = getMarkupEditOutlineSettingsOnResizeTC(outlineWidth, outlineHeight, mouseY, deltaY);
39274
+ }
39275
+ if (markupResizeCoordinates.type === 'tr') {
39276
+ settings = getMarkupEditOutlineSettingsOnResizeTR(outlineWidth, outlineHeight, mouseX, mouseY, deltaX, deltaY);
39277
+ }
39278
+ if (markupResizeCoordinates.type === 'cl') {
39279
+ settings = getMarkupEditOutlineSettingsOnResizeCL(outlineWidth, outlineHeight, mouseX, deltaX);
39280
+ }
39281
+ if (markupResizeCoordinates.type === 'cr') {
39282
+ settings = getMarkupEditOutlineSettingsOnResizeCR(outlineWidth, outlineHeight, mouseX, deltaX);
39283
+ }
39284
+ if (markupResizeCoordinates.type === 'bl') {
39285
+ settings = getMarkupEditOutlineSettingsOnResizeBL(outlineWidth, outlineHeight, mouseX, mouseY, deltaX, deltaY);
39286
+ }
39287
+ if (markupResizeCoordinates.type === 'bc') {
39288
+ settings = getMarkupEditOutlineSettingsOnResizeBC(outlineWidth, outlineHeight, mouseY, deltaY);
39289
+ }
39290
+ if (markupResizeCoordinates.type === 'br') {
39291
+ settings = getMarkupEditOutlineSettingsOnResizeBR(outlineWidth, outlineHeight, mouseX, mouseY, deltaX, deltaY);
39292
+ }
39293
+
39294
+ if (settings) {
39295
+ setMarkupOutlinePosition(outlineElm, settings.position.x, settings.position.y);
39296
+ setMarkupOutlineSize(outlineElm, settings.width, settings.height);
39297
+ }
39298
+ }
39299
+
39300
+ function getMarkupEditOutlineSettingsOnResizeTL(outlineWidth, outlineHeight, mouseX, mouseY, deltaX, deltaY) {
39301
+ const settings = {
39302
+ position: {
39303
+ x: (markupEditOutlineSettings.position.x + deltaX) <= (markupEditOutlineSettings.position.x + outlineWidth) ? (markupEditOutlineSettings.position.x + deltaX) : (markupEditOutlineSettings.position.x + outlineWidth),
39304
+ y: (markupEditOutlineSettings.position.y + deltaY) <= (markupEditOutlineSettings.position.y + outlineHeight) ? (markupEditOutlineSettings.position.y + deltaY) : (markupEditOutlineSettings.position.y + outlineHeight)
39305
+ },
39306
+ width: Math.abs(outlineWidth - deltaX),
39307
+ height: Math.abs(outlineHeight - deltaY)
39308
+ };
39309
+ return settings;
39310
+ }
39311
+
39312
+ function getMarkupEditOutlineSettingsOnResizeTC(outlineWidth, outlineHeight, mouseY, deltaY) {
39313
+ const settings = {
39314
+ position: {
39315
+ x: markupEditOutlineSettings.position.x,
39316
+ y: (markupEditOutlineSettings.position.y + deltaY) <= (markupEditOutlineSettings.position.y + outlineHeight) ? (markupEditOutlineSettings.position.y + deltaY) : (markupEditOutlineSettings.position.y + outlineHeight)
39317
+ },
39318
+ width: outlineWidth,
39319
+ height: Math.abs(outlineHeight - deltaY)
39320
+ };
39321
+ return settings;
39322
+ }
39323
+
39324
+ function getMarkupEditOutlineSettingsOnResizeTR(outlineWidth, outlineHeight, mouseX, mouseY, deltaX, deltaY) {
39325
+ const settings = {
39326
+ position: {
39327
+ x: (deltaX < 0 && Math.abs(deltaX) > outlineWidth) ? (markupEditOutlineSettings.position.x - Math.abs(deltaX) + outlineWidth) : markupEditOutlineSettings.position.x,
39328
+ y: (markupEditOutlineSettings.position.y + deltaY) <= (markupEditOutlineSettings.position.y + outlineHeight) ? (markupEditOutlineSettings.position.y + deltaY) : (markupEditOutlineSettings.position.y + outlineHeight)
39329
+ },
39330
+ width: Math.abs(outlineWidth + deltaX),
39331
+ height: Math.abs(outlineHeight - deltaY)
39332
+ };
39333
+ return settings;
39334
+ }
39335
+
39336
+ function getMarkupEditOutlineSettingsOnResizeCL(outlineWidth, outlineHeight, mouseX, deltaX) {
39337
+ const settings = {
39338
+ position: {
39339
+ x: (markupEditOutlineSettings.position.x + deltaX) <= (markupEditOutlineSettings.position.x + outlineWidth) ? (markupEditOutlineSettings.position.x + deltaX) : (markupEditOutlineSettings.position.x + outlineWidth),
39340
+ y: markupEditOutlineSettings.position.y,
39341
+ },
39342
+ width: Math.abs(outlineWidth - deltaX),
39343
+ height: outlineHeight
39344
+ };
39345
+ return settings;
39346
+ }
39347
+
39348
+ function getMarkupEditOutlineSettingsOnResizeCR(outlineWidth, outlineHeight, mouseX, deltaX) {
39349
+ const settings = {
39350
+ position: {
39351
+ x: (deltaX < 0 && Math.abs(deltaX) > outlineWidth) ? (markupEditOutlineSettings.position.x - Math.abs(deltaX) + outlineWidth) : markupEditOutlineSettings.position.x,
39352
+ y: markupEditOutlineSettings.position.y,
39353
+ },
39354
+ width: Math.abs(outlineWidth + deltaX),
39355
+ height: outlineHeight
39356
+ };
39357
+ return settings;
39358
+ }
39359
+
39360
+ function getMarkupEditOutlineSettingsOnResizeBL(outlineWidth, outlineHeight, mouseX, mouseY, deltaX, deltaY) {
39361
+ const settings = {
39362
+ position: {
39363
+ x: (markupEditOutlineSettings.position.x + deltaX) <= (markupEditOutlineSettings.position.x + outlineWidth) ? (markupEditOutlineSettings.position.x + deltaX) : (markupEditOutlineSettings.position.x + outlineWidth),
39364
+ y: (deltaY < 0 && Math.abs(deltaY) > outlineHeight) ? (markupEditOutlineSettings.position.y - Math.abs(deltaY) + outlineHeight) : markupEditOutlineSettings.position.y
39365
+ },
39366
+ width: Math.abs(outlineWidth - deltaX),
39367
+ height: Math.abs(outlineHeight + deltaY)
39368
+ };
39369
+ return settings;
39370
+ }
39371
+
39372
+ function getMarkupEditOutlineSettingsOnResizeBC(outlineWidth, outlineHeight, mouseY, deltaY) {
39373
+ const settings = {
39374
+ position: {
39375
+ x: markupEditOutlineSettings.position.x,
39376
+ y: (deltaY < 0 && Math.abs(deltaY) > outlineHeight) ? (markupEditOutlineSettings.position.y - Math.abs(deltaY) + outlineHeight) : markupEditOutlineSettings.position.y
39377
+ },
39378
+ width: outlineWidth,
39379
+ height: Math.abs(outlineHeight + deltaY)
39380
+ };
39381
+ return settings;
39382
+ }
39383
+
39384
+ function getMarkupEditOutlineSettingsOnResizeBR(outlineWidth, outlineHeight, mouseX, mouseY, deltaX, deltaY) {
39385
+ const settings = {
39386
+ position: {
39387
+ x: (deltaX < 0 && Math.abs(deltaX) > outlineWidth) ? (markupEditOutlineSettings.position.x - Math.abs(deltaX) + outlineWidth) : markupEditOutlineSettings.position.x,
39388
+ y: (deltaY < 0 && Math.abs(deltaY) > outlineHeight) ? (markupEditOutlineSettings.position.y - Math.abs(deltaY) + outlineHeight) : markupEditOutlineSettings.position.y
39389
+ },
39390
+ width: Math.abs(outlineWidth + deltaX),
39391
+ height: Math.abs(outlineHeight + deltaY)
39392
+ };
39393
+ return settings;
39394
+ }
39395
+
39396
+ function onMarkupResizerMouseUp(e) {
39397
+ markupResizeCoordinates.end = { x: e.clientX, y: e.clientY };
39398
+ unbindOnMouseMoveEventHandler();
39399
+ onMarkupResizeEnd();
39400
+ }
39401
+
39402
+ function onMarkupResizeEnd() {
39403
+ isMarkupResize = false;
39404
+ markupResizeCoordinates = {};
39405
+ setMarkupEditOutlineSettingsNew();
39406
+ setMarkupUnderEditingSettingsNew(true);
39407
+ updateMarkupInContextIssueList();
39408
+ refreshMarkup();
39409
+ }
39410
+
39411
+ function setMarkupEditOutlineSettingsNew() {
39412
+ const markupEditOutlineElm = $('#' + MARKUP_EDIT_OUTLINE_ID);
39413
+ const markupEditOutlinePosition = markupEditOutlineElm.position();
39414
+ markupEditOutlineSettings.position.x = markupEditOutlinePosition?.left;
39415
+ markupEditOutlineSettings.position.y = markupEditOutlinePosition?.top;
39416
+ markupEditOutlineSettings.width = markupEditOutlineElm.width();
39417
+ markupEditOutlineSettings.height = markupEditOutlineElm.height();
39418
+ }
39419
+
39420
+ function bindOnMarkupEditEndHandler() {
39421
+ window.addEventListener('keydown', onMarkupEditEnd);
39422
+ }
39423
+
39424
+ function unbindOnMarkupEditEndHandler() {
39425
+ window.removeEventListener('keydown', onMarkupEditEnd);
39426
+ }
39427
+
39428
+ function onMarkupEditEnd(e) {
39429
+ if (e.key === 'Escape' && isMarkupEdit) {
39430
+ endMarkupEdit();
39431
+ }
39432
+ }
39433
+
39434
+ function endMarkupEdit() {
39435
+ isMarkupEdit = false;
39436
+ saveMarkup();
39437
+ removeMarkupEditOutline();
39438
+ unbindOnMarkupEditEndHandler();
39439
+ }
39440
+
39441
+ function saveMarkup() {
39442
+ if (markupUnderEditingSettings.issueId) {
39443
+ const issueIndex = context.issueList.findIndex(item => item.id === markupUnderEditingSettings.issueId);
39444
+ if (context.issueList[issueIndex]) {
39445
+ const changedFieldValueMap = new Map();
39446
+ changedFieldValueMap.set('markup', { ...markupUnderEditingSettings.markup });
39447
+ markupEditOutlineSettings = {};
39448
+ markupUnderEditingSettings = {};
39449
+ context.onIssueTileChange(context.issueList[issueIndex].item, changedFieldValueMap);
39450
+ }
39451
+ }
39452
+ }
39453
+
39454
+ function removeMarkupEditOutline() {
39455
+ document.getElementById(MARKUP_EDIT_OUTLINE_ID)?.remove();
39456
+ }
39457
+
39458
+ function createMarkupEditOutline(e) {
39459
+ if (e?.target) {
39460
+ removeMarkupEditOutline();
39461
+ const page = $(e.target).closest('.' + CSS_CLASS_PAGE);
39462
+ const markupSettings = getMarkupSettings(e.target);
39463
+ doCreateMarkupEditOutline(page, markupSettings);
39464
+ }
39465
+ }
39466
+
39467
+ function reloadMarkupEditOutlineSettings(page, isEventPageRendered) {
39468
+ if (markupUnderEditingSettings?.markup?.pageNr && page === markupUnderEditingSettings.markup.pageNr) {
39469
+ if (markupUnderEditingSettings.isSimple) {
39470
+ doCreateMarkupEditOutline($('.' + CSS_CLASS_PAGE + '[data-page-number="' + page + '"]'), markupUnderEditingSettings);
39471
+ } else {
39472
+ let svgsketch = getSvgSketchElmByPageNr(markupUnderEditingSettings.markup.pageNr);
39473
+ if (isEventPageRendered && !(svgsketch?.length)) {
39474
+ const interval = setInterval(() => {
39475
+ svgsketch = getSvgSketchElmByPageNr(markupUnderEditingSettings.markup.pageNr);
39476
+ if (svgsketch?.length) {
39477
+ clearInterval(interval);
39478
+ doCreateMarkupEditOutline($('.' + CSS_CLASS_PAGE + '[data-page-number="' + page + '"]'), markupUnderEditingSettings);
39479
+ }
39480
+ }, 50);
39481
+ } else {
39482
+ doCreateMarkupEditOutline($('.' + CSS_CLASS_PAGE + '[data-page-number="' + page + '"]'), markupUnderEditingSettings);
39483
+ }
39484
+ }
39485
+ }
39486
+ }
39487
+
39488
+ function doCreateMarkupEditOutline(page, markupSettings) {
39489
+ const outline = $('<div id="' + MARKUP_EDIT_OUTLINE_ID + '"></div>');
39490
+ const isMarkupSipmle = markupSettings.markup.svg ? false : true;
39491
+ if (!isMarkupSipmle) {
39492
+ addResizerToMarkupEditOutline(outline);
39493
+ }
39494
+ bindMarkupEditOutlineMouseDownHandler(outline);
39495
+ const outlineSettings = getMarkupEditOutlineSettings(markupSettings, isMarkupSipmle);
39496
+ markupEditOutlineSettings = outlineSettings;
39497
+ if (isMarkupSipmle) {
39498
+ markupEditOutlineSettings.isSimple = true;
39499
+ }
39500
+ setMarkupOutlineEditStyles(outline, outlineSettings);
39501
+ page.append(outline);
39502
+ }
39503
+
39504
+ function setMarkupOutlineEditStyles(outlineElm, outlineSettings) {
39505
+ setMarkupOutlinePosition(outlineElm, outlineSettings.position.x, outlineSettings.position.y);
39506
+ setMarkupOutlineSize(outlineElm, outlineSettings.width, outlineSettings.height);
39507
+ if (markupEditOutlineSettings.isSimple) {
39508
+ const rotation = getPdfPagesRotation();
39509
+ outlineElm.css('transform-origin', 'top left').css('transform', 'rotate(' + rotation + 'deg)');
39510
+ }
39511
+ }
39512
+
39513
+ function setMarkupOutlinePosition(outlineElm, x, y) {
39514
+ outlineElm.css('top', y + 'px');
39515
+ outlineElm.css('left', x + 'px');
39516
+ }
39517
+
39518
+ function setMarkupOutlineSize(outlineElm, width, height) {
39519
+ outlineElm.width(width);
39520
+ outlineElm.height(height);
39521
+ }
39522
+
39523
+ function getMarkupEditOutlineSettings(markupSettings, isMarkupSimple) {
39524
+ const rotation = getPdfPagesRotation();
39525
+ const scale = getPdfCanvasScale();
39526
+ const size = getMarkupEditOutlineSize(markupSettings, rotation, scale, isMarkupSimple);
39527
+
39528
+ const settings = {
39529
+ position: getMarkupEditOutlinePosition(markupSettings, rotation, scale, isMarkupSimple),
39530
+ width: size.width,
39531
+ height: size.height
39532
+ };
39533
+
39534
+ return settings;
39535
+ }
39536
+
39537
+ function getMarkupEditOutlineSize(markupSettings, rotation, scale, isMarkupSimple) {
39538
+ if (isMarkupSimple) {
39539
+ return getMarkupSimpleEditOutlineSize(markupSettings, scale);
39540
+ } else {
39541
+ if (rotation === 0 || rotation === 180) {
39542
+ return {
39543
+ width: markupSettings.markup.svg.width * scale,
39544
+ height: markupSettings.markup.svg.height * scale
39545
+ };
39546
+ }
39547
+ if (rotation === 90 || rotation === 270) {
39548
+ return {
39549
+ width: markupSettings.markup.svg.height * scale,
39550
+ height: markupSettings.markup.svg.width * scale
39551
+ };
39552
+ }
39553
+ }
39554
+ }
39555
+
39556
+ function getMarkupSimpleEditOutlineSize(markupSettings, scale) {
39557
+ const elm = $('.pdf-note#' + markupSettings.issueId);
39558
+ return {
39559
+ width: (elm.outerWidth() * scale + 1),
39560
+ height: (elm.outerHeight() * scale + 1)
39561
+ };
39562
+ }
39563
+
39564
+ function getSvgSketchElmByPageNr(pageNr) {
39565
+ return svgsketchElm = $('#svgsketch-' + pageNr);
39566
+ }
39567
+
39568
+ function getMarkupEditOutlinePosition(markupSettings, rotation, scale, isMarkupSimple) {
39569
+ if (isMarkupSimple) {
39570
+ return getMarkupSimpleEditOutlinePosition(markupSettings, scale, rotation);
39571
+ } else {
39572
+ const svgsketchElm = getSvgSketchElmByPageNr(markupSettings.markup.pageNr);
39573
+ const svgsketchWidth = svgsketchElm.width();
39574
+ const svgsketchHeight = svgsketchElm.height();
39575
+ if (rotation === 90) {
39576
+ return getMarkupEditOutlinePositionRotation90Deg(markupSettings, scale, svgsketchWidth);
39577
+ } else if (rotation === 180) {
39578
+ return getMarkupEditOutlinePositionRotation180Deg(markupSettings, scale, svgsketchWidth, svgsketchHeight);
39579
+ } else if (rotation === 270) {
39580
+ return getMarkupEditOutlinePositionRotation270Deg(markupSettings, scale, svgsketchHeight);
39581
+ } else {
39582
+ return getMarkupEditOutlinePositionRotation0Deg(markupSettings, scale);
39583
+ }
39584
+ }
39585
+ }
39586
+
39587
+ function getMarkupSimpleEditOutlinePosition(markupSettings, scale, rotation) {
39588
+ const data = {
39589
+ position: {
39590
+ x: markupSettings.markup.position.x * scale,
39591
+ y: markupSettings.markup.position.y * scale,
39592
+ },
39593
+ pageNr: markupSettings.markup.pageNr
39594
+ };
39595
+ const positionWithRotation = rotation > 0 ? getNoteLabelPositionWithRotation(data, rotation) : data.position;
39596
+ return positionWithRotation;
39597
+ }
39598
+
39599
+ function getMarkupEditOutlinePositionRotation0Deg(markupSettings, scale) {
39600
+ const position = {
39601
+ x: markupSettings.markup.svg.position.x * scale,
39602
+ y: markupSettings.markup.svg.position.y * scale
39603
+ };
39604
+ return position;
39605
+ }
39606
+
39607
+ function getMarkupEditOutlinePositionRotation90Deg(markupSettings, scale, svgsketchWidth) {
39608
+ const position = {
39609
+ x: svgsketchWidth - (markupSettings.markup.svg.position.y + markupSettings.markup.svg.height) * scale,
39610
+ y: markupSettings.markup.svg.position.x * scale
39611
+ };
39612
+ return position;
39613
+ }
39614
+
39615
+ function getMarkupEditOutlinePositionRotation180Deg(markupSettings, scale, svgsketchWidth, svgsketchHeight) {
39616
+ const position = {
39617
+ x: svgsketchWidth - (markupSettings.markup.svg.position.x + markupSettings.markup.svg.width) * scale,
39618
+ y: svgsketchHeight - (markupSettings.markup.svg.position.y + markupSettings.markup.svg.height) * scale
39619
+ };
39620
+ return position;
39621
+ }
39622
+
39623
+ function getMarkupEditOutlinePositionRotation270Deg(markupSettings, scale, svgsketchHeight) {
39624
+ const position = {
39625
+ x: markupSettings.markup.svg.position.y * scale,
39626
+ y: svgsketchHeight - (markupSettings.markup.svg.position.x + markupSettings.markup.svg.width) * scale
39627
+ };
39628
+ return position;
39629
+ }
39630
+
39631
+ function getMarkupSettings(target) {
39632
+ const issue = context.issueList.find(item => item.id === target.id);
39633
+ if (issue) {
39634
+ const markup = issue?.markup ? JSON.parse(issue?.markup) : undefined;
39635
+ markupUnderEditingSettings = { issueId: issue.id, markup: markup }
39636
+ }
39637
+ return markupUnderEditingSettings;
39638
+ }
39639
+
39640
+ function bindMarkupEditOutlineMouseDownHandler(outline) {
39641
+ outline.on('mousedown', onMarkupEditOutlineMouseDown);
39642
+ }
39643
+
39644
+ function bindMouseUpEventHandler() {
39645
+ window.addEventListener('mouseup', onMouseUpEventHandler);
39646
+ }
39647
+
39648
+ function unbindMouseUpEventHandler() {
39649
+ window.removeEventListener('mouseup', onMouseUpEventHandler);
39650
+ }
39651
+
39652
+ function onMouseUpEventHandler(e) {
39653
+ if (isMarkupEdit && isMarkupMove) {
39654
+ onMarkupEditOutlineMouseUp(e);
39655
+ }
39656
+ if (isMarkupEdit && isMarkupResize) {
39657
+ onMarkupResizerMouseUp(e);
39658
+ }
39659
+ }
39660
+
39661
+ function addResizerToMarkupEditOutline(outlineElm) {
39662
+ const resizerIdSuffixList = ['TL', 'TC', 'TR', 'CL', 'CR', 'BL', 'BC', 'BR'];
39663
+ resizerIdSuffixList.forEach(function (suffix) {
39664
+ const resizer = $('<div id="' + MARKUP_RESIZER_ID_PREFIX + suffix + '" class="' + CSS_CLASS_MARKUP_RESIZER + ' ' + CSS_CLASS_MARKUP_RESIZER + '-' + suffix.toLowerCase() + '" />');
39665
+ resizer.on('mousedown', onMarkupResizerMouseDown);
39666
+ outlineElm.append(resizer);
39667
+ });
39668
+ }
39669
+
39670
+ function initMarkupEditContextMenu() {
39671
+ const selector = '.' + CSS_CLASS_PDF_NOTE;
39672
+ $.contextMenu({
39673
+ selector: selector,
39674
+ trigger: 'right',
39675
+ build: function ($triggerElement, e) {
39676
+ return {
39677
+ callback: function (key, options) { },
39678
+ items: getMarkupEditContextMenuItemList($triggerElement, e)
39679
+ }
39680
+ }
39681
+ });
39682
+ }
39683
+
39684
+ function getMarkupEditContextMenuItemList($triggerElement, e) {
39685
+ const menuItems = {
39686
+ "editMarkup": {
39687
+ name: context.createLocale('app.viewer.pdf.contextMenu.edit'),
39688
+ callback: function (key, options) {
39689
+ onMarkupEditStart(e);
39690
+ }
39691
+ },
39692
+ "sep1": "---------",
39693
+ "quit": {
39694
+ name: context.createLocale('app.viewer.pdf.contextMenu.cancel'),
39695
+ icon: function () {
39696
+ return 'context-menu-icon context-menu-icon-quit';
39697
+ },
39698
+ }
39699
+ };
39700
+ return menuItems;
39701
+ }
39702
+
39703
+ function setPdfViewerCursorToolMode() {
39704
+ const btnCursorTool = $('#cursorSelectTool');
39705
+ const btnDrawAnnotation = $('#btnDrawAnnotation');
39706
+ if (btnDrawAnnotation.hasClass('toggled')) {
39707
+ btnDrawAnnotation.click();
39708
+ }
39709
+ if (!btnCursorTool.hasClass('toggled')) {
39710
+ btnCursorTool.click();
39711
+ }
39712
+ }
39713
+
39714
+ initMarkupEditContextMenu();
38778
39715
  $(document).ready(function() {
38779
39716
  context.openFile();
38780
39717