@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 +1 -1
- package/package.json +11 -10
- package/src/vcf-pdf-viewer.js +88 -37
- package/theme/lumo/vcf-pdf-viewer-styles.js +4 -4
- package/theme/material/vcf-pdf-viewer-styles.js +4 -4
- package/theme/material/vcf-pdf-viewer.js +2 -2
- package/pdfjs/dist/get.js +0 -1857
- package/pdfjs/dist/index.js +0 -767
- package/pdfjs/dist/typeof.js +0 -100
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# <vcf-pdf-viewer>
|
|
6
6
|
|
|
7
|
-
[<
|
|
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.
|
|
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/
|
|
30
|
-
"@vaadin/vaadin-lumo-styles": "^
|
|
31
|
-
"@vaadin/vaadin-material-styles": "^
|
|
32
|
-
"@vaadin/vaadin-overlay": "^
|
|
33
|
-
"@vaadin/
|
|
34
|
-
"@vaadin/vaadin-themable-mixin": "^
|
|
35
|
-
"@vaadin/
|
|
36
|
-
"@vaadin/
|
|
37
|
-
"@vaadin/
|
|
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",
|
package/src/vcf-pdf-viewer.js
CHANGED
|
@@ -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/
|
|
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/
|
|
7
|
-
import '@vaadin/
|
|
8
|
-
import '@vaadin/
|
|
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
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
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
|
-
|
|
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.
|
|
465
|
+
this.__updateCurrentPageValue(event.pageNumber);
|
|
434
466
|
this.__updatePageNumberStates();
|
|
435
467
|
if(this.__thumbnailViewer && this.__thumbnailViewer.renderingQueue.isThumbnailViewEnabled){
|
|
436
|
-
this.__thumbnailViewer.scrollThumbnailIntoView(this.
|
|
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
|
-
|
|
444
|
-
this.
|
|
445
|
-
|
|
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.
|
|
573
|
-
this.$.nextPage.disabled = (this.
|
|
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/
|
|
10
|
-
import '@vaadin/
|
|
11
|
-
import '@vaadin/
|
|
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.
|
|
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/
|
|
8
|
-
import '@vaadin/
|
|
9
|
-
import '@vaadin/
|
|
10
|
-
import '@vaadin/
|
|
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 '
|
|
2
|
-
|
|
1
|
+
import '../../src/vcf-pdf-viewer.js';
|
|
2
|
+
import './vcf-pdf-viewer-styles.js';
|