@prose-reader/core 1.194.0 → 1.195.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/createReaderWithEnhancer.d.ts +2 -8
- package/dist/enhancers/html/enhancer.d.ts +7 -1
- package/dist/enhancers/html/links.d.ts +2 -0
- package/dist/enhancers/navigation/index.d.ts +2 -1
- package/dist/enhancers/navigation/links.d.ts +4 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +67 -61
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +66 -60
- package/dist/index.umd.cjs.map +1 -1
- package/dist/utils/dom.d.ts +2 -1
- package/package.json +3 -3
- package/dist/enhancers/links.d.ts +0 -14
package/dist/index.umd.cjs
CHANGED
|
@@ -458,6 +458,9 @@
|
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
460
|
};
|
|
461
|
+
function isHtmlTagElement(element, tagName) {
|
|
462
|
+
return isHtmlElement(element) && element.tagName.toLowerCase() === tagName.toLowerCase();
|
|
463
|
+
}
|
|
461
464
|
const translateFramePositionIntoPage = ({
|
|
462
465
|
position,
|
|
463
466
|
frameElement
|
|
@@ -885,6 +888,33 @@
|
|
|
885
888
|
).subscribe();
|
|
886
889
|
return reader;
|
|
887
890
|
};
|
|
891
|
+
const handleLinks = (reader) => {
|
|
892
|
+
return reader.spine.spineItemsManager.items$.pipe(
|
|
893
|
+
rxjs.switchMap(
|
|
894
|
+
(items) => rxjs.merge(
|
|
895
|
+
...items.map((item) => {
|
|
896
|
+
return item.loaded$.pipe(
|
|
897
|
+
rxjs.switchMap(() => {
|
|
898
|
+
const frame = item.renderer.getDocumentFrame();
|
|
899
|
+
if (!frame || !(frame == null ? void 0 : frame.contentDocument)) return rxjs.NEVER;
|
|
900
|
+
const anchorElements = Array.from(
|
|
901
|
+
frame.contentDocument.querySelectorAll(`a`)
|
|
902
|
+
);
|
|
903
|
+
const events$ = anchorElements.map(
|
|
904
|
+
(element) => rxjs.fromEvent(element, `click`)
|
|
905
|
+
);
|
|
906
|
+
return rxjs.merge(...events$);
|
|
907
|
+
})
|
|
908
|
+
);
|
|
909
|
+
})
|
|
910
|
+
)
|
|
911
|
+
),
|
|
912
|
+
rxjs.tap((event) => {
|
|
913
|
+
event.preventDefault();
|
|
914
|
+
}),
|
|
915
|
+
rxjs.share()
|
|
916
|
+
);
|
|
917
|
+
};
|
|
888
918
|
class DestroyableClass {
|
|
889
919
|
constructor() {
|
|
890
920
|
this.isDestroyed = false;
|
|
@@ -1997,7 +2027,12 @@
|
|
|
1997
2027
|
return maybeFactory ?? ((props) => new HtmlRenderer(props));
|
|
1998
2028
|
}
|
|
1999
2029
|
});
|
|
2000
|
-
|
|
2030
|
+
const links$ = handleLinks(reader);
|
|
2031
|
+
links$.pipe(rxjs.takeUntil(reader.$.destroy$)).subscribe();
|
|
2032
|
+
return {
|
|
2033
|
+
...reader,
|
|
2034
|
+
links$
|
|
2035
|
+
};
|
|
2001
2036
|
};
|
|
2002
2037
|
function isDefined(arg) {
|
|
2003
2038
|
return arg !== null && arg !== void 0;
|
|
@@ -2255,52 +2290,6 @@
|
|
|
2255
2290
|
settings: settingsManager
|
|
2256
2291
|
};
|
|
2257
2292
|
};
|
|
2258
|
-
const linksEnhancer = (next) => (options) => {
|
|
2259
|
-
const reader = next(options);
|
|
2260
|
-
const subject = new rxjs.Subject();
|
|
2261
|
-
const handleNavigationForClick = (element) => {
|
|
2262
|
-
var _a;
|
|
2263
|
-
if (!element.href) return false;
|
|
2264
|
-
const hrefUrl = new URL(element.href);
|
|
2265
|
-
const hrefWithoutAnchor = `${hrefUrl.origin}${hrefUrl.pathname}`;
|
|
2266
|
-
const hasExistingSpineItem = (_a = reader.context.manifest) == null ? void 0 : _a.spineItems.some(
|
|
2267
|
-
(item) => item.href === hrefWithoutAnchor
|
|
2268
|
-
);
|
|
2269
|
-
if (hasExistingSpineItem) {
|
|
2270
|
-
reader.navigation.goToUrl(hrefUrl);
|
|
2271
|
-
return true;
|
|
2272
|
-
}
|
|
2273
|
-
return false;
|
|
2274
|
-
};
|
|
2275
|
-
reader.hookManager.register(`item.onDocumentLoad`, ({ itemId }) => {
|
|
2276
|
-
const item = reader.spineItemsManager.get(itemId);
|
|
2277
|
-
const frame = item == null ? void 0 : item.renderer.getDocumentFrame();
|
|
2278
|
-
if (!frame) return;
|
|
2279
|
-
if (frame == null ? void 0 : frame.contentDocument) {
|
|
2280
|
-
Array.from(frame.contentDocument.querySelectorAll(`a`)).forEach(
|
|
2281
|
-
(element) => element.addEventListener(`click`, (e) => {
|
|
2282
|
-
if (e.target && `style` in e.target && `ELEMENT_NODE` in e.target) {
|
|
2283
|
-
Report.warn(`prevented click on`, element, e);
|
|
2284
|
-
e.preventDefault();
|
|
2285
|
-
const isNavigable = handleNavigationForClick(element);
|
|
2286
|
-
subject.next({
|
|
2287
|
-
event: `linkClicked`,
|
|
2288
|
-
data: element,
|
|
2289
|
-
isNavigable
|
|
2290
|
-
});
|
|
2291
|
-
}
|
|
2292
|
-
})
|
|
2293
|
-
);
|
|
2294
|
-
}
|
|
2295
|
-
});
|
|
2296
|
-
return {
|
|
2297
|
-
...reader,
|
|
2298
|
-
$: {
|
|
2299
|
-
...reader.$,
|
|
2300
|
-
links$: subject.asObservable()
|
|
2301
|
-
}
|
|
2302
|
-
};
|
|
2303
|
-
};
|
|
2304
2293
|
const HTML_PREFIX = `${HTML_PREFIX$1}-enhancer-loading`;
|
|
2305
2294
|
const CONTAINER_HTML_PREFIX = `${HTML_PREFIX}-container`;
|
|
2306
2295
|
const createLoadingElementContainer = (containerElement, context) => {
|
|
@@ -2588,6 +2577,22 @@
|
|
|
2588
2577
|
destroy
|
|
2589
2578
|
};
|
|
2590
2579
|
};
|
|
2580
|
+
const handleLinksNavigation = (reader, manualNavigator) => {
|
|
2581
|
+
return reader.links$.pipe(
|
|
2582
|
+
rxjs.tap((event) => {
|
|
2583
|
+
var _a;
|
|
2584
|
+
if (!isHtmlTagElement(event.target, "a") || event.type !== "click") return;
|
|
2585
|
+
const hrefUrl = new URL(event.target.href);
|
|
2586
|
+
const hrefWithoutAnchor = `${hrefUrl.origin}${hrefUrl.pathname}`;
|
|
2587
|
+
const hasExistingSpineItem = (_a = reader.context.manifest) == null ? void 0 : _a.spineItems.some(
|
|
2588
|
+
(item) => item.href === hrefWithoutAnchor
|
|
2589
|
+
);
|
|
2590
|
+
if (hasExistingSpineItem) {
|
|
2591
|
+
manualNavigator.goToUrl(hrefUrl);
|
|
2592
|
+
}
|
|
2593
|
+
})
|
|
2594
|
+
);
|
|
2595
|
+
};
|
|
2591
2596
|
const report$4 = Report.namespace(`navigation`);
|
|
2592
2597
|
const getSpineItemPositionForLeftPage = ({
|
|
2593
2598
|
position,
|
|
@@ -3121,6 +3126,8 @@
|
|
|
3121
3126
|
manualNavigator.goToCfi(cfi, { animate: false });
|
|
3122
3127
|
}
|
|
3123
3128
|
};
|
|
3129
|
+
const linksNavigation$ = handleLinksNavigation(reader, manualNavigator);
|
|
3130
|
+
linksNavigation$.pipe(rxjs.takeUntil(reader.$.destroy$)).subscribe();
|
|
3124
3131
|
return {
|
|
3125
3132
|
...reader,
|
|
3126
3133
|
load,
|
|
@@ -8934,22 +8941,20 @@
|
|
|
8934
8941
|
loadingEnhancer(
|
|
8935
8942
|
webkitEnhancer(
|
|
8936
8943
|
fontsEnhancer(
|
|
8937
|
-
|
|
8938
|
-
|
|
8939
|
-
|
|
8940
|
-
|
|
8941
|
-
|
|
8942
|
-
|
|
8943
|
-
|
|
8944
|
-
|
|
8945
|
-
|
|
8944
|
+
accessibilityEnhancer(
|
|
8945
|
+
resourcesEnhancer(
|
|
8946
|
+
utilsEnhancer(
|
|
8947
|
+
layoutEnhancer(
|
|
8948
|
+
zoomEnhancer(
|
|
8949
|
+
navigationEnhancer(
|
|
8950
|
+
htmlEnhancer(
|
|
8951
|
+
mediaEnhancer(
|
|
8952
|
+
chromeEnhancer(
|
|
8946
8953
|
themeEnhancer(
|
|
8947
8954
|
paginationEnhancer(
|
|
8948
8955
|
eventsEnhancer(
|
|
8949
|
-
|
|
8950
|
-
|
|
8951
|
-
createReader
|
|
8952
|
-
)
|
|
8956
|
+
// __
|
|
8957
|
+
createReader
|
|
8953
8958
|
)
|
|
8954
8959
|
)
|
|
8955
8960
|
)
|
|
@@ -8987,6 +8992,7 @@
|
|
|
8987
8992
|
exports2.idle = idle;
|
|
8988
8993
|
exports2.injectCSS = injectCSS;
|
|
8989
8994
|
exports2.isHtmlElement = isHtmlElement;
|
|
8995
|
+
exports2.isHtmlTagElement = isHtmlTagElement;
|
|
8990
8996
|
exports2.mapKeysTo = mapKeysTo;
|
|
8991
8997
|
exports2.observeMutation = observeMutation;
|
|
8992
8998
|
exports2.observeResize = observeResize;
|