@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.
@@ -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
- return reader;
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
- linksEnhancer(
8938
- accessibilityEnhancer(
8939
- resourcesEnhancer(
8940
- utilsEnhancer(
8941
- layoutEnhancer(
8942
- zoomEnhancer(
8943
- mediaEnhancer(
8944
- chromeEnhancer(
8945
- navigationEnhancer(
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
- htmlEnhancer(
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;