@vaadin-component-factory/vcf-pdf-viewer 0.9.1 → 1.0.1

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.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # <vcf-pdf-viewer>
6
6
 
7
- [<vcfn-pdf-viewer>](https://github.com/vaadin-component-factory/vcf-pdf-viewer) is a Web Component that provides a PDF viewer functionality. The component is developed in Polymer 3 and uses Mozilla's [PDF.js](https://github.com/mozilla/pdf.js)
7
+ [<vcf-pdf-viewer>](https://github.com/vaadin-component-factory/vcf-pdf-viewer) is a Web Component that provides a PDF viewer functionality. The component is developed in Polymer 3 and uses Mozilla's [PDF.js](https://github.com/mozilla/pdf.js)
8
8
 
9
9
  This component is part of Vaadin Component Factory.
10
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin-component-factory/vcf-pdf-viewer",
3
- "version": "0.9.1",
3
+ "version": "1.0.1",
4
4
  "description": "Polymer element providing pdf viewer",
5
5
  "main": "vcf-pdf-viewer.js",
6
6
  "repository": {
@@ -26,15 +26,15 @@
26
26
  "dependencies": {
27
27
  "@polymer/iron-resizable-behavior": "^3.0.0",
28
28
  "@polymer/polymer": "^3.0.0",
29
- "@vaadin/vaadin-element-mixin": "^2.4.1",
30
- "@vaadin/vaadin-lumo-styles": "^1.6.0",
31
- "@vaadin/vaadin-material-styles": "^1.3.2",
32
- "@vaadin/vaadin-overlay": "^3.5.0",
33
- "@vaadin/vaadin-text-field": "^2.8.4",
34
- "@vaadin/vaadin-themable-mixin": "^1.6.1",
35
- "@vaadin/vaadin-item": "^2.1.0",
36
- "@vaadin/vaadin-list-box": "^1.4.0",
37
- "@vaadin/vaadin-select": "^2.4.0",
29
+ "@vaadin/component-base": "^22.0.1",
30
+ "@vaadin/vaadin-lumo-styles": "^22.0.1",
31
+ "@vaadin/vaadin-material-styles": "^22.0.1",
32
+ "@vaadin/vaadin-overlay": "^22.0.1",
33
+ "@vaadin/text-field": "^22.0.1",
34
+ "@vaadin/vaadin-themable-mixin": "^22.0.1",
35
+ "@vaadin/item": "^22.0.1",
36
+ "@vaadin/list-box": "^22.0.1",
37
+ "@vaadin/select": "^22.0.1",
38
38
  "core-js": "^3.19.0",
39
39
  "dommatrix": "^0.0.6",
40
40
  "web-streams-polyfill": "^3.1.1"
@@ -42,6 +42,7 @@
42
42
  "devDependencies": {
43
43
  "@polymer/iron-component-page": "^4.0.0",
44
44
  "@polymer/iron-demo-helpers": "^3.0.0-pre.19",
45
+ "@vaadin/polymer-legacy-adapter": "22.0.1",
45
46
  "@webcomponents/webcomponentsjs": "^2.6.0",
46
47
  "regenerator-runtime": "^0.13.5",
47
48
  "@babel/core": "^7.16.0",
@@ -1,11 +1,12 @@
1
1
  import { PolymerElement, html } from '@polymer/polymer/polymer-element';
2
2
  import { ThemableMixin } from '@vaadin/vaadin-themable-mixin';
3
- import { ElementMixin } from '@vaadin/vaadin-element-mixin';
3
+ import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
4
4
  import { IronResizableBehavior } from '@polymer/iron-resizable-behavior';
5
5
  import { mixinBehaviors } from '@polymer/polymer/lib/legacy/class.js';
6
- import '@vaadin/vaadin-text-field';
7
- import '@vaadin/vaadin-select';
8
- import '@vaadin/vaadin-item';
6
+ import '@vaadin/polymer-legacy-adapter/template-renderer.js';
7
+ import '@vaadin/text-field';
8
+ import '@vaadin/select';
9
+ import '@vaadin/item';
9
10
 
10
11
  import * as pdfjsLib from '../pdfjs/dist/pdf';
11
12
  import * as pdfjsViewer from '../pdfjs/dist/pdf_viewer';
@@ -254,26 +255,27 @@ class PdfViewerElement extends
254
255
  <vaadin-select id="zoom" part="toolbar-zoom" value="{{zoom}}">
255
256
  <template>
256
257
  <vaadin-list-box>
257
- <vaadin-item value='auto'>Automatic zoom</vaadin-item>
258
- <vaadin-item value='page-fit'>Page fit</vaadin-item>
259
- <vaadin-item value='0.5'>50%</vaadin-item>
260
- <vaadin-item value='0.75'>75%</vaadin-item>
261
- <vaadin-item value='1.0'>100%</vaadin-item>
262
- <vaadin-item value='1.25'>125%</vaadin-item>
263
- <vaadin-item value='1.5'>150%</vaadin-item>
264
- <vaadin-item value='2.0'>200%</vaadin-item>
265
- <vaadin-item value='3.0'>300%</vaadin-item>
266
- <vaadin-item value='4.0'>400%</vaadin-item>
258
+ <vaadin-item value='auto'>Automatic zoom</vaadin-item>
259
+ <vaadin-item value='page-fit'>Page fit</vaadin-item>
260
+ <vaadin-item value='0.5'>50%</vaadin-item>
261
+ <vaadin-item value='0.75'>75%</vaadin-item>
262
+ <vaadin-item value='1.0'>100%</vaadin-item>
263
+ <vaadin-item value='1.25'>125%</vaadin-item>
264
+ <vaadin-item value='1.5'>150%</vaadin-item>
265
+ <vaadin-item value='2.0'>200%</vaadin-item>
266
+ <vaadin-item value='3.0'>300%</vaadin-item>
267
+ <vaadin-item value='4.0'>400%</vaadin-item>
267
268
  </vaadin-list-box>
268
269
  </template>
269
270
  </vaadin-select>
270
271
  <div part="toolbar-pages">
271
- <vaadin-text-field id="currentPage" part="toolbar-current-page" value="{{__currentPage}}" on-change="__pageChange"></vaadin-text-field>
272
- <span id="pageSeparator" part="toolbar-text toolbar-page-separator">/</span>
273
- <span id="totalPages" part="toolbar-text toolbar-total-pages">{{__totalPages}}</span>
274
- <button id="previousPage" part="toolbar-button toolbar-button-previous-page" on-click="__previousPage"></button>
275
- <button id="nextPage" part="toolbar-button toolbar-button-next-page" on-click="__nextPage"></button>
272
+ <vaadin-text-field id="currentPage" part="toolbar-current-page" value="{{currentPage}}" on-change="__pageChange"></vaadin-text-field>
273
+ <span id="pageSeparator" part="toolbar-text toolbar-page-separator">/</span>
274
+ <span id="totalPages" part="toolbar-text toolbar-total-pages">{{__totalPages}}</span>
275
+ <button id="previousPage" part="toolbar-button toolbar-button-previous-page" on-click="__previousPage"></button>
276
+ <button id="nextPage" part="toolbar-button toolbar-button-next-page" on-click="__nextPage"></button>
276
277
  </div>
278
+ <slot></slot>
277
279
  </div>
278
280
 
279
281
  <div id="viewerContainer" part="viewer-container" tabindex="0">
@@ -356,7 +358,7 @@ class PdfViewerElement extends
356
358
  /**
357
359
  * The current page visible viewed right now
358
360
  */
359
- __currentPage: {
361
+ currentPage: {
360
362
  type: Number,
361
363
  value: 1
362
364
  },
@@ -364,10 +366,22 @@ class PdfViewerElement extends
364
366
  * Total amount of pages in an opened document
365
367
  */
366
368
  __totalPages: Number,
369
+
370
+ /**
371
+ * Loading state
372
+ */
367
373
  __loading: {
368
374
  type: Boolean,
369
375
  value: true
370
376
  },
377
+
378
+ /**
379
+ * Whether sidebar is open after loading or not
380
+ */
381
+ __sidebarOpen: {
382
+ type: Boolean,
383
+ value: false
384
+ },
371
385
  };
372
386
  }
373
387
 
@@ -423,33 +437,45 @@ class PdfViewerElement extends
423
437
 
424
438
  this.__linkService.setViewer(this.__viewer);
425
439
  pdfRenderingQueue.setViewer(this.__viewer);
440
+
441
+ // thumbnailViewer
442
+ this.__thumbnailViewer = new pdfjsThumbnailViewer.PDFThumbnailViewer({
443
+ container: this.$.thumbnailView,
444
+ eventBus: eventBus,
445
+ linkService: this.__linkService,
446
+ renderingQueue: pdfRenderingQueue,
447
+ l10n: l10n
448
+ })
449
+
450
+ pdfRenderingQueue.setThumbnailViewer(this.__thumbnailViewer);
426
451
 
427
452
  // listeners
428
453
  eventBus.on('pagesinit', () => {
429
454
  this.__viewer.currentScaleValue = this.zoom;
430
455
  this.__loading = false;
456
+ this.__updateThumbnailViewer();
457
+ if(this.__sidebarOpen){
458
+ this.__openSidebar();
459
+ } else {
460
+ this.__closeSidebar();
461
+ }
462
+ this.__viewer.currentPage = this.setCurrentPage();
431
463
  });
432
464
  eventBus.on('pagechanging', (event) => {
433
- this.__currentPage = event.pageNumber;
465
+ this.__updateCurrentPageValue(event.pageNumber);
434
466
  this.__updatePageNumberStates();
435
467
  if(this.__thumbnailViewer && this.__thumbnailViewer.renderingQueue.isThumbnailViewEnabled){
436
- this.__thumbnailViewer.scrollThumbnailIntoView(this.__currentPage);
468
+ this.__thumbnailViewer.scrollThumbnailIntoView(this.currentPage);
437
469
  }
438
470
  });
439
471
 
440
472
  this.addEventListener('iron-resize', this.__recalculateSizes);
441
473
  this.__recalculateSizes();
474
+ }
442
475
 
443
- // thumbnailViewer
444
- this.__thumbnailViewer = new pdfjsThumbnailViewer.PDFThumbnailViewer({
445
- container: this.$.thumbnailView,
446
- eventBus: eventBus,
447
- linkService: this.__linkService,
448
- renderingQueue: pdfRenderingQueue,
449
- l10n: l10n
450
- })
451
-
452
- pdfRenderingQueue.setThumbnailViewer(this.__thumbnailViewer);
476
+ __updateCurrentPageValue(pageNumber){
477
+ this.currentPage = pageNumber;
478
+ this.dispatchEvent(new CustomEvent('currentPage-changed'));
453
479
  }
454
480
 
455
481
  __recalculateSizes() {
@@ -490,13 +516,12 @@ class PdfViewerElement extends
490
516
  this.__document = pdfjsLib.getDocument(src);
491
517
  return this.__document.promise.then((pdfDocument) => {
492
518
  // Document loaded, specifying document for the viewer.
493
- this.__viewer.setDocument(pdfDocument);
494
519
  this.__thumbnailViewer.setDocument(pdfDocument);
520
+ this.__viewer.setDocument(pdfDocument);
495
521
  this.__linkService.setDocument(pdfDocument);
496
522
 
497
523
  this.$.toolbar.classList.add('ready');
498
524
  this.__totalPages = pdfDocument.numPages;
499
- this.__currentPage = 1;
500
525
  this.__updatePageNumberStates();
501
526
  this.__setPdfTitleFromMetadata(pdfDocument).then(() => {
502
527
  this.dispatchEvent(new CustomEvent('document-loaded', {
@@ -569,8 +594,8 @@ class PdfViewerElement extends
569
594
  }
570
595
 
571
596
  __updatePageNumberStates() {
572
- this.$.previousPage.disabled = (this.__currentPage === 1);
573
- this.$.nextPage.disabled = (this.__currentPage === this.__totalPages);
597
+ this.$.previousPage.disabled = (this.currentPage === 1);
598
+ this.$.nextPage.disabled = (this.currentPage === this.__totalPages);
574
599
  }
575
600
 
576
601
  __zoomChanged(value) {
@@ -602,6 +627,13 @@ class PdfViewerElement extends
602
627
  this.__viewer.currentPageNumber = page;
603
628
  }
604
629
 
630
+ setCurrentPage(value) {
631
+ if (value != undefined) {
632
+ this.$.currentPage.value = value;
633
+ }
634
+ this.__pageChange();
635
+ }
636
+
605
637
  _getPage() {
606
638
  return this.__viewer.currentPageNumber;
607
639
  }
@@ -616,9 +648,25 @@ class PdfViewerElement extends
616
648
 
617
649
  __toogleSidebar() {
618
650
  if (this.$.outerContainer.classList.length == 0) {
651
+ this.__openSidebar();
652
+ } else {
653
+ this.__closeSidebar();
654
+ }
655
+ }
656
+
657
+ __openSidebar() {
658
+ if(!this.__thumbnailViewer ||this.__loading){
659
+ this.__sidebarOpen = true;
660
+ } else {
619
661
  this.__thumbnailViewer.renderingQueue.isThumbnailViewEnabled = true;
620
662
  this.__updateThumbnailViewer();
621
663
  this.$.outerContainer.classList.add('sidebarOpen');
664
+ }
665
+ }
666
+
667
+ __closeSidebar() {
668
+ if(!this.__thumbnailViewer || this.__loading){
669
+ this.__sidebarOpen = false;
622
670
  } else {
623
671
  this.__thumbnailViewer.renderingQueue.isThumbnailViewEnabled = false;
624
672
  this.$.outerContainer.classList.remove('sidebarOpen');
@@ -650,7 +698,10 @@ class PdfViewerElement extends
650
698
  }));
651
699
  return false;
652
700
  };
653
- }
701
+ }
702
+ if(this.__thumbnailViewer && this.__thumbnailViewer.renderingQueue.isThumbnailViewEnabled){
703
+ this.__thumbnailViewer.scrollThumbnailIntoView(this.currentPage);
704
+ }
654
705
  }
655
706
  }
656
707
 
@@ -6,9 +6,9 @@ import '@vaadin/vaadin-lumo-styles/spacing.js';
6
6
  import '@vaadin/vaadin-lumo-styles/typography.js';
7
7
  import '@vaadin/vaadin-lumo-styles/font-icons.js';
8
8
 
9
- import '@vaadin/vaadin-select/theme/lumo/vaadin-select-styles.js';
10
- import '@vaadin/vaadin-list-box/theme/lumo/vaadin-list-box-styles.js';
11
- import '@vaadin/vaadin-item/theme/lumo/vaadin-item-styles.js';
9
+ import '@vaadin/select/theme/lumo/vaadin-select-styles.js';
10
+ import '@vaadin/list-box/theme/lumo/vaadin-list-box-styles.js';
11
+ import '@vaadin/item/theme/lumo/vaadin-item-styles.js';
12
12
 
13
13
  registerStyles(
14
14
  'vcf-pdf-viewer',
@@ -78,7 +78,7 @@ registerStyles(
78
78
  margin: var(--lumo-space-xs);
79
79
  background: transparent;
80
80
  border: none;
81
- padding-top: 0.3em;
81
+ padding-top: 0.2em;
82
82
  }
83
83
 
84
84
  [part~="toolbar-button"]:disabled {
@@ -4,10 +4,10 @@ import { registerStyles, css } from '@vaadin/vaadin-themable-mixin/register-styl
4
4
  import '@vaadin/vaadin-material-styles/color.js';
5
5
  import '@vaadin/vaadin-material-styles/typography.js';
6
6
 
7
- import '@vaadin/vaadin-text-field/theme/material/vaadin-text-field-styles.js';
8
- import '@vaadin/vaadin-select/theme/material/vaadin-select-styles.js';
9
- import '@vaadin/vaadin-list-box/theme/material/vaadin-list-box-styles.js';
10
- import '@vaadin/vaadin-item/theme/material/vaadin-item-styles.js';
7
+ import '@vaadin/text-field/theme/material/vaadin-text-field-styles.js';
8
+ import '@vaadin/select/theme/material/vaadin-select-styles.js';
9
+ import '@vaadin/list-box/theme/material/vaadin-list-box-styles.js';
10
+ import '@vaadin/item/theme/material/vaadin-item-styles.js';
11
11
 
12
12
  registerStyles(
13
13
  'vcf-pdf-viewer',
@@ -1,2 +1,2 @@
1
- import './theme/material/vcf-pdf-viewer.js';
2
- export * from './src/vcf-pdf-viewer.js';
1
+ import '../../src/vcf-pdf-viewer.js';
2
+ import './vcf-pdf-viewer-styles.js';