|
1 | 1 | /**
|
2 |
| - * PDFObject v2.2.8 |
| 2 | + * PDFObject v2.2.10 |
3 | 3 | * https://github.com/pipwerks/PDFObject
|
4 | 4 | * @license
|
5 |
| - * Copyright (c) 2008-2022 Philip Hutchison |
| 5 | + * Copyright (c) 2008-2023 Philip Hutchison |
6 | 6 | * MIT-style license: http://pipwerks.mit-license.org/
|
7 | 7 | * UMD module pattern from https://github.com/umdjs/umd/blob/master/templates/returnExports.js
|
8 | 8 | */
|
|
184 | 184 |
|
185 | 185 | };
|
186 | 186 |
|
187 |
| - let generatePDFObjectMarkup = function (embedType, targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, PDFJS_URL){ |
| 187 | + let generatePDFObjectMarkup = function (embedType, targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, customAttribute, PDFJS_URL){ |
188 | 188 |
|
189 | 189 | //Ensure target element is empty first
|
190 | 190 | emptyNodeContents(targetNode);
|
|
195 | 195 | //If PDFJS_URL already contains a ?, assume querystring is in place, and use an ampersand to append PDFJS's file parameter
|
196 | 196 | let connector = (PDFJS_URL.indexOf("?") !== -1) ? "&" : "?";
|
197 | 197 | source = PDFJS_URL + connector + "file=" + encodeURIComponent(url) + pdfOpenFragment;
|
| 198 | + } else { |
| 199 | + source += pdfOpenFragment; |
198 | 200 | }
|
199 | 201 |
|
200 | 202 | let el_type = (embedType === "pdfjs" || embedType === "iframe") ? "iframe" : "embed";
|
|
230 | 232 |
|
231 | 233 | }
|
232 | 234 |
|
| 235 | + //Allow developer to insert custom attribute on embed/iframe element, but ensure it does not conflict with attributes used by PDFObject |
| 236 | + let reservedTokens = ["className", "type", "title", "src", "style", "id", "allow", "frameborder"]; |
| 237 | + if(customAttribute && customAttribute.key && reservedTokens.every(token => !customAttribute.key.includes(token))){ |
| 238 | + el.setAttribute(customAttribute.key, (typeof customAttribute.value !== "undefined") ? customAttribute.value : ""); |
| 239 | + } |
| 240 | + |
233 | 241 | targetNode.classList.add("pdfobject-container");
|
234 | 242 | targetNode.appendChild(el);
|
235 | 243 |
|
|
263 | 271 | let targetNode = getTargetElement(selector);
|
264 | 272 | let fallbackHTML = "";
|
265 | 273 | let pdfOpenFragment = "";
|
| 274 | + let customAttribute = opt.customAttribute || {}; |
266 | 275 | let fallbackHTML_default = "<p>This browser does not support inline PDFs. Please download the PDF to view it: <a href='[url]'>Download PDF</a></p>";
|
267 | 276 |
|
268 | 277 | //Ensure URL is available. If not, exit now.
|
|
282 | 291 |
|
283 | 292 | //If the forcePDFJS option is invoked, skip everything else and embed as directed
|
284 | 293 | if(forcePDFJS && PDFJS_URL){
|
285 |
| - return generatePDFObjectMarkup("pdfjs", targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, PDFJS_URL); |
| 294 | + return generatePDFObjectMarkup("pdfjs", targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, customAttribute, PDFJS_URL); |
286 | 295 | }
|
287 | 296 |
|
288 | 297 | // --== Embed attempt #2 ==--
|
|
298 | 307 | //Forcing Safari desktop to use iframe due to freezing bug in macOS 11 (Big Sur)
|
299 | 308 | let embedtype = (forceIframe || supportRedirect || isSafariDesktop) ? "iframe" : "embed";
|
300 | 309 |
|
301 |
| - return generatePDFObjectMarkup(embedtype, targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles); |
| 310 | + return generatePDFObjectMarkup(embedtype, targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, customAttribute); |
302 | 311 |
|
303 | 312 | }
|
304 | 313 |
|
305 | 314 | // --== Embed attempt #3 ==--
|
306 | 315 |
|
307 | 316 | //If everything else has failed and a PDFJS fallback is provided, try to use it
|
308 | 317 | if(PDFJS_URL){
|
309 |
| - return generatePDFObjectMarkup("pdfjs", targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, PDFJS_URL); |
| 318 | + return generatePDFObjectMarkup("pdfjs", targetNode, url, pdfOpenFragment, width, height, id, title, omitInlineStyles, customAttribute, PDFJS_URL); |
310 | 319 | }
|
311 | 320 |
|
312 | 321 | // --== PDF embed not supported! Use fallback ==--
|
|
0 commit comments