@@ -13,7 +13,8 @@ const DEFAULTS = {
13
13
locale : '' ,
14
14
textLayer : '' ,
15
15
viewerCssTheme : 'AUTOMATIC' ,
16
- viewerExtraStyles : ''
16
+ viewerExtraStyles : '' ,
17
+ viewerExtraStylesUrls : ''
17
18
} as const
18
19
19
20
export const ViewerCssTheme = {
@@ -22,7 +23,7 @@ export const ViewerCssTheme = {
22
23
DARK : 2 ,
23
24
} as const
24
25
25
- export const hardRefreshAttributes = [ 'src' , 'viewer-path' , 'locale' , 'text-layer' , 'viewer-css-theme' , 'viewer-extra-styles' ]
26
+ export const hardRefreshAttributes = [ 'src' , 'viewer-path' , 'locale' , 'text-layer' , 'viewer-css-theme' , 'viewer-extra-styles' , 'viewer-extra-styles-urls' ]
26
27
27
28
export class PdfjsViewerElement extends HTMLElement {
28
29
constructor ( ) {
@@ -39,14 +40,15 @@ export class PdfjsViewerElement extends HTMLElement {
39
40
public iframe ! : PdfjsViewerElementIframe
40
41
41
42
static get observedAttributes ( ) {
42
- return [ 'src' , 'viewer-path' , 'locale' , 'page' , 'search' , 'phrase' , 'zoom' , 'pagemode' , 'text-layer' , 'viewer-css-theme' , 'viewer-extra-styles' ]
43
+ return [ 'src' , 'viewer-path' , 'locale' , 'page' , 'search' , 'phrase' , 'zoom' , 'pagemode' , 'text-layer' , 'viewer-css-theme' , 'viewer-extra-styles' , 'viewer-extra-styles-urls' ]
43
44
}
44
45
45
46
connectedCallback ( ) {
46
47
this . iframe = this . shadowRoot ! . querySelector ( 'iframe' ) as PdfjsViewerElementIframe
47
48
document . addEventListener ( 'webviewerloaded' , async ( ) => {
48
49
this . setCssTheme ( this . getCssThemeOption ( ) )
49
- this . setViewerExtraStyles ( this . getAttribute ( 'viewer-extra-styles' ) )
50
+ this . injectExtraStylesLinks ( this . getAttribute ( 'viewer-extra-styles-urls' ) ?? DEFAULTS . viewerExtraStylesUrls )
51
+ this . setViewerExtraStyles ( this . getAttribute ( 'viewer-extra-styles' ) ?? DEFAULTS . viewerExtraStyles )
50
52
if ( this . getAttribute ( 'src' ) !== DEFAULTS . src ) this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'defaultUrl' , '' )
51
53
this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'disablePreferences' , true )
52
54
this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'pdfBugEnabled' , true )
@@ -132,6 +134,19 @@ export class PdfjsViewerElement extends HTMLElement {
132
134
this . iframe . contentDocument ?. head . appendChild ( style )
133
135
}
134
136
137
+ private injectExtraStylesLinks = ( rawLinks ?: string ) => {
138
+ if ( ! rawLinks ) return
139
+ const linksArray = rawLinks . replace ( / ' | ] | \[ / g, '' ) . split ( ',' ) . map ( ( link ) => link . trim ( ) )
140
+ linksArray . forEach ( ( url ) => {
141
+ const linkExists = this . iframe . contentDocument ?. head . querySelector ( `link[href="${ url } "]` ) ;
142
+ if ( linkExists ) return
143
+ const linkEl = document . createElement ( 'link' )
144
+ linkEl . rel = 'stylesheet'
145
+ linkEl . href = url
146
+ this . iframe . contentDocument ?. head . appendChild ( linkEl )
147
+ } )
148
+ }
149
+
135
150
public initialize = ( ) : Promise < PdfjsViewerElementIframeWindow [ 'PDFViewerApplication' ] > => new Promise ( async ( resolve ) => {
136
151
await elementReady ( 'iframe' , this . shadowRoot ! )
137
152
this . iframe ?. addEventListener ( 'load' , async ( ) => {
0 commit comments