@docmentis/udoc-viewer 0.5.17 → 0.5.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +247 -128
- package/dist/package.json +5 -2
- package/dist/src/UDocClient.d.ts +69 -0
- package/dist/src/UDocClient.d.ts.map +1 -1
- package/dist/src/UDocClient.js +6 -7
- package/dist/src/UDocClient.js.map +1 -1
- package/dist/src/UDocViewer.d.ts +119 -1
- package/dist/src/UDocViewer.d.ts.map +1 -1
- package/dist/src/UDocViewer.js +328 -9
- package/dist/src/UDocViewer.js.map +1 -1
- package/dist/src/fonts.d.ts.map +1 -1
- package/dist/src/fonts.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/meta-url.js.map +1 -1
- package/dist/src/performance/PerformanceCounter.d.ts.map +1 -1
- package/dist/src/performance/PerformanceCounter.js.map +1 -1
- package/dist/src/performance/index.d.ts.map +1 -1
- package/dist/src/performance/index.js.map +1 -1
- package/dist/src/ui/framework/component.d.ts.map +1 -1
- package/dist/src/ui/framework/component.js.map +1 -1
- package/dist/src/ui/framework/selectors.d.ts.map +1 -1
- package/dist/src/ui/framework/selectors.js +1 -3
- package/dist/src/ui/framework/selectors.js.map +1 -1
- package/dist/src/ui/framework/store.d.ts.map +1 -1
- package/dist/src/ui/framework/store.js.map +1 -1
- package/dist/src/ui/viewer/actions.d.ts +19 -0
- package/dist/src/ui/viewer/actions.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/LinkRenderer.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/LinkRenderer.js.map +1 -1
- package/dist/src/ui/viewer/annotation/MarkupRenderer.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/MarkupRenderer.js +1 -3
- package/dist/src/ui/viewer/annotation/MarkupRenderer.js.map +1 -1
- package/dist/src/ui/viewer/annotation/ShapeRenderer.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/ShapeRenderer.js +12 -18
- package/dist/src/ui/viewer/annotation/ShapeRenderer.js.map +1 -1
- package/dist/src/ui/viewer/annotation/TextRenderer.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/TextRenderer.js +2 -2
- package/dist/src/ui/viewer/annotation/TextRenderer.js.map +1 -1
- package/dist/src/ui/viewer/annotation/index.d.ts +2 -2
- package/dist/src/ui/viewer/annotation/index.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/index.js +1 -1
- package/dist/src/ui/viewer/annotation/index.js.map +1 -1
- package/dist/src/ui/viewer/annotation/render.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/render.js.map +1 -1
- package/dist/src/ui/viewer/annotation/types.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/utils.d.ts.map +1 -1
- package/dist/src/ui/viewer/annotation/utils.js +2 -2
- package/dist/src/ui/viewer/annotation/utils.js.map +1 -1
- package/dist/src/ui/viewer/components/AnnotationPanel.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/AnnotationPanel.js +9 -13
- package/dist/src/ui/viewer/components/AnnotationPanel.js.map +1 -1
- package/dist/src/ui/viewer/components/FloatingToolbar.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/FloatingToolbar.js +12 -10
- package/dist/src/ui/viewer/components/FloatingToolbar.js.map +1 -1
- package/dist/src/ui/viewer/components/LeftPanel.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/LeftPanel.js +16 -3
- package/dist/src/ui/viewer/components/LeftPanel.js.map +1 -1
- package/dist/src/ui/viewer/components/OutlinePanel.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/OutlinePanel.js +3 -3
- package/dist/src/ui/viewer/components/OutlinePanel.js.map +1 -1
- package/dist/src/ui/viewer/components/PasswordDialog.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/PasswordDialog.js.map +1 -1
- package/dist/src/ui/viewer/components/RightPanel.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/RightPanel.js +13 -3
- package/dist/src/ui/viewer/components/RightPanel.js.map +1 -1
- package/dist/src/ui/viewer/components/Spread.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/Spread.js +10 -13
- package/dist/src/ui/viewer/components/Spread.js.map +1 -1
- package/dist/src/ui/viewer/components/ThumbnailPanel.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/ThumbnailPanel.js +5 -5
- package/dist/src/ui/viewer/components/ThumbnailPanel.js.map +1 -1
- package/dist/src/ui/viewer/components/Toolbar.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/Toolbar.js +320 -18
- package/dist/src/ui/viewer/components/Toolbar.js.map +1 -1
- package/dist/src/ui/viewer/components/ViewModeMenu.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/ViewModeMenu.js +7 -7
- package/dist/src/ui/viewer/components/ViewModeMenu.js.map +1 -1
- package/dist/src/ui/viewer/components/Viewport.d.ts +1 -1
- package/dist/src/ui/viewer/components/Viewport.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/Viewport.js +140 -130
- package/dist/src/ui/viewer/components/Viewport.js.map +1 -1
- package/dist/src/ui/viewer/effects.d.ts.map +1 -1
- package/dist/src/ui/viewer/effects.js +5 -8
- package/dist/src/ui/viewer/effects.js.map +1 -1
- package/dist/src/ui/viewer/layout/spreadLayout.d.ts.map +1 -1
- package/dist/src/ui/viewer/layout/spreadLayout.js +11 -13
- package/dist/src/ui/viewer/layout/spreadLayout.js.map +1 -1
- package/dist/src/ui/viewer/navigation.d.ts.map +1 -1
- package/dist/src/ui/viewer/navigation.js +1 -1
- package/dist/src/ui/viewer/navigation.js.map +1 -1
- package/dist/src/ui/viewer/reducer.d.ts.map +1 -1
- package/dist/src/ui/viewer/reducer.js +73 -13
- package/dist/src/ui/viewer/reducer.js.map +1 -1
- package/dist/src/ui/viewer/shell.d.ts +1 -1
- package/dist/src/ui/viewer/shell.d.ts.map +1 -1
- package/dist/src/ui/viewer/shell.js +13 -4
- package/dist/src/ui/viewer/shell.js.map +1 -1
- package/dist/src/ui/viewer/state.d.ts +12 -0
- package/dist/src/ui/viewer/state.d.ts.map +1 -1
- package/dist/src/ui/viewer/state.js +6 -0
- package/dist/src/ui/viewer/state.js.map +1 -1
- package/dist/src/ui/viewer/styles-inline.d.ts +1 -1
- package/dist/src/ui/viewer/styles-inline.d.ts.map +1 -1
- package/dist/src/ui/viewer/styles-inline.js +81 -1
- package/dist/src/ui/viewer/styles-inline.js.map +1 -1
- package/dist/src/ui/viewer/text/render.d.ts.map +1 -1
- package/dist/src/ui/viewer/text/render.js +1 -2
- package/dist/src/ui/viewer/text/render.js.map +1 -1
- package/dist/src/ui/viewer/text/selection.d.ts.map +1 -1
- package/dist/src/ui/viewer/text/selection.js +1 -2
- package/dist/src/ui/viewer/text/selection.js.map +1 -1
- package/dist/src/ui/viewer/text/types.d.ts.map +1 -1
- package/dist/src/wasm/udoc_bg.wasm +0 -0
- package/dist/src/worker/WorkerClient.d.ts +1 -1
- package/dist/src/worker/WorkerClient.d.ts.map +1 -1
- package/dist/src/worker/WorkerClient.js +19 -20
- package/dist/src/worker/WorkerClient.js.map +1 -1
- package/dist/src/worker/index.d.ts.map +1 -1
- package/dist/src/worker/worker-inline.js +1 -1
- package/dist/src/worker/worker.d.ts.map +1 -1
- package/dist/src/worker/worker.js +10 -2
- package/dist/src/worker/worker.js.map +1 -1
- package/package.json +57 -54
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { subscribeSelector } from "../../framework/selectors";
|
|
2
2
|
import { on } from "../../framework/events";
|
|
3
|
-
import { ICON_VIEW_MODE, ICON_SCROLL_SPREAD, ICON_SCROLL_CONTINUOUS, ICON_LAYOUT_SINGLE, ICON_LAYOUT_DOUBLE, ICON_LAYOUT_DOUBLE_ODD_RIGHT, ICON_LAYOUT_DOUBLE_ODD_LEFT, ICON_ROTATE_0, ICON_ROTATE_90, ICON_ROTATE_180, ICON_ROTATE_270, ICON_SPACING_ALL, ICON_SPACING_NONE, ICON_SPACING_SPREAD, ICON_SPACING_PAGE } from "../icons";
|
|
3
|
+
import { ICON_VIEW_MODE, ICON_SCROLL_SPREAD, ICON_SCROLL_CONTINUOUS, ICON_LAYOUT_SINGLE, ICON_LAYOUT_DOUBLE, ICON_LAYOUT_DOUBLE_ODD_RIGHT, ICON_LAYOUT_DOUBLE_ODD_LEFT, ICON_ROTATE_0, ICON_ROTATE_90, ICON_ROTATE_180, ICON_ROTATE_270, ICON_SPACING_ALL, ICON_SPACING_NONE, ICON_SPACING_SPREAD, ICON_SPACING_PAGE, } from "../icons";
|
|
4
4
|
function sliceEqual(a, b) {
|
|
5
5
|
return (a.scrollMode === b.scrollMode &&
|
|
6
6
|
a.layoutMode === b.layoutMode &&
|
|
@@ -9,25 +9,25 @@ function sliceEqual(a, b) {
|
|
|
9
9
|
}
|
|
10
10
|
const SCROLL_OPTIONS = [
|
|
11
11
|
{ value: "spread", icon: ICON_SCROLL_SPREAD, label: "Spread" },
|
|
12
|
-
{ value: "continuous", icon: ICON_SCROLL_CONTINUOUS, label: "Continuous" }
|
|
12
|
+
{ value: "continuous", icon: ICON_SCROLL_CONTINUOUS, label: "Continuous" },
|
|
13
13
|
];
|
|
14
14
|
const LAYOUT_OPTIONS = [
|
|
15
15
|
{ value: "single-page", icon: ICON_LAYOUT_SINGLE, label: "Single" },
|
|
16
16
|
{ value: "double-page", icon: ICON_LAYOUT_DOUBLE, label: "Double" },
|
|
17
17
|
{ value: "double-page-odd-right", icon: ICON_LAYOUT_DOUBLE_ODD_RIGHT, label: "Cover Right" },
|
|
18
|
-
{ value: "double-page-odd-left", icon: ICON_LAYOUT_DOUBLE_ODD_LEFT, label: "Cover Left" }
|
|
18
|
+
{ value: "double-page-odd-left", icon: ICON_LAYOUT_DOUBLE_ODD_LEFT, label: "Cover Left" },
|
|
19
19
|
];
|
|
20
20
|
const ROTATION_OPTIONS = [
|
|
21
21
|
{ value: 0, icon: ICON_ROTATE_0, label: "0°" },
|
|
22
22
|
{ value: 90, icon: ICON_ROTATE_90, label: "90°" },
|
|
23
23
|
{ value: 180, icon: ICON_ROTATE_180, label: "180°" },
|
|
24
|
-
{ value: 270, icon: ICON_ROTATE_270, label: "270°" }
|
|
24
|
+
{ value: 270, icon: ICON_ROTATE_270, label: "270°" },
|
|
25
25
|
];
|
|
26
26
|
const SPACING_OPTIONS = [
|
|
27
27
|
{ value: "all", icon: ICON_SPACING_ALL, label: "All" },
|
|
28
28
|
{ value: "none", icon: ICON_SPACING_NONE, label: "None" },
|
|
29
29
|
{ value: "spread-only", icon: ICON_SPACING_SPREAD, label: "Spread" },
|
|
30
|
-
{ value: "page-only", icon: ICON_SPACING_PAGE, label: "Page" }
|
|
30
|
+
{ value: "page-only", icon: ICON_SPACING_PAGE, label: "Page" },
|
|
31
31
|
];
|
|
32
32
|
export function createViewModeMenu() {
|
|
33
33
|
const el = document.createElement("div");
|
|
@@ -152,7 +152,7 @@ export function createViewModeMenu() {
|
|
|
152
152
|
applyState(selectSlice(store.getState()));
|
|
153
153
|
// Subscribe to changes
|
|
154
154
|
unsub = subscribeSelector(store, selectSlice, applyState, {
|
|
155
|
-
equality: sliceEqual
|
|
155
|
+
equality: sliceEqual,
|
|
156
156
|
});
|
|
157
157
|
}
|
|
158
158
|
function destroy() {
|
|
@@ -172,7 +172,7 @@ function selectSlice(state) {
|
|
|
172
172
|
scrollMode: state.scrollMode,
|
|
173
173
|
layoutMode: state.layoutMode,
|
|
174
174
|
pageRotation: state.pageRotation,
|
|
175
|
-
spacingMode: state.spacingMode
|
|
175
|
+
spacingMode: state.spacingMode,
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
178
|
//# sourceMappingURL=ViewModeMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewModeMenu.js","sourceRoot":"","sources":["../../../../../src/ui/viewer/components/ViewModeMenu.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAG5C,OAAO,EACH,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,2BAA2B,EAC3B,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ViewModeMenu.js","sourceRoot":"","sources":["../../../../../src/ui/viewer/components/ViewModeMenu.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { Store } from "../../framework/store";
|
|
|
2
2
|
import { type ViewerState } from "../state";
|
|
3
3
|
import type { Action } from "../actions";
|
|
4
4
|
import type { WorkerClient } from "../../../worker/index.js";
|
|
5
|
-
export declare function createViewport(): {
|
|
5
|
+
export declare function createViewport(showAttribution?: boolean): {
|
|
6
6
|
el: HTMLDivElement;
|
|
7
7
|
mount: (parent: HTMLElement, store: Store<ViewerState, Action>, wc: WorkerClient) => void;
|
|
8
8
|
destroy: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Viewport.d.ts","sourceRoot":"","sources":["../../../../../src/ui/viewer/components/Viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAEH,KAAK,WAAW,EAOnB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"Viewport.d.ts","sourceRoot":"","sources":["../../../../../src/ui/viewer/components/Viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAEH,KAAK,WAAW,EAOnB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA6Y7D,wBAAgB,cAAc,CAAC,eAAe,UAAO;;oBAyK1B,WAAW,SAAS,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,YAAY,KAAG,IAAI;mBA+sB1E,IAAI;EAsB3B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { subscribeSelector } from "../../framework/selectors";
|
|
2
|
-
import { getPointsToPixels } from "../state";
|
|
2
|
+
import { getPointsToPixels, } from "../state";
|
|
3
3
|
import { showAnnotationPopup, closeAnnotationPopup } from "../annotation";
|
|
4
|
-
import { calculateSpreads, calculateSpreadLayouts, findSpreadForPage, findVisibleSpreadRange, getSpreadPrimaryPage, getSpreadDimensions } from "../layout/spreadLayout";
|
|
4
|
+
import { calculateSpreads, calculateSpreadLayouts, findSpreadForPage, findVisibleSpreadRange, getSpreadPrimaryPage, getSpreadDimensions, } from "../layout/spreadLayout";
|
|
5
5
|
import { createSpread } from "./Spread";
|
|
6
6
|
import { createFloatingToolbar } from "./FloatingToolbar";
|
|
7
7
|
import { on } from "../../framework/events";
|
|
@@ -36,7 +36,7 @@ function readInsets(style) {
|
|
|
36
36
|
top: parsePixel(style.paddingTop),
|
|
37
37
|
right: parsePixel(style.paddingRight),
|
|
38
38
|
bottom: parsePixel(style.paddingBottom),
|
|
39
|
-
left: parsePixel(style.paddingLeft)
|
|
39
|
+
left: parsePixel(style.paddingLeft),
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
function addInsets(a, b) {
|
|
@@ -44,7 +44,7 @@ function addInsets(a, b) {
|
|
|
44
44
|
top: a.top + b.top,
|
|
45
45
|
right: a.right + b.right,
|
|
46
46
|
bottom: a.bottom + b.bottom,
|
|
47
|
-
left: a.left + b.left
|
|
47
|
+
left: a.left + b.left,
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
function readViewportMetrics(scrollArea, container) {
|
|
@@ -60,7 +60,7 @@ function readViewportMetrics(scrollArea, container) {
|
|
|
60
60
|
height,
|
|
61
61
|
innerWidth,
|
|
62
62
|
innerHeight,
|
|
63
|
-
padding
|
|
63
|
+
padding,
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
66
|
function metricsEqual(a, b) {
|
|
@@ -217,7 +217,7 @@ function buildLayout(slice, metrics, scrollbarVisible) {
|
|
|
217
217
|
layouts: layout.layouts,
|
|
218
218
|
contentWidth: layout.contentWidth,
|
|
219
219
|
contentHeight: layout.contentHeight,
|
|
220
|
-
scale
|
|
220
|
+
scale,
|
|
221
221
|
};
|
|
222
222
|
}
|
|
223
223
|
function computeViewportUpdate(prevSlice, nextSlice, prevMetrics, nextMetrics) {
|
|
@@ -251,10 +251,10 @@ function computeViewportUpdate(prevSlice, nextSlice, prevMetrics, nextMetrics) {
|
|
|
251
251
|
layoutChanged,
|
|
252
252
|
shouldClearSpreads,
|
|
253
253
|
shouldRestorePosition,
|
|
254
|
-
shouldScrollToPage
|
|
254
|
+
shouldScrollToPage,
|
|
255
255
|
};
|
|
256
256
|
}
|
|
257
|
-
export function createViewport() {
|
|
257
|
+
export function createViewport(showAttribution = true) {
|
|
258
258
|
const el = document.createElement("div");
|
|
259
259
|
el.className = "udoc-viewport";
|
|
260
260
|
const scrollArea = document.createElement("div");
|
|
@@ -263,118 +263,122 @@ export function createViewport() {
|
|
|
263
263
|
const container = document.createElement("div");
|
|
264
264
|
container.className = "udoc-viewport__container";
|
|
265
265
|
scrollArea.appendChild(container);
|
|
266
|
-
//
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
@media (max-width: 768px) {
|
|
291
|
-
.${wmClass} {
|
|
292
|
-
bottom: 48px;
|
|
293
|
-
right: 10px;
|
|
294
|
-
font-size: 11px;
|
|
266
|
+
// Attribution with tamper protection (skipped for licensed users)
|
|
267
|
+
let attrObserver = null;
|
|
268
|
+
let attrIntegrityCheck = null;
|
|
269
|
+
if (showAttribution) {
|
|
270
|
+
const attrClass = "_" + Math.random().toString(36).slice(2, 10) + Math.random().toString(36).slice(2, 10);
|
|
271
|
+
const attrHref = "https://docmentis.com";
|
|
272
|
+
const attrText = "Powered by docMentis";
|
|
273
|
+
const attrLinkAttrs = { target: "_blank", rel: "noopener" };
|
|
274
|
+
// Inject dynamic styles for the random class name
|
|
275
|
+
const attrStyle = document.createElement("style");
|
|
276
|
+
attrStyle.textContent = `
|
|
277
|
+
.${attrClass} {
|
|
278
|
+
position: absolute;
|
|
279
|
+
right: 18px;
|
|
280
|
+
bottom: 4px;
|
|
281
|
+
padding: 2px 6px;
|
|
282
|
+
font-size: 12px;
|
|
283
|
+
font-weight: 500;
|
|
284
|
+
color: rgba(0, 0, 0, 0.3);
|
|
285
|
+
text-decoration: none;
|
|
286
|
+
text-shadow: 0 1px 2px rgba(255, 255, 255, 0.5);
|
|
287
|
+
z-index: 10;
|
|
288
|
+
transition: color 0.15s ease;
|
|
295
289
|
}
|
|
290
|
+
.${attrClass}:hover {
|
|
291
|
+
color: rgba(0, 0, 0, 0.6);
|
|
292
|
+
}
|
|
293
|
+
@media (max-width: 768px) {
|
|
294
|
+
.${attrClass} {
|
|
295
|
+
bottom: 48px;
|
|
296
|
+
right: 10px;
|
|
297
|
+
font-size: 11px;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
`;
|
|
301
|
+
el.appendChild(attrStyle);
|
|
302
|
+
function createAttribution() {
|
|
303
|
+
const el2 = document.createElement("a");
|
|
304
|
+
el2.className = attrClass;
|
|
305
|
+
el2.href = attrHref;
|
|
306
|
+
el2.target = attrLinkAttrs.target;
|
|
307
|
+
el2.rel = attrLinkAttrs.rel;
|
|
308
|
+
el2.textContent = attrText;
|
|
309
|
+
return el2;
|
|
296
310
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
el.appendChild(wmStyle);
|
|
320
|
-
}
|
|
321
|
-
// Check for attribute tampering on the watermark itself
|
|
322
|
-
for (const mutation of mutations) {
|
|
323
|
-
if (mutation.target === watermark) {
|
|
324
|
-
if (mutation.type === "attributes") {
|
|
325
|
-
needsRestore = true;
|
|
311
|
+
let attribution = createAttribution();
|
|
312
|
+
el.appendChild(attribution);
|
|
313
|
+
// Protect attribution against removal and modification
|
|
314
|
+
attrObserver = new MutationObserver((mutations) => {
|
|
315
|
+
let needsRestore = false;
|
|
316
|
+
// Check if attribution was removed from DOM
|
|
317
|
+
if (!el.contains(attribution)) {
|
|
318
|
+
needsRestore = true;
|
|
319
|
+
}
|
|
320
|
+
// Check if style element was removed
|
|
321
|
+
if (!el.contains(attrStyle)) {
|
|
322
|
+
el.appendChild(attrStyle);
|
|
323
|
+
}
|
|
324
|
+
// Check for attribute tampering on the attribution itself
|
|
325
|
+
for (const mutation of mutations) {
|
|
326
|
+
if (mutation.target === attribution) {
|
|
327
|
+
if (mutation.type === "attributes") {
|
|
328
|
+
needsRestore = true;
|
|
329
|
+
}
|
|
330
|
+
else if (mutation.type === "characterData" || mutation.type === "childList") {
|
|
331
|
+
needsRestore = true;
|
|
332
|
+
}
|
|
326
333
|
}
|
|
327
|
-
|
|
334
|
+
// Check if attribution's text content was changed
|
|
335
|
+
if (mutation.target.parentNode === attribution && mutation.type === "characterData") {
|
|
328
336
|
needsRestore = true;
|
|
329
337
|
}
|
|
330
338
|
}
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
339
|
+
if (needsRestore) {
|
|
340
|
+
// Remove old attribution if still in DOM but corrupted
|
|
341
|
+
if (el.contains(attribution)) {
|
|
342
|
+
attribution.remove();
|
|
343
|
+
}
|
|
344
|
+
// Create fresh attribution
|
|
345
|
+
attribution = createAttribution();
|
|
346
|
+
el.appendChild(attribution);
|
|
334
347
|
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
348
|
+
});
|
|
349
|
+
// Observe the parent for child removal and the attribution for attribute/content changes
|
|
350
|
+
attrObserver.observe(el, { childList: true, subtree: false });
|
|
351
|
+
attrObserver.observe(attribution, {
|
|
352
|
+
attributes: true,
|
|
353
|
+
childList: true,
|
|
354
|
+
characterData: true,
|
|
355
|
+
subtree: true,
|
|
356
|
+
});
|
|
357
|
+
// Periodic integrity check (catches CSS-based hiding)
|
|
358
|
+
attrIntegrityCheck = setInterval(() => {
|
|
359
|
+
// Restore style element if removed
|
|
360
|
+
if (!el.contains(attrStyle)) {
|
|
361
|
+
el.appendChild(attrStyle);
|
|
340
362
|
}
|
|
341
|
-
//
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
// Restore watermark if removed
|
|
361
|
-
if (!el.contains(watermark)) {
|
|
362
|
-
watermark = createWatermark();
|
|
363
|
-
el.appendChild(watermark);
|
|
364
|
-
wmObserver.observe(watermark, {
|
|
365
|
-
attributes: true,
|
|
366
|
-
childList: true,
|
|
367
|
-
characterData: true,
|
|
368
|
-
subtree: true
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
// Reset any inline style tampering
|
|
372
|
-
watermark.style.cssText = "";
|
|
373
|
-
watermark.removeAttribute("hidden");
|
|
374
|
-
if (watermark.className !== wmClass) {
|
|
375
|
-
watermark.className = wmClass;
|
|
376
|
-
}
|
|
377
|
-
}, 1000);
|
|
363
|
+
// Restore attribution if removed
|
|
364
|
+
if (!el.contains(attribution)) {
|
|
365
|
+
attribution = createAttribution();
|
|
366
|
+
el.appendChild(attribution);
|
|
367
|
+
attrObserver.observe(attribution, {
|
|
368
|
+
attributes: true,
|
|
369
|
+
childList: true,
|
|
370
|
+
characterData: true,
|
|
371
|
+
subtree: true,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
// Reset any inline style tampering
|
|
375
|
+
attribution.style.cssText = "";
|
|
376
|
+
attribution.removeAttribute("hidden");
|
|
377
|
+
if (attribution.className !== attrClass) {
|
|
378
|
+
attribution.className = attrClass;
|
|
379
|
+
}
|
|
380
|
+
}, 1000);
|
|
381
|
+
}
|
|
378
382
|
const floatingToolbar = createFloatingToolbar();
|
|
379
383
|
let workerClient = null;
|
|
380
384
|
let storeRef = null;
|
|
@@ -386,7 +390,7 @@ export function createViewport() {
|
|
|
386
390
|
let lastSlice = null;
|
|
387
391
|
let lastMetrics = null;
|
|
388
392
|
let layoutState = null;
|
|
389
|
-
|
|
393
|
+
const spreadComponents = new Map();
|
|
390
394
|
let layoutDirty = false;
|
|
391
395
|
let lastVisibleRange = { start: 0, end: -1 };
|
|
392
396
|
let containerSize = { width: 0, height: 0 };
|
|
@@ -412,7 +416,7 @@ export function createViewport() {
|
|
|
412
416
|
currentSlice = slice;
|
|
413
417
|
scheduleUpdate();
|
|
414
418
|
}, {
|
|
415
|
-
equality: viewportSliceEqual
|
|
419
|
+
equality: viewportSliceEqual,
|
|
416
420
|
});
|
|
417
421
|
unsubScroll = on(scrollArea, "scroll", () => {
|
|
418
422
|
if (!currentSlice || !layoutState)
|
|
@@ -490,7 +494,10 @@ export function createViewport() {
|
|
|
490
494
|
try {
|
|
491
495
|
const action = JSON.parse(actionData);
|
|
492
496
|
if (action.actionType === "goTo" && action.destination) {
|
|
493
|
-
store.dispatch({
|
|
497
|
+
store.dispatch({
|
|
498
|
+
type: "NAVIGATE_TO_DESTINATION",
|
|
499
|
+
destination: action.destination,
|
|
500
|
+
});
|
|
494
501
|
}
|
|
495
502
|
else if (action.actionType === "uri" && action.uri) {
|
|
496
503
|
window.open(action.uri, "_blank", "noopener");
|
|
@@ -519,7 +526,9 @@ export function createViewport() {
|
|
|
519
526
|
if (wheelCooldown)
|
|
520
527
|
return;
|
|
521
528
|
wheelCooldown = true;
|
|
522
|
-
setTimeout(() => {
|
|
529
|
+
setTimeout(() => {
|
|
530
|
+
wheelCooldown = false;
|
|
531
|
+
}, 150);
|
|
523
532
|
const currentSpreadIndex = findSpreadForPage(layoutState.spreads, currentSlice.page);
|
|
524
533
|
if (e.deltaY > 0) {
|
|
525
534
|
// Scroll down - next spread
|
|
@@ -652,7 +661,7 @@ export function createViewport() {
|
|
|
652
661
|
updateViewportTopPosition(slice, layoutState);
|
|
653
662
|
lastSlice = slice;
|
|
654
663
|
}
|
|
655
|
-
function updateOverflow(
|
|
664
|
+
function updateOverflow(_slice, _metrics) {
|
|
656
665
|
const epsilon = 1;
|
|
657
666
|
const scrollWidth = scrollArea.scrollWidth;
|
|
658
667
|
const scrollHeight = scrollArea.scrollHeight;
|
|
@@ -660,7 +669,7 @@ export function createViewport() {
|
|
|
660
669
|
const clientHeight = scrollArea.clientHeight;
|
|
661
670
|
const scrollbar = getScrollbarSize();
|
|
662
671
|
// Apply hysteresis to avoid scrollbar-induced resize loops near 1px thresholds.
|
|
663
|
-
const assumeY = lastOverflowY ??
|
|
672
|
+
const assumeY = lastOverflowY ?? scrollHeight - clientHeight > epsilon;
|
|
664
673
|
const availableWidth = clientWidth + (assumeY ? scrollbar.width : 0);
|
|
665
674
|
const deltaX = scrollWidth - availableWidth;
|
|
666
675
|
const needsX = resolveOverflowState(lastOverflowX, deltaX, epsilon);
|
|
@@ -715,7 +724,7 @@ export function createViewport() {
|
|
|
715
724
|
function syncEffectiveZoom(slice, state) {
|
|
716
725
|
if (!storeRef)
|
|
717
726
|
return;
|
|
718
|
-
const nextZoom = slice.zoomMode === "custom" ? null : state?.scale ?? null;
|
|
727
|
+
const nextZoom = slice.zoomMode === "custom" ? null : (state?.scale ?? null);
|
|
719
728
|
const current = storeRef.getState().effectiveZoom;
|
|
720
729
|
if (nextZoom === null) {
|
|
721
730
|
if (current === null)
|
|
@@ -773,7 +782,7 @@ export function createViewport() {
|
|
|
773
782
|
viewportTopPosition = {
|
|
774
783
|
page: getSpreadPrimaryPage(spread),
|
|
775
784
|
offset: offsetFromSpreadTop, // negative value
|
|
776
|
-
inSpacing: true
|
|
785
|
+
inSpacing: true,
|
|
777
786
|
};
|
|
778
787
|
return;
|
|
779
788
|
}
|
|
@@ -785,7 +794,7 @@ export function createViewport() {
|
|
|
785
794
|
viewportTopPosition = {
|
|
786
795
|
page: getSpreadPrimaryPage(spread),
|
|
787
796
|
offset: offsetRatio,
|
|
788
|
-
inSpacing: false
|
|
797
|
+
inSpacing: false,
|
|
789
798
|
};
|
|
790
799
|
return;
|
|
791
800
|
}
|
|
@@ -820,14 +829,13 @@ export function createViewport() {
|
|
|
820
829
|
return;
|
|
821
830
|
const scrollTop = scrollArea.scrollTop;
|
|
822
831
|
const visibleRange = findVisibleSpreadRange(state.layouts, scrollTop, metrics.innerHeight, RENDER_BUFFER);
|
|
823
|
-
const rangeChanged = visibleRange.start !== lastVisibleRange.start ||
|
|
824
|
-
visibleRange.end !== lastVisibleRange.end;
|
|
832
|
+
const rangeChanged = visibleRange.start !== lastVisibleRange.start || visibleRange.end !== lastVisibleRange.end;
|
|
825
833
|
const layoutOptions = {
|
|
826
834
|
pageInfos: slice.pageInfos,
|
|
827
835
|
scale: state.scale,
|
|
828
836
|
dpi: slice.dpi,
|
|
829
837
|
rotation: slice.pageRotation,
|
|
830
|
-
pageSpacing: slice.pageSpacing
|
|
838
|
+
pageSpacing: slice.pageSpacing,
|
|
831
839
|
};
|
|
832
840
|
if (layoutDirty || rangeChanged) {
|
|
833
841
|
for (const [index, spread] of spreadComponents) {
|
|
@@ -839,7 +847,7 @@ export function createViewport() {
|
|
|
839
847
|
const renderOptions = {
|
|
840
848
|
docId: slice.docId,
|
|
841
849
|
scale: state.scale,
|
|
842
|
-
dpi: slice.dpi
|
|
850
|
+
dpi: slice.dpi,
|
|
843
851
|
};
|
|
844
852
|
for (let i = visibleRange.start; i <= visibleRange.end; i++) {
|
|
845
853
|
const layout = state.layouts[i];
|
|
@@ -917,7 +925,7 @@ export function createViewport() {
|
|
|
917
925
|
scale: state.scale,
|
|
918
926
|
dpi: slice.dpi,
|
|
919
927
|
rotation: slice.pageRotation,
|
|
920
|
-
pageSpacing: slice.pageSpacing
|
|
928
|
+
pageSpacing: slice.pageSpacing,
|
|
921
929
|
};
|
|
922
930
|
spreadComp.updateLayout(layoutOptions);
|
|
923
931
|
spreadComp.updateAnnotations(slice.pageAnnotations, layoutOptions, slice.highlightedAnnotation);
|
|
@@ -937,7 +945,7 @@ export function createViewport() {
|
|
|
937
945
|
spreadComp.render(workerClient, {
|
|
938
946
|
docId: slice.docId,
|
|
939
947
|
scale: state.scale,
|
|
940
|
-
dpi: slice.dpi
|
|
948
|
+
dpi: slice.dpi,
|
|
941
949
|
});
|
|
942
950
|
// Prerender adjacent pages for smooth page flipping
|
|
943
951
|
const dpr = getDevicePixelRatio();
|
|
@@ -1070,8 +1078,10 @@ export function createViewport() {
|
|
|
1070
1078
|
cancelAnimationFrame(scrollRaf);
|
|
1071
1079
|
if (renderDebounceTimer)
|
|
1072
1080
|
clearTimeout(renderDebounceTimer);
|
|
1073
|
-
|
|
1074
|
-
|
|
1081
|
+
if (attrObserver)
|
|
1082
|
+
attrObserver.disconnect();
|
|
1083
|
+
if (attrIntegrityCheck)
|
|
1084
|
+
clearInterval(attrIntegrityCheck);
|
|
1075
1085
|
floatingToolbar.destroy();
|
|
1076
1086
|
clearSpreads();
|
|
1077
1087
|
workerClient = null;
|
|
@@ -1100,7 +1110,7 @@ function selectViewport(state) {
|
|
|
1100
1110
|
spreadSpacing: state.spreadSpacing,
|
|
1101
1111
|
pageAnnotations: state.pageAnnotations,
|
|
1102
1112
|
highlightedAnnotation: state.highlightedAnnotation,
|
|
1103
|
-
pageText: state.pageText
|
|
1113
|
+
pageText: state.pageText,
|
|
1104
1114
|
};
|
|
1105
1115
|
}
|
|
1106
1116
|
//# sourceMappingURL=Viewport.js.map
|