@prose-reader/core 1.168.0 → 1.169.0
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/dist/enhancers/events/translateFramePositionIntoPage.d.ts +1 -1
- package/dist/enhancers/html/renderer/HtmlRenderer.d.ts +1 -1
- package/dist/enhancers/media/ImageRenderer.d.ts +1 -1
- package/dist/hooks/types.d.ts +2 -6
- package/dist/index.js +67 -78
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +67 -78
- package/dist/index.umd.cjs.map +1 -1
- package/dist/spineItem/renderer/DefaultRenderer.d.ts +5 -6
- package/dist/spineItem/renderer/DocumentRenderer.d.ts +4 -5
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DocumentRenderer } from '../../../spineItem/renderer/DocumentRenderer';
|
|
2
2
|
export declare class HtmlRenderer extends DocumentRenderer {
|
|
3
3
|
latestContentHeightWhenLoaded: number | undefined;
|
|
4
|
-
onCreateDocument(): import('rxjs').Observable<
|
|
4
|
+
onCreateDocument(): import('rxjs').Observable<HTMLIFrameElement>;
|
|
5
5
|
onLoadDocument(): import('rxjs').Observable<HTMLIFrameElement>;
|
|
6
6
|
onUnload(): import('rxjs').Observable<never>;
|
|
7
7
|
onLayout({ minPageSpread, blankPagePosition, spreadPosition, }: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DocumentRenderer } from '../../spineItem/renderer/DocumentRenderer';
|
|
2
2
|
export declare class ImageRenderer extends DocumentRenderer {
|
|
3
3
|
private getImageElement;
|
|
4
|
-
onCreateDocument(): import('rxjs').Observable<
|
|
4
|
+
onCreateDocument(): import('rxjs').Observable<HTMLImageElement>;
|
|
5
5
|
onLoadDocument(): import('rxjs').Observable<Event>;
|
|
6
6
|
onUnload(): import('rxjs').Observable<never>;
|
|
7
7
|
onLayout({ spreadPosition, }: {
|
package/dist/hooks/types.d.ts
CHANGED
|
@@ -9,9 +9,7 @@ export type CoreHook = {
|
|
|
9
9
|
name: `item.onDocumentCreated`;
|
|
10
10
|
runFn: (params: {
|
|
11
11
|
itemId: string;
|
|
12
|
-
|
|
13
|
-
element: HTMLElement;
|
|
14
|
-
}[];
|
|
12
|
+
documentContainer: HTMLElement;
|
|
15
13
|
}) => Observable<void> | void;
|
|
16
14
|
} | {
|
|
17
15
|
name: `item.onDocumentLoad`;
|
|
@@ -19,9 +17,7 @@ export type CoreHook = {
|
|
|
19
17
|
destroy$: Observable<void>;
|
|
20
18
|
destroy: (fn: UserDestroyFn) => void;
|
|
21
19
|
itemId: string;
|
|
22
|
-
|
|
23
|
-
element: HTMLElement;
|
|
24
|
-
}[];
|
|
20
|
+
documentContainer: HTMLElement;
|
|
25
21
|
}) => Observable<void> | void;
|
|
26
22
|
} | {
|
|
27
23
|
name: "item.onBeforeLayout";
|
package/dist/index.js
CHANGED
|
@@ -568,28 +568,29 @@ const layoutEnhancer = (next) => (options) => {
|
|
|
568
568
|
}
|
|
569
569
|
});
|
|
570
570
|
fixReflowable(reader);
|
|
571
|
-
reader.hookManager.register(
|
|
572
|
-
|
|
573
|
-
|
|
571
|
+
reader.hookManager.register(
|
|
572
|
+
`item.onDocumentCreated`,
|
|
573
|
+
({ documentContainer }) => {
|
|
574
|
+
documentContainer.style.opacity = `0`;
|
|
574
575
|
if (settingsManager.values.layoutLayerTransition) {
|
|
575
|
-
|
|
576
|
+
documentContainer.style.transition = `opacity 300ms`;
|
|
576
577
|
}
|
|
577
|
-
}
|
|
578
|
-
|
|
578
|
+
}
|
|
579
|
+
);
|
|
579
580
|
reader.hookManager.register(`item.onBeforeLayout`, ({ item }) => {
|
|
580
581
|
const spineItem = reader.spineItemsManager.get(item.id);
|
|
581
|
-
spineItem == null ? void 0 : spineItem.renderer.
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
});
|
|
582
|
+
const element = spineItem == null ? void 0 : spineItem.renderer.documentContainer;
|
|
583
|
+
if (reader.settings.values.computedPageTurnMode !== `scrollable`) {
|
|
584
|
+
element == null ? void 0 : element.setAttribute(`tab-index`, `0`);
|
|
585
|
+
}
|
|
586
586
|
});
|
|
587
587
|
const revealItemOnReady$ = reader.spineItemsObserver.itemIsReady$.pipe(
|
|
588
588
|
filter(({ isReady }) => isReady),
|
|
589
589
|
tap(({ item }) => {
|
|
590
|
-
item.renderer.
|
|
590
|
+
const element = item.renderer.documentContainer;
|
|
591
|
+
if (element) {
|
|
591
592
|
element.style.opacity = `1`;
|
|
592
|
-
}
|
|
593
|
+
}
|
|
593
594
|
})
|
|
594
595
|
);
|
|
595
596
|
const observeContainerResize = (container) => new Observable((observer) => {
|
|
@@ -5435,7 +5436,6 @@ class DocumentRenderer extends DestroyableClass {
|
|
|
5435
5436
|
map$1(() => void 0),
|
|
5436
5437
|
share()
|
|
5437
5438
|
);
|
|
5438
|
-
this.layers = [];
|
|
5439
5439
|
this.context = params.context;
|
|
5440
5440
|
this.settings = params.settings;
|
|
5441
5441
|
this.hookManager = params.hookManager;
|
|
@@ -5453,33 +5453,29 @@ class DocumentRenderer extends DestroyableClass {
|
|
|
5453
5453
|
this.load$.pipe(
|
|
5454
5454
|
switchMap$1(() => {
|
|
5455
5455
|
this.stateSubject.next(`loading`);
|
|
5456
|
-
const createDocument$ = this.onCreateDocument().pipe(
|
|
5457
|
-
endWith(null),
|
|
5458
|
-
first$1()
|
|
5459
|
-
);
|
|
5456
|
+
const createDocument$ = this.onCreateDocument().pipe(first$1());
|
|
5460
5457
|
return createDocument$.pipe(
|
|
5461
|
-
|
|
5458
|
+
mergeMap((documentContainer) => {
|
|
5462
5459
|
this.hookManager.execute(`item.onDocumentCreated`, this.item.id, {
|
|
5463
5460
|
itemId: this.item.id,
|
|
5464
|
-
|
|
5461
|
+
documentContainer
|
|
5465
5462
|
});
|
|
5466
|
-
}),
|
|
5467
|
-
switchMap$1(() => {
|
|
5468
5463
|
const loadDocument$ = this.onLoadDocument().pipe(
|
|
5469
5464
|
endWith(null),
|
|
5470
5465
|
first$1()
|
|
5471
5466
|
);
|
|
5472
|
-
return loadDocument
|
|
5473
|
-
|
|
5474
|
-
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
|
|
5478
|
-
|
|
5479
|
-
|
|
5480
|
-
|
|
5467
|
+
return loadDocument$.pipe(
|
|
5468
|
+
waitForSwitch(this.context.bridgeEvent.viewportFree$),
|
|
5469
|
+
switchMap$1(() => {
|
|
5470
|
+
const hookResults = this.hookManager.execute(`item.onDocumentLoad`, this.item.id, {
|
|
5471
|
+
itemId: this.item.id,
|
|
5472
|
+
documentContainer
|
|
5473
|
+
}).filter(
|
|
5474
|
+
(result) => result instanceof Observable
|
|
5475
|
+
);
|
|
5476
|
+
return combineLatest([of(null), ...hookResults]).pipe(first$1());
|
|
5477
|
+
})
|
|
5481
5478
|
);
|
|
5482
|
-
return combineLatest([of(null), ...hookResults]).pipe(first$1());
|
|
5483
5479
|
}),
|
|
5484
5480
|
tap$1(() => {
|
|
5485
5481
|
this.stateSubject.next(`loaded`);
|
|
@@ -5509,6 +5505,16 @@ class DocumentRenderer extends DestroyableClass {
|
|
|
5509
5505
|
);
|
|
5510
5506
|
merge(unload$).pipe(takeUntil(this.destroy$)).subscribe();
|
|
5511
5507
|
}
|
|
5508
|
+
attach() {
|
|
5509
|
+
if (this.documentContainer) {
|
|
5510
|
+
this.containerElement.appendChild(this.documentContainer);
|
|
5511
|
+
}
|
|
5512
|
+
}
|
|
5513
|
+
detach() {
|
|
5514
|
+
var _a;
|
|
5515
|
+
(_a = this.documentContainer) == null ? void 0 : _a.remove();
|
|
5516
|
+
this.documentContainer = void 0;
|
|
5517
|
+
}
|
|
5512
5518
|
get state$() {
|
|
5513
5519
|
return this.stateSubject;
|
|
5514
5520
|
}
|
|
@@ -5614,7 +5620,7 @@ class DefaultRenderer extends DocumentRenderer {
|
|
|
5614
5620
|
return EMPTY;
|
|
5615
5621
|
}
|
|
5616
5622
|
onCreateDocument() {
|
|
5617
|
-
return
|
|
5623
|
+
return of(document.createElement("div"));
|
|
5618
5624
|
}
|
|
5619
5625
|
onLoadDocument() {
|
|
5620
5626
|
return EMPTY;
|
|
@@ -6405,20 +6411,20 @@ const layoutItem = ({
|
|
|
6405
6411
|
}) => {
|
|
6406
6412
|
let minimumWidth = context.getPageSize().width;
|
|
6407
6413
|
let blankPagePosition = `none`;
|
|
6408
|
-
const
|
|
6414
|
+
const isScreenStartItem = horizontalOffset % context.state.visibleAreaRect.width === 0;
|
|
6409
6415
|
const isLastItem = index === spineItemsManager.items.length - 1;
|
|
6410
6416
|
if (context.state.isUsingSpreadMode) {
|
|
6411
6417
|
if (!isGloballyPrePaginated && item.renditionLayout === `reflowable` && !isLastItem) {
|
|
6412
6418
|
minimumWidth = context.getPageSize().width * 2;
|
|
6413
6419
|
}
|
|
6414
|
-
if (!isGloballyPrePaginated && item.renditionLayout === `reflowable` && isLastItem &&
|
|
6420
|
+
if (!isGloballyPrePaginated && item.renditionLayout === `reflowable` && isLastItem && isScreenStartItem) {
|
|
6415
6421
|
minimumWidth = context.getPageSize().width * 2;
|
|
6416
6422
|
}
|
|
6417
|
-
const lastItemStartOnNewScreenInAPrepaginatedBook =
|
|
6418
|
-
if (item.item.pageSpreadRight &&
|
|
6423
|
+
const lastItemStartOnNewScreenInAPrepaginatedBook = isScreenStartItem && isLastItem && isGloballyPrePaginated;
|
|
6424
|
+
if (item.item.pageSpreadRight && isScreenStartItem && !context.isRTL()) {
|
|
6419
6425
|
blankPagePosition = `before`;
|
|
6420
6426
|
minimumWidth = context.getPageSize().width * 2;
|
|
6421
|
-
} else if (item.item.pageSpreadLeft &&
|
|
6427
|
+
} else if (item.item.pageSpreadLeft && isScreenStartItem && context.isRTL()) {
|
|
6422
6428
|
blankPagePosition = `before`;
|
|
6423
6429
|
minimumWidth = context.getPageSize().width * 2;
|
|
6424
6430
|
} else if (lastItemStartOnNewScreenInAPrepaginatedBook) {
|
|
@@ -6433,13 +6439,13 @@ const layoutItem = ({
|
|
|
6433
6439
|
const itemLayout$ = item.layout({
|
|
6434
6440
|
minimumWidth,
|
|
6435
6441
|
blankPagePosition,
|
|
6436
|
-
spreadPosition: context.state.isUsingSpreadMode ?
|
|
6442
|
+
spreadPosition: context.state.isUsingSpreadMode ? isScreenStartItem ? context.isRTL() ? `right` : `left` : context.isRTL() ? `left` : `right` : `none`
|
|
6437
6443
|
});
|
|
6438
6444
|
return itemLayout$.pipe(
|
|
6439
6445
|
map$1(({ width, height }) => {
|
|
6440
6446
|
if (settings.values.computedPageTurnDirection === `vertical`) {
|
|
6441
|
-
const currentValidEdgeYForVerticalPositioning =
|
|
6442
|
-
const currentValidEdgeXForVerticalPositioning =
|
|
6447
|
+
const currentValidEdgeYForVerticalPositioning = isScreenStartItem ? verticalOffset : verticalOffset - context.state.visibleAreaRect.height;
|
|
6448
|
+
const currentValidEdgeXForVerticalPositioning = isScreenStartItem ? 0 : horizontalOffset;
|
|
6443
6449
|
if (context.isRTL()) {
|
|
6444
6450
|
item.adjustPositionOfElement({
|
|
6445
6451
|
top: currentValidEdgeYForVerticalPositioning,
|
|
@@ -7162,16 +7168,15 @@ const resourcesEnhancer = (next) => (options) => {
|
|
|
7162
7168
|
};
|
|
7163
7169
|
class ImageRenderer extends DocumentRenderer {
|
|
7164
7170
|
getImageElement() {
|
|
7165
|
-
|
|
7166
|
-
const element = (_a = this.layers[0]) == null ? void 0 : _a.element;
|
|
7171
|
+
const element = this.documentContainer;
|
|
7167
7172
|
if (!(element instanceof HTMLImageElement)) return void 0;
|
|
7168
7173
|
return element;
|
|
7169
7174
|
}
|
|
7170
7175
|
onCreateDocument() {
|
|
7176
|
+
const imgElement = this.containerElement.ownerDocument.createElement(`img`);
|
|
7171
7177
|
return from(this.resourcesHandler.getResource()).pipe(
|
|
7172
7178
|
switchMap$1((responseOrUrl) => {
|
|
7173
|
-
|
|
7174
|
-
this.layers = [{ element: imgElement }];
|
|
7179
|
+
this.documentContainer = imgElement;
|
|
7175
7180
|
imgElement.style.objectFit = `contain`;
|
|
7176
7181
|
imgElement.style.userSelect = `none`;
|
|
7177
7182
|
if (responseOrUrl instanceof URL) {
|
|
@@ -7186,18 +7191,19 @@ class ImageRenderer extends DocumentRenderer {
|
|
|
7186
7191
|
}
|
|
7187
7192
|
throw new Error(`Invalid resource`);
|
|
7188
7193
|
}),
|
|
7189
|
-
|
|
7194
|
+
map$1((src) => {
|
|
7190
7195
|
const element = this.getImageElement();
|
|
7191
7196
|
if (element) {
|
|
7192
7197
|
element.src = src;
|
|
7193
7198
|
}
|
|
7199
|
+
return imgElement;
|
|
7194
7200
|
})
|
|
7195
7201
|
);
|
|
7196
7202
|
}
|
|
7197
7203
|
onLoadDocument() {
|
|
7198
7204
|
const imageElement = this.getImageElement();
|
|
7199
7205
|
if (!imageElement) throw new Error(`invalid element`);
|
|
7200
|
-
this.
|
|
7206
|
+
this.attach();
|
|
7201
7207
|
return fromEvent(imageElement, `load`);
|
|
7202
7208
|
}
|
|
7203
7209
|
onUnload() {
|
|
@@ -7205,10 +7211,7 @@ class ImageRenderer extends DocumentRenderer {
|
|
|
7205
7211
|
if (imageElement) {
|
|
7206
7212
|
URL.revokeObjectURL(imageElement.src);
|
|
7207
7213
|
}
|
|
7208
|
-
this.
|
|
7209
|
-
element.remove();
|
|
7210
|
-
});
|
|
7211
|
-
this.layers = [];
|
|
7214
|
+
this.detach();
|
|
7212
7215
|
return EMPTY;
|
|
7213
7216
|
}
|
|
7214
7217
|
onLayout({
|
|
@@ -7575,22 +7578,14 @@ const loadingEnhancer = (next) => (options) => {
|
|
|
7575
7578
|
};
|
|
7576
7579
|
const translateFramePositionIntoPage = ({
|
|
7577
7580
|
position,
|
|
7578
|
-
frameElement
|
|
7579
|
-
pageWidth,
|
|
7580
|
-
pageHeight
|
|
7581
|
+
frameElement
|
|
7581
7582
|
}) => {
|
|
7582
|
-
const
|
|
7583
|
-
|
|
7584
|
-
|
|
7585
|
-
} =
|
|
7586
|
-
const
|
|
7587
|
-
const
|
|
7588
|
-
computedWidthScale,
|
|
7589
|
-
pageHeight / viewportHeight
|
|
7590
|
-
);
|
|
7591
|
-
const { left = 0, top = 0 } = (frameElement == null ? void 0 : frameElement.getBoundingClientRect()) || {};
|
|
7592
|
-
const adjustedX = position.clientX * computedScale + left;
|
|
7593
|
-
const adjustedY = position.clientY * computedScale + top;
|
|
7583
|
+
const frameRect = frameElement.getBoundingClientRect();
|
|
7584
|
+
const scaleX = frameRect.width / frameElement.offsetWidth;
|
|
7585
|
+
const scaleY = frameRect.height / frameElement.offsetHeight;
|
|
7586
|
+
const { left = 0, top = 0 } = frameRect;
|
|
7587
|
+
const adjustedX = position.clientX * scaleX + left;
|
|
7588
|
+
const adjustedY = position.clientY * scaleY + top;
|
|
7594
7589
|
return {
|
|
7595
7590
|
clientX: adjustedX,
|
|
7596
7591
|
clientY: adjustedY
|
|
@@ -8423,12 +8418,8 @@ class HtmlRenderer extends DocumentRenderer {
|
|
|
8423
8418
|
}
|
|
8424
8419
|
onCreateDocument() {
|
|
8425
8420
|
const frameElement = createFrameElement();
|
|
8426
|
-
this.
|
|
8427
|
-
|
|
8428
|
-
element: frameElement
|
|
8429
|
-
}
|
|
8430
|
-
];
|
|
8431
|
-
return EMPTY;
|
|
8421
|
+
this.documentContainer = frameElement;
|
|
8422
|
+
return of(frameElement);
|
|
8432
8423
|
}
|
|
8433
8424
|
onLoadDocument() {
|
|
8434
8425
|
const frameElement = this.getFrameElement();
|
|
@@ -8440,8 +8431,8 @@ class HtmlRenderer extends DocumentRenderer {
|
|
|
8440
8431
|
settings: this.settings
|
|
8441
8432
|
}),
|
|
8442
8433
|
waitForSwitch(this.context.bridgeEvent.viewportFree$),
|
|
8443
|
-
tap$1((
|
|
8444
|
-
this.
|
|
8434
|
+
tap$1(() => {
|
|
8435
|
+
this.attach();
|
|
8445
8436
|
}),
|
|
8446
8437
|
waitForFrameLoad,
|
|
8447
8438
|
loadAssets({
|
|
@@ -8454,8 +8445,7 @@ class HtmlRenderer extends DocumentRenderer {
|
|
|
8454
8445
|
}
|
|
8455
8446
|
onUnload() {
|
|
8456
8447
|
unloadMedias(this.getFrameElement());
|
|
8457
|
-
this.
|
|
8458
|
-
this.layers = [];
|
|
8448
|
+
this.detach();
|
|
8459
8449
|
return EMPTY;
|
|
8460
8450
|
}
|
|
8461
8451
|
onLayout({
|
|
@@ -8526,8 +8516,7 @@ class HtmlRenderer extends DocumentRenderer {
|
|
|
8526
8516
|
);
|
|
8527
8517
|
}
|
|
8528
8518
|
getFrameElement() {
|
|
8529
|
-
|
|
8530
|
-
const frame = (_a = this.layers[0]) == null ? void 0 : _a.element;
|
|
8519
|
+
const frame = this.documentContainer;
|
|
8531
8520
|
if (!(frame instanceof HTMLIFrameElement)) return;
|
|
8532
8521
|
return frame;
|
|
8533
8522
|
}
|