@@ -8,7 +8,7 @@ const DEFAULTS = {
8
8
page : '' ,
9
9
search : '' ,
10
10
phrase : '' ,
11
- zoom : 'auto ' ,
11
+ zoom : '' ,
12
12
pagemode : 'none' ,
13
13
locale : '' ,
14
14
textLayer : '' ,
@@ -22,6 +22,8 @@ export const ViewerCssTheme = {
22
22
DARK : 2 ,
23
23
} as const
24
24
25
+ export const hardRefreshAttributes = [ 'src' , 'viewer-path' , 'locale' , 'viewer-css-theme' , 'viewer-extra-styles' ]
26
+
25
27
export class PdfjsViewerElement extends HTMLElement {
26
28
constructor ( ) {
27
29
super ( )
@@ -42,8 +44,8 @@ export class PdfjsViewerElement extends HTMLElement {
42
44
43
45
connectedCallback ( ) {
44
46
this . iframe = this . shadowRoot ! . querySelector ( 'iframe' ) as PdfjsViewerElementIframe
45
- document . addEventListener ( 'webviewerloaded' , ( ) => {
46
- this . setCssTheme ( )
47
+ document . addEventListener ( 'webviewerloaded' , async ( ) => {
48
+ this . setCssTheme ( this . getCssThemeOption ( ) )
47
49
this . setViewerExtraStyles ( this . getAttribute ( 'viewer-extra-styles' ) )
48
50
if ( this . getAttribute ( 'src' ) !== DEFAULTS . src ) this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'defaultUrl' , '' )
49
51
this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'disablePreferences' , true )
@@ -52,7 +54,13 @@ export class PdfjsViewerElement extends HTMLElement {
52
54
} ) ;
53
55
}
54
56
55
- attributeChangedCallback ( ) {
57
+ attributeChangedCallback ( name : string ) {
58
+ if ( ! hardRefreshAttributes . includes ( name ) ) {
59
+ this . onIframeReady ( ( ) => {
60
+ this . iframe . src = this . getIframeSrc ( )
61
+ } )
62
+ return
63
+ }
56
64
this . onIframeReady ( ( ) => this . mountViewer ( this . getIframeSrc ( ) ) )
57
65
}
58
66
@@ -74,9 +82,7 @@ export class PdfjsViewerElement extends HTMLElement {
74
82
const viewerCssTheme = this . getAttribute ( 'viewer-css-theme' ) || DEFAULTS . viewerCssTheme
75
83
const viewerExtraStyles = Boolean ( this . getAttribute ( 'viewer-extra-styles' ) || DEFAULTS . viewerExtraStyles )
76
84
77
- const updatedSrc = `${ viewerPath } ${ DEFAULTS . viewerEntry } ?file=${ encodeURIComponent ( src ) } #page=${ page } &zoom=${ zoom } &pagemode=${ pagemode } &search=${ search } &phrase=${ phrase } &textLayer=${ textLayer } ${ locale ? '&locale=' + locale : '' } &viewerCssTheme=${ viewerCssTheme } &viewerExtraStyles=${ viewerExtraStyles } `
78
- if ( updatedSrc !== this . iframe . getAttribute ( 'src' ) ) return updatedSrc
79
- return ''
85
+ return `${ viewerPath } ${ DEFAULTS . viewerEntry } ?file=${ encodeURIComponent ( src ) } #page=${ page } &zoom=${ zoom } &pagemode=${ pagemode } &search=${ search } &phrase=${ phrase } &textLayer=${ textLayer } ${ locale ? '&locale=' + locale : '' } &viewerCssTheme=${ viewerCssTheme } &viewerExtraStyles=${ viewerExtraStyles } `
80
86
}
81
87
82
88
private mountViewer ( src : string ) {
@@ -97,9 +103,8 @@ export class PdfjsViewerElement extends HTMLElement {
97
103
: ViewerCssTheme [ DEFAULTS . viewerCssTheme ]
98
104
}
99
105
100
- setCssTheme ( ) {
101
- const cssTheme = this . getCssThemeOption ( )
102
- if ( cssTheme === ViewerCssTheme . DARK ) {
106
+ private setCssTheme ( theme : 0 | 1 | 2 ) {
107
+ if ( theme === ViewerCssTheme . DARK ) {
103
108
const styleSheet = this . iframe . contentDocument ?. styleSheets [ 0 ] ;
104
109
const cssRules = styleSheet ?. cssRules || [ ] ;
105
110
const rules = Object . keys ( cssRules )
0 commit comments