@@ -8,7 +8,7 @@ const DEFAULTS = {
88 page : '' ,
99 search : '' ,
1010 phrase : '' ,
11- zoom : 'auto ' ,
11+ zoom : '' ,
1212 pagemode : 'none' ,
1313 locale : '' ,
1414 textLayer : '' ,
@@ -22,6 +22,8 @@ export const ViewerCssTheme = {
2222 DARK : 2 ,
2323} as const
2424
25+ export const hardRefreshAttributes = [ 'src' , 'viewer-path' , 'locale' , 'viewer-css-theme' , 'viewer-extra-styles' ]
26+
2527export class PdfjsViewerElement extends HTMLElement {
2628 constructor ( ) {
2729 super ( )
@@ -42,8 +44,8 @@ export class PdfjsViewerElement extends HTMLElement {
4244
4345 connectedCallback ( ) {
4446 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 ( ) )
4749 this . setViewerExtraStyles ( this . getAttribute ( 'viewer-extra-styles' ) )
4850 if ( this . getAttribute ( 'src' ) !== DEFAULTS . src ) this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'defaultUrl' , '' )
4951 this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'disablePreferences' , true )
@@ -52,7 +54,13 @@ export class PdfjsViewerElement extends HTMLElement {
5254 } ) ;
5355 }
5456
55- attributeChangedCallback ( ) {
57+ attributeChangedCallback ( name : string ) {
58+ if ( ! hardRefreshAttributes . includes ( name ) ) {
59+ this . onIframeReady ( ( ) => {
60+ this . iframe . src = this . getIframeSrc ( )
61+ } )
62+ return
63+ }
5664 this . onIframeReady ( ( ) => this . mountViewer ( this . getIframeSrc ( ) ) )
5765 }
5866
@@ -74,9 +82,7 @@ export class PdfjsViewerElement extends HTMLElement {
7482 const viewerCssTheme = this . getAttribute ( 'viewer-css-theme' ) || DEFAULTS . viewerCssTheme
7583 const viewerExtraStyles = Boolean ( this . getAttribute ( 'viewer-extra-styles' ) || DEFAULTS . viewerExtraStyles )
7684
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 } `
8086 }
8187
8288 private mountViewer ( src : string ) {
@@ -97,9 +103,8 @@ export class PdfjsViewerElement extends HTMLElement {
97103 : ViewerCssTheme [ DEFAULTS . viewerCssTheme ]
98104 }
99105
100- setCssTheme ( ) {
101- const cssTheme = this . getCssThemeOption ( )
102- if ( cssTheme === ViewerCssTheme . DARK ) {
106+ private setCssTheme ( theme : 0 | 1 | 2 ) {
107+ if ( theme === ViewerCssTheme . DARK ) {
103108 const styleSheet = this . iframe . contentDocument ?. styleSheets [ 0 ] ;
104109 const cssRules = styleSheet ?. cssRules || [ ] ;
105110 const rules = Object . keys ( cssRules )
0 commit comments