Re-factor PDFPrintServiceFactory to use import maps

This is very old code, which can (ever so slightly) be simplified now that import maps are available.
This commit is contained in:
Jonas Jenwald 2024-02-07 13:53:29 +01:00
parent 60fd9d583d
commit 898172e9d2
6 changed files with 48 additions and 35 deletions

View File

@ -70,6 +70,7 @@ import { PDFHistory } from "./pdf_history.js";
import { PDFLayerViewer } from "web-pdf_layer_viewer"; import { PDFLayerViewer } from "web-pdf_layer_viewer";
import { PDFOutlineViewer } from "web-pdf_outline_viewer"; import { PDFOutlineViewer } from "web-pdf_outline_viewer";
import { PDFPresentationMode } from "web-pdf_presentation_mode"; import { PDFPresentationMode } from "web-pdf_presentation_mode";
import { PDFPrintServiceFactory } from "web-print_service";
import { PDFRenderingQueue } from "./pdf_rendering_queue.js"; import { PDFRenderingQueue } from "./pdf_rendering_queue.js";
import { PDFScriptingManager } from "./pdf_scripting_manager.js"; import { PDFScriptingManager } from "./pdf_scripting_manager.js";
import { PDFSidebar } from "web-pdf_sidebar"; import { PDFSidebar } from "web-pdf_sidebar";
@ -731,7 +732,7 @@ const PDFViewerApplication = {
}, },
get supportsPrinting() { get supportsPrinting() {
return PDFPrintServiceFactory.instance.supportsPrinting; return PDFPrintServiceFactory.supportsPrinting;
}, },
get supportsFullscreen() { get supportsFullscreen() {
@ -1786,7 +1787,7 @@ const PDFViewerApplication = {
const optionalContentConfigPromise = const optionalContentConfigPromise =
this.pdfViewer.optionalContentConfigPromise; this.pdfViewer.optionalContentConfigPromise;
const printService = PDFPrintServiceFactory.instance.createPrintService( const printService = PDFPrintServiceFactory.createPrintService(
this.pdfDocument, this.pdfDocument,
pagesOverview, pagesOverview,
printContainer, printContainer,
@ -3234,14 +3235,4 @@ function webViewerReportTelemetry({ details }) {
PDFViewerApplication.externalServices.reportTelemetry(details); PDFViewerApplication.externalServices.reportTelemetry(details);
} }
/* Abstract factory for the print service. */ export { PDFViewerApplication };
const PDFPrintServiceFactory = {
instance: {
supportsPrinting: false,
createPrintService() {
throw new Error("Not implemented: createPrintService");
},
},
};
export { PDFPrintServiceFactory, PDFViewerApplication };

View File

@ -20,7 +20,6 @@ import {
shadow, shadow,
} from "pdfjs-lib"; } from "pdfjs-lib";
import { getXfaHtmlForPrinting } from "./print_utils.js"; import { getXfaHtmlForPrinting } from "./print_utils.js";
import { PDFPrintServiceFactory } from "./app.js";
// Creates a placeholder with div and canvas with right size for the page. // Creates a placeholder with div and canvas with right size for the page.
function composePage( function composePage(
@ -194,15 +193,16 @@ class FirefoxPrintService {
} }
} }
PDFPrintServiceFactory.instance = { /**
get supportsPrinting() { * @implements {IPDFPrintServiceFactory}
*/
class PDFPrintServiceFactory {
static get supportsPrinting() {
const canvas = document.createElement("canvas"); const canvas = document.createElement("canvas");
const value = "mozPrintCallback" in canvas; return shadow(this, "supportsPrinting", "mozPrintCallback" in canvas);
}
return shadow(this, "supportsPrinting", value); static createPrintService(
},
createPrintService(
pdfDocument, pdfDocument,
pagesOverview, pagesOverview,
printContainer, printContainer,
@ -218,7 +218,7 @@ PDFPrintServiceFactory.instance = {
optionalContentConfigPromise, optionalContentConfigPromise,
printAnnotationStoragePromise printAnnotationStoragePromise
); );
}, }
}; }
export { FirefoxPrintService }; export { PDFPrintServiceFactory };

View File

@ -217,4 +217,23 @@ class IL10n {
resume() {} resume() {}
} }
export { IDownloadManager, IL10n, IPDFLinkService, IRenderableView }; /**
* @interface
*/
class IPDFPrintServiceFactory {
static get supportsPrinting() {
return false;
}
static createPrintService() {
throw new Error("Not implemented: createPrintService");
}
}
export {
IDownloadManager,
IL10n,
IPDFLinkService,
IPDFPrintServiceFactory,
IRenderableView,
};

View File

@ -13,9 +13,9 @@
* limitations under the License. * limitations under the License.
*/ */
import { AnnotationMode, PixelsPerInch } from "pdfjs-lib"; import { AnnotationMode, PixelsPerInch, shadow } from "pdfjs-lib";
import { PDFPrintServiceFactory, PDFViewerApplication } from "./app.js";
import { getXfaHtmlForPrinting } from "./print_utils.js"; import { getXfaHtmlForPrinting } from "./print_utils.js";
import { PDFViewerApplication } from "./app.js";
let activeService = null; let activeService = null;
let dialog = null; let dialog = null;
@ -355,10 +355,15 @@ function ensureOverlay() {
return overlayPromise; return overlayPromise;
} }
PDFPrintServiceFactory.instance = { /**
supportsPrinting: true, * @implements {IPDFPrintServiceFactory}
*/
class PDFPrintServiceFactory {
static get supportsPrinting() {
return shadow(this, "supportsPrinting", true);
}
createPrintService( static createPrintService(
pdfDocument, pdfDocument,
pagesOverview, pagesOverview,
printContainer, printContainer,
@ -378,7 +383,7 @@ PDFPrintServiceFactory.instance = {
printAnnotationStoragePromise printAnnotationStoragePromise
); );
return activeService; return activeService;
}, }
}; }
export { PDFPrintService }; export { PDFPrintServiceFactory };

View File

@ -14,7 +14,6 @@
*/ */
import "web-com"; import "web-com";
import "web-print_service";
import { RenderingStates, ScrollMode, SpreadMode } from "./ui_utils.js"; import { RenderingStates, ScrollMode, SpreadMode } from "./ui_utils.js";
import { AppOptions } from "./app_options.js"; import { AppOptions } from "./app_options.js";
import { LinkTarget } from "./pdf_link_service.js"; import { LinkTarget } from "./pdf_link_service.js";

View File

@ -14,7 +14,6 @@
*/ */
import "web-com"; import "web-com";
import "web-print_service";
import { RenderingStates, ScrollMode, SpreadMode } from "./ui_utils.js"; import { RenderingStates, ScrollMode, SpreadMode } from "./ui_utils.js";
import { AppOptions } from "./app_options.js"; import { AppOptions } from "./app_options.js";
import { LinkTarget } from "./pdf_link_service.js"; import { LinkTarget } from "./pdf_link_service.js";