@vitrosoftware/common-ui-ts 1.1.226 → 1.1.228

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 (31) hide show
  1. package/css/std/controls/lookup-picker/lookup-picker-selected-item.css +0 -1
  2. package/css/std/controls/lookup-picker/lookup-picker-value-list.css +0 -1
  3. package/css/std/controls/lookup-picker/lookup-picker.css +1 -6
  4. package/css/std/controls/pdf-viewer/img/compare-dlg-separator.svg +3 -1
  5. package/css/std/controls/pdf-viewer/img/compare-dlg-title.svg +12 -0
  6. package/css/std/controls/pdf-viewer/pdf-viewer-index.css +148 -0
  7. package/css/std/controls/pdf-viewer/pdf-viewer.css +148 -0
  8. package/css/std/controls/select/select.css +2 -2
  9. package/css/std/controls/table-view/table-view-custom-lookup-edit.css +1 -1
  10. package/css/std/controls/table-view/treegrid-cell.css +4 -0
  11. package/css/std/controls/table-view/treegrid-context-menu.css +3 -3
  12. package/dist/index.css +3 -10
  13. package/dist/index.js +894 -1126
  14. package/dist/index.js.map +1 -1
  15. package/dist/src/controls/LookupPicker/LookupPicker.d.ts +2 -0
  16. package/dist/src/controls/LookupPicker/ValueList.d.ts +2 -0
  17. package/dist/src/controls/PdfViewer/services/PdfViewerService.d.ts +6 -0
  18. package/dist/src/controls/ScrollBar/ScrollBar.d.ts +1 -1
  19. package/dist/src/controls/TableView/TableViewConstants.d.ts +2 -1
  20. package/dist/src/controls/TableView/services/TableViewService.d.ts +1 -0
  21. package/dist/src/controls/TableView/services/impl/TableViewServiceImpl.d.ts +1 -0
  22. package/dist/src/controls/ViewPart/ViewPart.d.ts +2 -1
  23. package/dist/src/models/ItemCopyRequest.d.ts +5 -1
  24. package/dist/src/services/FileService.d.ts +8 -0
  25. package/lib/dxf-viewer/parser/DxfArrayScanner.js +27 -1
  26. package/lib/dxf-viewer/parser/DxfParser.js +7 -4
  27. package/lib/fflate/fflate.module.js +2672 -0
  28. package/package.json +1 -1
  29. package/src/controls/BimViewer/js/bim-viewer.js +2 -2
  30. package/src/controls/DxfViewer/js/dxf-viewer.js +100 -29
  31. package/src/controls/PdfViewer/js/pdf-viewer.js +240 -36
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitrosoftware/common-ui-ts",
3
- "version": "1.1.226",
3
+ "version": "1.1.228",
4
4
  "description": "vitro software common ui ts",
5
5
  "author": "",
6
6
  "license": "MIT",
@@ -1,11 +1,11 @@
1
- import { BIMModel, BIMCommon, BIMAnnotation } from '/resource/bimViewer/js/bim-viewer-models.js?version=1.1.226';
1
+ import { BIMModel, BIMCommon, BIMAnnotation } from '/resource/bimViewer/js/bim-viewer-models.js?version=1.1.228';
2
2
 
3
3
  import {
4
4
  Viewer, XKTLoaderPlugin, NavCubePlugin, SectionPlanesPlugin, math, BCFViewpointsPlugin, AnnotationsPlugin,
5
5
  ContextMenu, TreeViewPlugin, StoreyViewsPlugin, AngleMeasurementsPlugin, CameraMemento, DistanceMeasurementsPlugin,
6
6
  GLTFLoaderPlugin, utils, FastNavPlugin, MetaObject, parsers
7
7
  }
8
- from '/resource/bimViewer/js/xeokit/xeokit-sdk.es.js?version=1.1.226';
8
+ from '/resource/bimViewer/js/xeokit/xeokit-sdk.es.js?version=1.1.228';
9
9
 
10
10
 
11
11
  //----------------------------------------------------------------------------------------------------------------------
