123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- /**
- * @licstart The following is the entire license notice for the
- * Javascript code in this page
- *
- * Copyright 2020 Mozilla Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @licend The above is the entire license notice for the
- * Javascript code in this page
- */
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.PDFAttachmentViewer = void 0;
- var _pdf = require("../pdf");
- var _base_tree_viewer = require("./base_tree_viewer.js");
- var _viewer_compatibility = require("./viewer_compatibility.js");
- const PdfFileRegExp = /\.pdf$/i;
- class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer {
- constructor(options) {
- super(options);
- this.downloadManager = options.downloadManager;
- this.eventBus._on("fileattachmentannotation", this._appendAttachment.bind(this));
- }
- reset(keepRenderedCapability = false) {
- super.reset();
- this._attachments = null;
- if (!keepRenderedCapability) {
- this._renderedCapability = (0, _pdf.createPromiseCapability)();
- }
- if (this._pendingDispatchEvent) {
- clearTimeout(this._pendingDispatchEvent);
- }
- this._pendingDispatchEvent = null;
- }
- _dispatchEvent(attachmentsCount) {
- this._renderedCapability.resolve();
- if (this._pendingDispatchEvent) {
- clearTimeout(this._pendingDispatchEvent);
- this._pendingDispatchEvent = null;
- }
- if (attachmentsCount === 0) {
- this._pendingDispatchEvent = setTimeout(() => {
- this.eventBus.dispatch("attachmentsloaded", {
- source: this,
- attachmentsCount: 0
- });
- this._pendingDispatchEvent = null;
- });
- return;
- }
- this.eventBus.dispatch("attachmentsloaded", {
- source: this,
- attachmentsCount
- });
- }
- _bindPdfLink(element, {
- content,
- filename
- }) {
- let blobUrl;
- element.onclick = () => {
- if (!blobUrl) {
- blobUrl = URL.createObjectURL(new Blob([content], {
- type: "application/pdf"
- }));
- }
- let viewerUrl;
- viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename);
- try {
- window.open(viewerUrl);
- } catch (ex) {
- console.error(`_bindPdfLink: ${ex}`);
- URL.revokeObjectURL(blobUrl);
- blobUrl = null;
- this.downloadManager.downloadData(content, filename, "application/pdf");
- }
- return false;
- };
- }
- _bindLink(element, {
- content,
- filename
- }) {
- element.onclick = () => {
- const contentType = PdfFileRegExp.test(filename) ? "application/pdf" : "";
- this.downloadManager.downloadData(content, filename, contentType);
- return false;
- };
- }
- render({
- attachments,
- keepRenderedCapability = false
- }) {
- if (this._attachments) {
- this.reset(keepRenderedCapability);
- }
- this._attachments = attachments || null;
- if (!attachments) {
- this._dispatchEvent(0);
- return;
- }
- const names = Object.keys(attachments).sort(function (a, b) {
- return a.toLowerCase().localeCompare(b.toLowerCase());
- });
- const fragment = document.createDocumentFragment();
- let attachmentsCount = 0;
- for (const name of names) {
- const item = attachments[name];
- const filename = (0, _pdf.getFilenameFromUrl)(item.filename);
- const div = document.createElement("div");
- div.className = "treeItem";
- const element = document.createElement("a");
- if (PdfFileRegExp.test(filename) && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
- this._bindPdfLink(element, {
- content: item.content,
- filename
- });
- } else {
- this._bindLink(element, {
- content: item.content,
- filename
- });
- }
- element.textContent = this._normalizeTextContent(filename);
- div.appendChild(element);
- fragment.appendChild(div);
- attachmentsCount++;
- }
- this.container.appendChild(fragment);
- this._dispatchEvent(attachmentsCount);
- }
- _appendAttachment({
- id,
- filename,
- content
- }) {
- const renderedPromise = this._renderedCapability.promise;
- renderedPromise.then(() => {
- if (renderedPromise !== this._renderedCapability.promise) {
- return;
- }
- let attachments = this._attachments;
- if (!attachments) {
- attachments = Object.create(null);
- } else {
- for (const name in attachments) {
- if (id === name) {
- return;
- }
- }
- }
- attachments[id] = {
- filename,
- content
- };
- this.render({
- attachments,
- keepRenderedCapability: true
- });
- });
- }
- }
- exports.PDFAttachmentViewer = PDFAttachmentViewer;
|