1
- import { elementReady } from " ./elementReady" ;
1
+ import { elementReady } from ' ./elementReady'
2
2
import { debounce } from 'perfect-debounce'
3
3
4
4
const DEFAULTS = {
5
5
viewerPath : '/pdfjs' ,
6
6
viewerEntry : '/web/viewer.html' ,
7
7
src : '' ,
8
+ iframeTitle : 'PDF viewer window' ,
8
9
page : '' ,
9
10
search : '' ,
10
11
phrase : '' ,
@@ -43,7 +44,7 @@ export class PdfjsViewerElement extends HTMLElement {
43
44
const template = document . createElement ( 'template' )
44
45
template . innerHTML = `
45
46
<style>:host{width:100%;display:block;overflow:hidden}:host iframe{height:100%}</style>
46
- <iframe frameborder="0" width="100%" loading="lazy"></iframe>
47
+ <iframe frameborder="0" width="100%" loading="lazy" title=" ${ this . getAttribute ( 'iframe-title' ) || DEFAULTS . iframeTitle } " ></iframe>
47
48
`
48
49
shadowRoot . appendChild ( template . content . cloneNode ( true ) )
49
50
}
@@ -54,12 +55,12 @@ export class PdfjsViewerElement extends HTMLElement {
54
55
return [
55
56
'src' , 'viewer-path' , 'page' , 'search' , 'phrase' , 'zoom' , 'pagemode' ,
56
57
'disable-worker' , 'text-layer' , 'disable-font-face' , 'disable-range' , 'disable-stream' , 'disable-auto-fetch' , 'verbosity' , 'locale' ,
57
- 'viewer-css-theme' , 'viewer-extra-styles' , 'viewer-extra-styles-urls' , 'nameddest'
58
+ 'viewer-css-theme' , 'viewer-extra-styles' , 'viewer-extra-styles-urls' , 'nameddest' , 'iframe-title'
58
59
]
59
60
}
60
61
61
62
connectedCallback ( ) {
62
- this . iframe = this . shadowRoot ! . querySelector ( 'iframe' ) as PdfjsViewerElementIframe
63
+ this . iframe = this . shadowRoot ? .querySelector ( 'iframe' ) as PdfjsViewerElementIframe
63
64
document . addEventListener ( 'webviewerloaded' , async ( ) => {
64
65
this . setCssTheme ( this . getCssThemeOption ( ) )
65
66
this . injectExtraStylesLinks ( this . getAttribute ( 'viewer-extra-styles-urls' ) ?? DEFAULTS . viewerExtraStylesUrls )
@@ -68,7 +69,7 @@ export class PdfjsViewerElement extends HTMLElement {
68
69
this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'disablePreferences' , true )
69
70
this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'pdfBugEnabled' , true )
70
71
this . iframe . contentWindow ?. PDFViewerApplicationOptions ?. set ( 'eventBusDispatchToDOM' , true )
71
- } ) ;
72
+ } )
72
73
}
73
74
74
75
attributeChangedCallback ( name : string ) {
@@ -126,9 +127,10 @@ ${nameddest ? '&nameddest=' + nameddest : ''}`
126
127
127
128
private mountViewer ( src : string ) {
128
129
if ( ! src || ! this . iframe ) return
129
- this . shadowRoot ! . replaceChild ( this . iframe . cloneNode ( ) , this . iframe )
130
- this . iframe = this . shadowRoot ! . querySelector ( 'iframe' ) as PdfjsViewerElementIframe
130
+ this . shadowRoot ? .replaceChild ( this . iframe . cloneNode ( ) , this . iframe )
131
+ this . iframe = this . shadowRoot ? .querySelector ( 'iframe' ) as PdfjsViewerElementIframe
131
132
this . iframe . src = src
133
+ this . iframe . setAttribute ( 'title' , this . getAttribute ( 'iframe-title' ) || DEFAULTS . iframeTitle )
132
134
}
133
135
134
136
private getFullPath ( path : string ) {
@@ -161,7 +163,7 @@ ${nameddest ? '&nameddest=' + nameddest : ''}`
161
163
else {
162
164
this . iframe . contentDocument ?. head . querySelector ( 'style[theme]' ) ?. remove ( )
163
165
}
164
- this . iframe . contentWindow ?. PDFViewerApplicationOptions . set ( 'viewerCssTheme' , theme )
166
+ this . iframe . contentWindow ?. PDFViewerApplicationOptions ? .set ( 'viewerCssTheme' , theme )
165
167
}
166
168
167
169
private setViewerExtraStyles = ( styles ?: string | null , id = 'extra' ) => {
@@ -190,7 +192,7 @@ ${nameddest ? '&nameddest=' + nameddest : ''}`
190
192
}
191
193
192
194
public initialize = ( ) : Promise < PdfjsViewerElementIframeWindow [ 'PDFViewerApplication' ] > => new Promise ( async ( resolve ) => {
193
- await elementReady ( 'iframe' , this . shadowRoot ! )
195
+ await elementReady ( 'iframe' , this . shadowRoot as ShadowRoot )
194
196
this . iframe ?. addEventListener ( 'load' , async ( ) => {
195
197
await this . iframe . contentWindow ?. PDFViewerApplication ?. initializedPromise
196
198
resolve ( this . iframe . contentWindow ?. PDFViewerApplication )
0 commit comments