@@ -1,17 +1,18 @@
1
- import * as three from '/resource/dxfViewer/js/three/three.module.js?version=1.1.226';
2
- import { Matrix3, Vector2 } from '/resource/dxfViewer/js/three/three.module.js?version=1.1.226';
3
- import { Batch, DxfViewer, Layer } from '/resource/dxfViewer/js/viewer/DxfViewer.js?version=1.1.226';
4
- import { Block as SceneBlock } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.226';
5
- import { Block } from '/resource/dxfViewer/js/viewer/DxfViewer.js?version=1.1.226';
6
- import { DxfScene, Entity, ColorCode } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.226';
7
- import { TextRenderer, ParseSpecialChars, HAlign, VAlign } from '/resource/dxfViewer/js/viewer/TextRenderer.js?version=1.1.226';
8
- import { DxfWorker } from '/resource/dxfViewer/js/viewer/DxfWorker.js?version=1.1.226';
9
- import { DxfFetcher } from '/resource/dxfViewer/js/viewer/DxfFetcher.js?version=1.1.226';
10
- import DxfParser from '/resource/dxfViewer/js/viewer/parser/DxfParser.js?version=1.1.226';
11
- import { RenderBatch } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.226';
12
- import { DynamicBuffer, NativeType } from '/resource/dxfViewer/js/viewer/DynamicBuffer.js?version=1.1.226';
13
- import { OrbitControls } from '/resource/dxfViewer/js/viewer/OrbitControls.js?version=1.1.226';
14
- import { CSS2DRenderer, CSS2DObject } from '/resource/dxfViewer/js/three/three.module.js?version=1.1.226';
1
+ import * as three from '/resource/dxfViewer/js/three/three.module.js?version=1.1.228';
2
+ import { Matrix3, Vector2 } from '/resource/dxfViewer/js/three/three.module.js?version=1.1.228';
3
+ import { Batch, DxfViewer, Layer } from '/resource/dxfViewer/js/viewer/DxfViewer.js?version=1.1.228';
4
+ import { Block as SceneBlock } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.228';
5
+ import { Block } from '/resource/dxfViewer/js/viewer/DxfViewer.js?version=1.1.228';
6
+ import { DxfScene, Entity, ColorCode } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.228';
7
+ import { TextRenderer, ParseSpecialChars, HAlign, VAlign } from '/resource/dxfViewer/js/viewer/TextRenderer.js?version=1.1.228';
8
+ import { DxfWorker } from '/resource/dxfViewer/js/viewer/DxfWorker.js?version=1.1.228';
9
+ import { DxfFetcher } from '/resource/dxfViewer/js/viewer/DxfFetcher.js?version=1.1.228';
10
+ import DxfParser from '/resource/dxfViewer/js/viewer/parser/DxfParser.js?version=1.1.228';
11
+ import { RenderBatch } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.228';
12
+ import { DynamicBuffer, NativeType } from '/resource/dxfViewer/js/viewer/DynamicBuffer.js?version=1.1.228';
13
+ import { OrbitControls } from '/resource/dxfViewer/js/viewer/OrbitControls.js?version=1.1.228';
14
+ import { CSS2DRenderer, CSS2DObject } from '/resource/dxfViewer/js/three/three.module.js?version=1.1.228';
15
+ import { Unzip, UnzipInflate } from '/resource/dxfViewer/js/fflate/fflate.module.js?version=1.1.228'
15
16
 
16
17
  let treeViewData = [];
17
18
  let notes = [];
