Skip to content

Commit 023af46

Browse files
committed
Replace the IRenderableView interface with an abstract RenderableView class
This should help reduce the maintenance burden of the code, since you no longer need to remember to update separate code when touching the different page/thumbnail classes.
1 parent 839c257 commit 023af46

16 files changed

Lines changed: 106 additions & 96 deletions

test/unit/pdf_viewer.component_spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import {
2222
import {
2323
parseQueryString,
2424
ProgressBar,
25-
RenderingStates,
2625
ScrollMode,
2726
SpreadMode,
2827
} from "../../web/ui_utils.js";
@@ -35,6 +34,7 @@ import { PDFPageView } from "../../web/pdf_page_view.js";
3534
import { PDFScriptingManager } from "../../web/pdf_scripting_manager.component.js";
3635
import { PDFSinglePageViewer } from "../../web/pdf_single_page_viewer.js";
3736
import { PDFViewer } from "../../web/pdf_viewer.js";
37+
import { RenderingStates } from "../../web/renderable_view.js";
3838
import { StructTreeLayerBuilder } from "../../web/struct_tree_layer_builder.js";
3939
import { TextLayerBuilder } from "../../web/text_layer_builder.js";
4040
import { XfaLayerBuilder } from "../../web/xfa_layer_builder.js";

web/app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import {
3333
normalizeWheelEventDirection,
3434
parseQueryString,
3535
ProgressBar,
36-
RenderingStates,
3736
ScrollMode,
3837
SidebarView,
3938
SpreadMode,
@@ -91,6 +90,7 @@ import { PdfTextExtractor } from "./pdf_text_extractor.js";
9190
import { PDFThumbnailViewer } from "web-pdf_thumbnail_viewer";
9291
import { PDFViewer } from "./pdf_viewer.js";
9392
import { Preferences } from "web-preferences";
93+
import { RenderingStates } from "./renderable_view.js";
9494
import { SecondaryToolbar } from "web-secondary_toolbar";
9595
import { SignatureManager } from "web-signature_manager";
9696
import { Toolbar } from "web-toolbar";

web/base_pdf_page_view.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
* limitations under the License.
1414
*/
1515

16+
import { RenderableView, RenderingStates } from "./renderable_view.js";
1617
import { RenderingCancelledException } from "pdfjs-lib";
17-
import { RenderingStates } from "./ui_utils.js";
1818

19-
class BasePDFPageView {
19+
class BasePDFPageView extends RenderableView {
2020
#loadingId = null;
2121

2222
#minDurationToUpdateCanvas = 0;
@@ -48,11 +48,8 @@ class BasePDFPageView {
4848

4949
renderingQueue = null;
5050

51-
renderTask = null;
52-
53-
resume = null;
54-
5551
constructor(options) {
52+
super();
5653
this.eventBus = options.eventBus;
5754
this.id = options.id;
5855
this.pageColors = options.pageColors || null;

web/interfaces.js

Lines changed: 0 additions & 47 deletions
This file was deleted.

web/pdf_page_detail_view.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,8 @@
1515

1616
import { BasePDFPageView } from "./base_pdf_page_view.js";
1717
import { OutputScale } from "pdfjs-lib";
18-
import { RenderingStates } from "./ui_utils.js";
18+
import { RenderingStates } from "./renderable_view.js";
1919

20-
/** @typedef {import("./interfaces").IRenderableView} IRenderableView */
21-
22-
/**
23-
* @implements {IRenderableView}
24-
*/
2520
class PDFPageDetailView extends BasePDFPageView {
2621
#detailArea = null;
2722

@@ -54,9 +49,9 @@ class PDFPageDetailView extends BasePDFPageView {
5449
return super.renderingState;
5550
}
5651

57-
set renderingState(value) {
52+
set renderingState(state) {
5853
this.renderingCancelled = false;
59-
super.renderingState = value;
54+
super.renderingState = state;
6055
}
6156

6257
reset({ keepCanvas = false } = {}) {

web/pdf_page_view.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
// eslint-disable-next-line max-len
1919
/** @typedef {import("../src/display/optional_content_config").OptionalContentConfig} OptionalContentConfig */
2020
/** @typedef {import("./event_utils").EventBus} EventBus */
21-
/** @typedef {import("./interfaces").IRenderableView} IRenderableView */
2221
// eslint-disable-next-line max-len
2322
/** @typedef {import("./pdf_rendering_queue").PDFRenderingQueue} PDFRenderingQueue */
2423
/** @typedef {import("./comment_manager.js").CommentManager} CommentManager */
@@ -36,7 +35,6 @@ import {
3635
calcRound,
3736
DEFAULT_SCALE,
3837
floorToDivide,
39-
RenderingStates,
4038
TextLayerMode,
4139
} from "./ui_utils.js";
4240
import { AnnotationEditorLayerBuilder } from "./annotation_editor_layer_builder.js";
@@ -47,6 +45,7 @@ import { BasePDFPageView } from "./base_pdf_page_view.js";
4745
import { DrawLayerBuilder } from "./draw_layer_builder.js";
4846
import { GenericL10n } from "web-null_l10n";
4947
import { PDFPageDetailView } from "./pdf_page_detail_view.js";
48+
import { RenderingStates } from "./renderable_view.js";
5049
import { SimpleLinkService } from "./pdf_link_service.js";
5150
import { StructTreeLayerBuilder } from "./struct_tree_layer_builder.js";
5251
import { TextAccessibilityManager } from "./text_accessibility.js";
@@ -129,9 +128,6 @@ const LAYERS_ORDER = new Map([
129128
["xfaLayer", 3],
130129
]);
131130

132-
/**
133-
* @implements {IRenderableView}
134-
*/
135131
class PDFPageView extends BasePDFPageView {
136132
#annotationMode = AnnotationMode.ENABLE_FORMS;
137133

web/pdf_rendering_queue.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@
1313
* limitations under the License.
1414
*/
1515

16-
/** @typedef {import("./interfaces").IRenderableView} IRenderableView */
1716
/** @typedef {import("./pdf_viewer").PDFViewer} PDFViewer */
1817
// eslint-disable-next-line max-len
1918
/** @typedef {import("./pdf_thumbnail_viewer").PDFThumbnailViewer} PDFThumbnailViewer */
2019

2120
import { RenderingCancelledException } from "pdfjs-lib";
22-
import { RenderingStates } from "./ui_utils.js";
21+
import { RenderingStates } from "./renderable_view.js";
2322

2423
const CLEANUP_TIMEOUT = 30000;
2524

@@ -59,7 +58,7 @@ class PDFRenderingQueue {
5958
}
6059

6160
/**
62-
* @param {IRenderableView} view
61+
* @param {RenderableView} view
6362
* @returns {boolean}
6463
*/
6564
isHighestPriority(view) {
@@ -183,7 +182,7 @@ class PDFRenderingQueue {
183182
}
184183

185184
/**
186-
* @param {IRenderableView} view
185+
* @param {RenderableView} view
187186
* @returns {boolean}
188187
*/
189188
isViewFinished(view) {
@@ -195,7 +194,7 @@ class PDFRenderingQueue {
195194
* based on the views state. If the view is already rendered it will return
196195
* `false`.
197196
*
198-
* @param {IRenderableView} view
197+
* @param {RenderableView} view
199198
*/
200199
renderView(view) {
201200
switch (view.renderingState) {

web/pdf_scripting_manager.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515

1616
/** @typedef {import("./event_utils").EventBus} EventBus */
1717

18-
import { apiPageLayoutToViewerModes, RenderingStates } from "./ui_utils.js";
18+
import { apiPageLayoutToViewerModes } from "./ui_utils.js";
19+
import { RenderingStates } from "./renderable_view.js";
1920
import { shadow } from "pdfjs-lib";
2021

2122
/**

web/pdf_thumbnail_view.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
// eslint-disable-next-line max-len
1919
/** @typedef {import("../src/display/display_utils").PageViewport} PageViewport */
2020
/** @typedef {import("./event_utils").EventBus} EventBus */
21-
/** @typedef {import("./interfaces").IRenderableView} IRenderableView */
2221
// eslint-disable-next-line max-len
2322
/** @typedef {import("./pdf_rendering_queue").PDFRenderingQueue} PDFRenderingQueue */
2423

@@ -27,8 +26,8 @@ import {
2726
OutputScale,
2827
RenderingCancelledException,
2928
} from "pdfjs-lib";
29+
import { RenderableView, RenderingStates } from "./renderable_view.js";
3030
import { AppOptions } from "./app_options.js";
31-
import { RenderingStates } from "./ui_utils.js";
3231

3332
const DRAW_UPSCALE_FACTOR = 2; // See comment in `PDFThumbnailView.draw` below.
3433
const MAX_NUM_SCALING_STEPS = 3;
@@ -78,10 +77,9 @@ class TempImageFactory {
7877
}
7978
}
8079

81-
/**
82-
* @implements {IRenderableView}
83-
*/
84-
class PDFThumbnailView {
80+
class PDFThumbnailView extends RenderableView {
81+
#renderingState = RenderingStates.INITIAL;
82+
8583
/**
8684
* @param {PDFThumbnailViewOptions} options
8785
*/
@@ -98,6 +96,7 @@ class PDFThumbnailView {
9896
pageColors,
9997
enableSplitMerge = false,
10098
}) {
99+
super();
101100
this.id = id;
102101
this.renderingId = `thumbnail${id}`;
103102
this.pageLabel = null;
@@ -115,9 +114,6 @@ class PDFThumbnailView {
115114
this.linkService = linkService;
116115
this.renderingQueue = renderingQueue;
117116

118-
this.renderTask = null;
119-
this.renderingState = RenderingStates.INITIAL;
120-
this.resume = null;
121117
this.placeholder = null;
122118

123119
const imageContainer = (this.div = document.createElement("div"));
@@ -162,6 +158,14 @@ class PDFThumbnailView {
162158
this.image.style.height = `${canvasHeight}px`;
163159
}
164160

161+
get renderingState() {
162+
return this.#renderingState;
163+
}
164+
165+
set renderingState(state) {
166+
this.#renderingState = state;
167+
}
168+
165169
setPdfPage(pdfPage) {
166170
this.pdfPage = pdfPage;
167171
this.pdfPageRotate = pdfPage.rotate;

web/pdf_thumbnail_viewer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ import {
2323
binarySearchFirstItem,
2424
getVisibleElements,
2525
isValidRotation,
26-
RenderingStates,
2726
watchScroll,
2827
} from "./ui_utils.js";
2928
import { MathClamp, noContextMenu, PagesMapper, stopEvent } from "pdfjs-lib";
3029
import { Menu } from "./menu.js";
3130
import { PDFThumbnailView } from "./pdf_thumbnail_view.js";
31+
import { RenderingStates } from "./renderable_view.js";
3232

3333
const SCROLL_OPTIONS = {
3434
behavior: "instant",

0 commit comments

Comments
 (0)