@@ -2282,6 +2283,11 @@ export class Annotation extends Drawable {
2282
2283
 
2283
2284
  /** Fetches and parses DXF file. */
2284
2285
  export class VitroDxfFetcher extends DxfFetcher {
2286
+ constructor(url, encoding = "utf-8") {
2287
+ super(url, encoding)
2288
+ this.tail = ""
2289
+ this.dxfChunkArray = []
2290
+ }
2285
2291
 
2286
2292
  async SyncFetch() {
2287
2293
  //const response = fetch(this.url)
@@ -2327,6 +2333,11 @@ export class VitroDxfFetcher extends DxfFetcher {
2327
2333
  async Fetch(progressCbk = null) {
2328
2334
  const response = await fetch(this.url)
2329
2335
  const fileName = this._getFileName(response)
2336
+
2337
+ if (fileName.endsWith(".zdxf")) {
2338
+ return await this._processZip(response, progressCbk);
2339
+ }
2340
+
2330
2341
  const totalSize = +response.headers.get('Content-Length')
2331
2342
 
2332
2343
  const reader = response.body.getReader()
@@ -2349,14 +2360,10 @@ export class VitroDxfFetcher extends DxfFetcher {
2349
2360
  }
2350
2361
  }
2351
2362
 
2352
- if (fileName.endsWith(".zdxf")) {
2353
- return await this._processZip(buffer, progressCbk);
2354
- }
2355
-
2356
2363
  return this._decodeAndParse(buffer, progressCbk);
2357
2364
  }
2358
2365
 
2359
- _decodeAndParse(buffer, progressCbk) {
2366
+ _decodeAndParse(buffer, progressCbk, fetcher = null) {
2360
2367
  const decoder = new TextDecoder('utf-8');
2361
2368
  const parser = new DxfParser();
2362
2369
 
@@ -2364,23 +2371,87 @@ export class VitroDxfFetcher extends DxfFetcher {
2364
2371
  progressCbk("parse", 0, null)
2365
2372
  }
2366
2373
 
2367
- return parser.parseSync(decoder.decode(buffer));
2374
+ return parser.parseSync(decoder.decode(buffer), fetcher);
2368
2375
  }
2369
2376
 
2370
- async _processZip(zipBuffer, progressCbk) {
2371
- const zip = await JSZip.loadAsync(zipBuffer);
2372
- const dxfFile = Object.keys(zip.files).find((file) => file.endsWith(".dxf"));
2377
+ async _processZip(response, progressCbk) {
2378
+ const reader = response.body.getReader()
2379
+ const decoder = new TextDecoder('utf-8');
2380
+
2381
+ const unzipper = new Unzip();
2382
+ unzipper.register(UnzipInflate)
2383
+ unzipper.onfile = file => {
2384
+ if (!file.name.toLowerCase().endsWith('.dxf')) {
2385
+ // ���������� ������ �����
2386
+ file.ondata = () => { };
2387
+ file.start();
2388
+ return;
2389
+ }
2390
+
2391
+ const totalSize = file.size;
2392
+ let processed = 0;
2393
+
2394
+ if (progressCbk)
2395
+ progressCbk('extract', 0, null);
2373
2396
 
2374
- if (!dxfFile) {
2375
- throw new Error("DXF-file not found.");
2397
+ file.ondata = (err, chunk, final) => {
2398
+ if (err) {
2399
+ console.log(err);
2400
+ return;
2401
+ }
2402
+
2403
+ processed += chunk.byteLength;
2404
+ const buffer = decoder.decode(chunk, { stream: !final });
2405
+ this.DxfChunkParser(buffer);
2406
+
2407
+ if (progressCbk && totalSize > 0) {
2408
+ progressCbk('extract', processed / totalSize, { processed, totalSize });
2409
+ }
2410
+ };
2411
+
2412
+ file.start(); // ��������� ���������� �����
2413
+ };
2414
+
2415
+ // ������ Unzip ������� ZIP-�����
2416
+ while (true) {
2417
+ const { value, done } = await reader.read();
2418
+ if (done) {
2419
+ unzipper.push(new Uint8Array(0), true); // ������ EOF
2420
+ break;
2421
+ }
2422
+ unzipper.push(value, false);
2376
2423
  }
2377
2424
 
2378
- if (progressCbk !== null) {
2379
- progressCbk("extract", 0, null);
2425
+ const firstString = this.dxfChunkArray[0]
2426
+ this.dxfChunkArray = this.dxfChunkArray.slice(1)
2427
+ const parser = new DxfParser(this)
2428
+ return parser.parseSync(firstString)
2429
+ }
2430
+
2431
+ DxfChunkParser(buffer) {
2432
+ if (buffer[0] == '\n')
2433
+ buffer = buffer.substring(1)
2434
+ buffer = this.tail + buffer
2435
+ const nFn = buffer.lastIndexOf('\n')
2436
+ const nFr = buffer.lastIndexOf('\r')
2437
+ let nF = Math.max(nFn, nFr)
2438
+ this.tail = buffer.substring(nF + 1)
2439
+ if (nFn - nFr == 1)
2440
+ nF--
2441
+ buffer = buffer.substring(0, nF)
2442
+ this.dxfChunkArray.push(buffer);
2443
+ }
2444
+
2445
+
2446
+ GetNextChunk() {
2447
+ if (this.dxfChunkArray.length == 0) {
2448
+ return null
2380
2449
  }
2381
- const fileData = await zip.file(dxfFile).async("uint8array");
2382
2450
 
2383
- return this._decodeAndParse(fileData, progressCbk);
2451
+ const firstString = this.dxfChunkArray[0]
2452
+ this.dxfChunkArray = this.dxfChunkArray.slice(1)
2453
+ firstString.split(/\r\n|\r|\n/g)
2454
+ return firstString.split(/\r\n|\r|\n/g)
2384
2455
  }
2385
2456
 
2386
2457
  }
@@ -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.226",
21211
+ value: "resource/pdfViewer/js/pdf.worker.js?version=1.1.228",
21212
21212
  kind: OptionKind.WORKER
21213
21213
  }
21214
21214
  };
@@ -37419,6 +37419,13 @@ const EVENT_SEARCH_ISSUE_LIST = 'vitro.search.issue.list';
37419
37419
  const EVENT_ISSUE_LIST_REFRESH = 'vitro.issue.list.refresh';
37420
37420
  const EVENT_ISSUE_LIST_SELECT_ITEM = 'vitro.issue.list.select.item';
37421
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;
37422
37429
 
37423
37430
  function initContextMenuCanvas() {
37424
37431
  var pages = '#viewer .page:not(.has-new-svg)';
@@ -37526,6 +37533,8 @@ function initCompare() {
37526
37533
  bindCompareDlgPageChange();
37527
37534
  bindBtnsCompareDocsSelect();
37528
37535
  bindCompareDlgVersionChange();
37536
+ initButtonSelectFileDocA();
37537
+ initButtonSelectFileDocB();
37529
37538
 
37530
37539
  let fileName = context.file.fieldValueMap.name;
37531
37540
  $('div.compare-dlg_doc-a_name').text(fileName);
@@ -37543,26 +37552,8 @@ function initCompare() {
37543
37552
  }));
37544
37553
  });
37545
37554
 
37546
- let loadedVersionId = getLoadedVersionId();
37547
- let version = context.fileVersionList.find(item => item.id == loadedVersionId);
37548
- let loadedVersion = `v${version.name}`;
37549
- $('#docAVersion').val(loadedVersion);
37550
- let loadedVersionArray = version.name.split('.');
37551
- let loadedVersionMinor = loadedVersionArray[1];
37552
- let loadedVersionMajor = loadedVersionArray[0];
37553
- if (loadedVersionId != context.currentVersionId) {
37554
- let lastVersion = context.fileVersionList.find(item => item.id == context.currentVersionId);
37555
- let lastVersionLabel = `v${lastVersion.name}`;
37556
- $('#docBVersion').val(lastVersionLabel);
37557
- } else {
37558
- if (context.fileVersionList.length > 1) {
37559
- let previousVersion = context.fileVersionList[1];
37560
- let previousVersionLabel = `v${previousVersion.name}`;
37561
- $('#docBVersion').val(previousVersionLabel);
37562
- } else {
37563
- $('#docBVersion').val(loadedVersion);
37564
- }
37565
- }
37555
+ currentDocFileVersionList = context.fileVersionList;
37556
+ initDocVersion();
37566
37557
  $('#docAPage').val(1);
37567
37558
  $('#docBPage').val(1);
37568
37559
  }
@@ -37578,14 +37569,12 @@ function getLoadedVersionId() {
37578
37569
  function showDlgCompare() {
37579
37570
  $('.compare-dlg-wrap').show();
37580
37571
 
37581
- let currentPage = getCurrentPage();
37582
- $("#docAPage").val(currentPage);
37583
- $("#docBPage").val(currentPage);
37572
+ resetDocFileVersionList();
37573
+ resetDocPage();
37574
+ initDocVersion();
37584
37575
 
37585
37576
  compareObjList = getCompareObjList();
37586
-
37587
37577
  loadDocAObj(compareObjList.docA.url);
37588
-
37589
37578
  loadDocBObj(compareObjList.docB.url);
37590
37579
  }
37591
37580
 
@@ -37603,6 +37592,7 @@ function getDocA() {
37603
37592
  let docAVersion = docAVersionValue.substring(1);
37604
37593
  let docAPage = Number($("#docAPage").val());
37605
37594
  let docAVersionFile = context.fileVersionList.find(item => item.name == docAVersion);
37595
+ docAFileVersionList = context.fileVersionList;
37606
37596
  let docA = {
37607
37597
  name: fileName,
37608
37598
  version: docAVersionValue,
@@ -37622,6 +37612,7 @@ function getDocB() {
37622
37612
  let docBVersion = docBVersionValue.substring(1);
37623
37613
  let docBPage = Number($("#docBPage").val());
37624
37614
  let docBVersionFile = context.fileVersionList.find(item => item.name == docBVersion);
37615
+ docBFileVersionList = context.fileVersionList;
37625
37616
  let docB = {
37626
37617
  name: fileName,
37627
37618
  version: docBVersionValue,
@@ -37759,14 +37750,14 @@ function isComparedDocumentCurrentOpened(url) {
37759
37750
 
37760
37751
  function bindCompareDlgDcoAVersionChange() {
37761
37752
  $('#docAVersion').on('change', function () {
37762
- compareObjList.docA = getDocA();
37753
+ refreshCompareObjListDocA();
37763
37754
  loadDocAObj(compareObjList.docA.url);
37764
37755
  });
37765
37756
  }
37766
37757
 
37767
37758
  function bindCompareDlgDcoBVersionChange() {
37768
37759
  $('#docBVersion').on('change', function () {
37769
- compareObjList.docB = getDocB();
37760
+ refreshCompareObjListDocB();
37770
37761
  loadDocBObj(compareObjList.docB.url);
37771
37762
  });
37772
37763
  }
@@ -37788,7 +37779,7 @@ function bindCompareDlgDcoAPageChange() {
37788
37779
  } else {
37789
37780
  enableAllpagesInOtherDropDown($('#docBPage'));
37790
37781
  }
37791
- compareObjList.docA = getDocA();
37782
+ compareObjList.docA.page = Number($('#docAPage').val());
37792
37783
  reloadCompareThumb(pdfDocObjA, thumbContainer, Number($(this).val()));
37793
37784
  });
37794
37785
  }
@@ -37801,7 +37792,7 @@ function bindCompareDlgDcoBPageChange() {
37801
37792
  } else {
37802
37793
  enableAllpagesInOtherDropDown($('#docAPage'));
37803
37794
  }
37804
- compareObjList.docB = getDocB();
37795
+ compareObjList.docB.page = Number($('#docBPage').val());
37805
37796
  reloadCompareThumb(pdfDocObjB, thumbContainer, Number($(this).val()));
37806
37797
  });
37807
37798
  }
@@ -38669,12 +38660,14 @@ function initItemChangedEventListener() {
38669
38660
  }
38670
38661
 
38671
38662
  function onItemChanged(e) {
38672
- const width = $('.vitro-issue-detail').width();
38673
- if (width && $('.vitro-issue-detail').is(':visible')) {
38674
- setContainerInset(width);
38675
- }
38676
- if (!$('.vitro-issue-detail').resizable('instance')) {
38677
- initResizable($('.vitro-issue-detail'));
38663
+ if (!isEventItemSelectDialog(e)) {
38664
+ const width = $('.vitro-issue-detail').width();
38665
+ if (width && $('.vitro-issue-detail').is(':visible')) {
38666
+ setContainerInset(width);
38667
+ }
38668
+ if (!$('.vitro-issue-detail').resizable('instance')) {
38669
+ initResizable($('.vitro-issue-detail'));
38670
+ }
38678
38671
  }
38679
38672
  }
38680
38673
 
@@ -38775,6 +38768,217 @@ function bindOnSidebarToggle() {
38775
38768
  function isScaleModeRelative() {
38776
38769
  const currentScaleMode = PDFViewerApplication.pdfViewer._currentScaleValue;
38777
38770
  return currentScaleMode == 'page-width' || currentScaleMode == 'page-fit' || currentScaleMode == 'auto';
38771
+ }
38772
+
38773
+ function initButtonSelectFileDocA() {
38774
+ const btn = $('<a id="btnSelectFileDocA">' + context.selectFileBtnText + '</a>');
38775
+ btn.on('click', onClickButtonSelectFileDocA);
38776
+ $('.compare-dlg_doc-a_file-select').append(btn);
38777
+ }
38778
+
38779
+ async function onClickButtonSelectFileDocA(e) {
38780
+ e.preventDefault();
38781
+ e.stopPropagation();
38782
+ const idList = await context.getItemIdList();
38783
+ const id = idList?.length ? idList[0] : false;
38784
+ onSelectFileDocA(id);
38785
+ }
38786
+
38787
+ async function onSelectFileDocA(id) {
38788
+ if (isSelectedFileChanged(id, getDocFileIdFromUrl(compareObjList.docA.url))) {
38789
+ const docObj = await getDocObj(id, $('#docAVersionList'), $("#docAVersion"), $("#docAPage"), $('div.compare-dlg_doc-a_name'), DOC_A);
38790
+ if (docObj) {
38791
+ compareObjList.docA = docObj;
38792
+ loadDocAObj(compareObjList.docA.url);
38793
+ }
38794
+ }
38795
+ }
38796
+
38797
+ function isSelectedFileChanged(id, compareObjListDocId) {
38798
+ return id && (context.file.id !== id || (context.file.id === id && id !== compareObjListDocId));
38799
+ }
38800
+
38801
+ async function getDocObj(id, fileVersionListElm, docVersionElm, docPageElm, fileNameElm, docType) {
38802
+ const file = await context.itemService.get(id);
38803
+ const fileName = file.fieldValueMap.name;
38804
+
38805
+ if (isValidDocumentFormat(fileName)) {
38806
+ const fileId = file.id;
38807
+ const versionList = await context.fileService.get(id);
38808
+ const fileVersionList = getFileVersionList(versionList);
38809
+ setDocFileVersionList(docType, fileVersionList);
38810
+ const fileVersion = file.fieldValueMap.version.fieldValueMap.name;
38811
+ setDlgDocFileName(fileNameElm, fileName);
38812
+ refreshVersionList(fileVersionListElm, fileVersionList);
38813
+ const docVersionValue = 'v' + fileVersion;
38814
+ docVersionElm.val(docVersionValue);
38815
+ docPageElm.val(1);
38816
+ const docVersionFile = fileVersionList.find(item => item.name == fileVersion);
38817
+
38818
+ const doc = {
38819
+ name: fileName,
38820
+ version: docVersionValue,
38821
+ page: 1,
38822
+ uploadBy: docVersionFile.userName,
38823
+ uploadDate: docVersionFile.date,
38824
+ url: `/api/file/getByItemId/${fileId}/${fileVersion}`
38825
+ };
38826
+
38827
+ return doc;
38828
+ }
38829
+
38830
+ return false;
38831
+ }
38832
+
38833
+ function setDocFileVersionList(docType, fileVersionList) {
38834
+ if (docType === DOC_A) {
38835
+ docAFileVersionList = fileVersionList;
38836
+ } else {
38837
+ docBFileVersionList = fileVersionList;
38838
+ }
38839
+ }
38840
+
38841
+ function refreshVersionList(fileVersionListElm, fileVersionList) {
38842
+ fileVersionListElm.html(null);
38843
+ $.each(fileVersionList, function (i, item) {
38844
+ const value = 'v' + item.name;
38845
+ fileVersionListElm.append($('<li>', {
38846
+ value: value,
38847
+ text: value,
38848
+ }));
38849
+ });
38850
+ }
38851
+
38852
+ function getFileVersionList(versionList) {
38853
+ const list = versionList?.map(version => {
38854
+ return {
38855
+ id: version.id,
38856
+ name: version.fieldValueMap.name,
38857
+ userName: version.insertUserName,
38858
+ date: context.getDateText(version.insertDate)
38859
+ };
38860
+ });
38861
+
38862
+ return list;
38863
+ };
38864
+
38865
+ function setDlgDocFileName(fileNameElm, fileName) {
38866
+ fileNameElm.text(fileName);
38867
+ }
38868
+
38869
+ function initButtonSelectFileDocB() {
38870
+ const btn = $('<a id="btnSelectFileDocB">' + context.selectFileBtnText + '</a>');
38871
+ btn.on('click', onClickButtonSelectFileDocB);
38872
+ $('.compare-dlg_doc-b_file-select').append(btn);
38873
+ }
38874
+
38875
+ async function onClickButtonSelectFileDocB(e) {
38876
+ e.preventDefault();
38877
+ e.stopPropagation();
38878
+ const idList = await context.getItemIdList();
38879
+ const id = idList?.length ? idList[0] : false;
38880
+ onSelectFileDocB(id);
38881
+ }
38882
+
38883
+ async function onSelectFileDocB(id) {
38884
+ if (isSelectedFileChanged(id, getDocFileIdFromUrl(compareObjList.docB.url))) {
38885
+ const docObj = await getDocObj(id, $('#docBVersionList'), $("#docBVersion"), $("#docBPage"), $('div.compare-dlg_doc-b_name'), DOC_B);
38886
+ if (docObj) {
38887
+ compareObjList.docB = docObj;
38888
+ loadDocBObj(compareObjList.docB.url);
38889
+ }
38890
+
38891
+ }
38892
+ }
38893
+
38894
+ function getDocFileIdFromUrl(url) {
38895
+ const urlArr = url.split('/');
38896
+ return itemId = urlArr[urlArr.length - 2];
38897
+ }
38898
+
38899
+ function refreshCompareObjListDocA() {
38900
+ refreshCompareObjListDoc(DOC_A);
38901
+ };
38902
+
38903
+ function refreshCompareObjListDocB() {
38904
+ refreshCompareObjListDoc(DOC_B);
38905
+ };
38906
+
38907
+ function refreshCompareObjListDoc(docType) {
38908
+ const docVersionValue = $("#" + docType + "Version").val();
38909
+ const docVersion = docVersionValue.substring(1);
38910
+ const docPage = Number($("#" + docType + "Page").val());
38911
+ let docVersionFile;
38912
+ if (docType === DOC_A) {
38913
+ docVersionFile = docAFileVersionList.find(item => item.name == docVersion);
38914
+ } else {
38915
+ docVersionFile = docBFileVersionList.find(item => item.name == docVersion);
38916
+ }
38917
+ compareObjList[docType].page = docPage;
38918
+ compareObjList[docType].version = docVersionValue;
38919
+ compareObjList[docType].uploadBy = docVersionFile.userName;
38920
+ compareObjList[docType].uploadDate = docVersionFile.date;
38921
+ compareObjList[docType].url = getDocVersionUrl(compareObjList[docType].url, docVersion);
38922
+ }
38923
+
38924
+ function getDocVersionUrl(url, version) {
38925
+ const lastSlashIndex = url.lastIndexOf('/');
38926
+ if (lastSlashIndex === -1) {
38927
+ return url;
38928
+ }
38929
+ const partBeforeLastSlash = url.slice(0, lastSlashIndex + 1);
38930
+ return partBeforeLastSlash + version;
38931
+ }
38932
+
38933
+ function resetDocFileVersionList() {
38934
+ docAFileVersionList = currentDocFileVersionList;
38935
+ docBFileVersionList = currentDocFileVersionList;
38936
+ }
38937
+
38938
+ function resetDocPage() {
38939
+ const currentPage = getCurrentPage();
38940
+ $("#docAPage").val(currentPage);
38941
+ $("#docBPage").val(currentPage);
38942
+ }
38943
+
38944
+ function initDocVersion() {
38945
+ const loadedVersion = getInitVersionDocA();
38946
+ const versionDocB = getInitVersionDocB(loadedVersion);
38947
+ $('#docAVersion').val(loadedVersion);
38948
+ $('#docBVersion').val(versionDocB);
38949
+ }
38950
+
38951
+ function getInitVersionDocA() {
38952
+ const loadedVersionId = getLoadedVersionId();
38953
+ const version = context.fileVersionList.find(item => item.id == loadedVersionId);
38954
+ const loadedVersion = `v${version.name}`;
38955
+ return loadedVersion;
38956
+ }
38957
+
38958
+ function getInitVersionDocB(loadedVersion) {
38959
+ const loadedVersionId = getLoadedVersionId();
38960
+ if (loadedVersionId != context.currentVersionId) {
38961
+ const lastVersion = context.fileVersionList.find(item => item.id == context.currentVersionId);
38962
+ const lastVersionLabel = `v${lastVersion.name}`;
38963
+ return lastVersionLabel;
38964
+ } else {
38965
+ if (context.fileVersionList.length > 1) {
38966
+ const previousVersion = context.fileVersionList[1];
38967
+ const previousVersionLabel = `v${previousVersion.name}`;
38968
+ return previousVersionLabel;
38969
+ } else {
38970
+ return loadedVersion;
38971
+ }
38972
+ }
38973
+ }
38974
+
38975
+ function isValidDocumentFormat(filename) {
38976
+ const lowercasedFilename = filename.toLowerCase();
38977
+ return lowercasedFilename.endsWith(FILE_EXTENSION_PDF);
38978
+ }
38979
+
38980
+ function isEventItemSelectDialog(e) {
38981
+ return e?.detail?.eventScopeId?.startsWith(ITEM_SELECT_DIALOG);
38778
38982
  }
38779
38983
  const MARKUP_RESIZER_ID_PREFIX = 'markupResizer';
38780
38984
  const CSS_CLASS_MARKUP_RESIZER = 'vitro-markup-resizer';