@prose-reader/enhancer-gallery 1.270.0 → 1.272.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/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1 -1
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -66,19 +66,19 @@ class z extends R {
|
|
|
66
66
|
x((l) => l),
|
|
67
67
|
O(),
|
|
68
68
|
w(() => {
|
|
69
|
-
const l = H(), a = e.viewport.value.pageSize,
|
|
70
|
-
if (!
|
|
69
|
+
const l = H(), a = e.viewport.value.pageSize, f = l, c = f?.children[0];
|
|
70
|
+
if (!f || !c)
|
|
71
71
|
throw new Error("No item element or content mask");
|
|
72
72
|
c.style.top = "0", c.style.left = "0";
|
|
73
|
-
const i = o, { height: E, width: A } = n.
|
|
73
|
+
const i = o, { height: E, width: A } = n.layoutInfo, S = n.numberOfPages, v = i.width / A * S, C = i.height / E, m = Math.min(v, C), { clone: p, ready$: I } = F(n.element);
|
|
74
74
|
Array.from(p.children).forEach((h) => {
|
|
75
75
|
h.classList.contains(
|
|
76
76
|
$.DOCUMENT_CONTAINER_CLASS_NAME
|
|
77
77
|
) || h.remove();
|
|
78
78
|
}), p.style.left = "0", p.style.top = "0", p.style.position = "relative";
|
|
79
|
-
const
|
|
80
|
-
if (c.style.width = `${a.width}px`, c.style.height = `${a.height}px`, c.style.transformOrigin = "0 0", c.style.transform = `scale(${m})`,
|
|
81
|
-
const h = (i.width -
|
|
79
|
+
const u = a.width * m, g = a.height * m;
|
|
80
|
+
if (c.style.width = `${a.width}px`, c.style.height = `${a.height}px`, c.style.transformOrigin = "0 0", c.style.transform = `scale(${m})`, u < i.width) {
|
|
81
|
+
const h = (i.width - u) / 2;
|
|
82
82
|
c.style.left = `${h}px`;
|
|
83
83
|
}
|
|
84
84
|
if (g < i.height) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/utils/redrawCanvas.ts","../src/utils/deepCloneElement.ts","../src/Snapshot.ts","../src/index.ts"],"sourcesContent":["export const redrawCanvas = (\n originalCanvas: HTMLCanvasElement,\n clonedCanvas: HTMLCanvasElement,\n) => {\n try {\n // Copy canvas dimensions\n clonedCanvas.width = originalCanvas.width\n clonedCanvas.height = originalCanvas.height\n\n // Copy canvas content\n const context = clonedCanvas.getContext(\"2d\")\n if (context) {\n context.drawImage(originalCanvas, 0, 0)\n }\n } catch (e) {\n console.warn(\n \"Could not copy canvas content - possible tainted canvas or cross-origin issue\",\n e,\n )\n }\n}\n","import { waitForFrameLoad } from \"@prose-reader/core\"\nimport { combineLatest, defaultIfEmpty, of, switchMap } from \"rxjs\"\nimport { redrawCanvas } from \"./redrawCanvas\"\n\nconst copyIframeContents = (\n originalIframes: NodeListOf<HTMLIFrameElement>,\n clonedIframes: NodeListOf<HTMLIFrameElement>,\n) => {\n return combineLatest(\n Array.from(originalIframes).map((originalIframe, index) => {\n const clonedIframe = clonedIframes[index]\n\n if (!clonedIframe) return of(true)\n\n return waitForFrameLoad(of(clonedIframe)).pipe(\n switchMap(() => {\n try {\n // Since we know they're same-origin EPUBs, we can directly copy content\n if (\n originalIframe.contentDocument &&\n clonedIframe.contentDocument\n ) {\n // Clone the entire body content\n const clonedBody =\n originalIframe.contentDocument.body.cloneNode(true)\n\n // Replace the body in the cloned iframe\n clonedIframe.contentDocument.body.replaceWith(clonedBody)\n\n // Also copy any head styles that might be important for rendering\n const originalHead = originalIframe.contentDocument.head\n const clonedHead = clonedIframe.contentDocument.head\n\n // Copy all style and link elements from head\n Array.from(\n originalHead.querySelectorAll('style, link[rel=\"stylesheet\"]'),\n ).forEach((node) => {\n clonedHead.appendChild(node.cloneNode(true))\n })\n }\n return of(true)\n } catch (e) {\n console.error(\"Error copying iframe content:\", e)\n return of(false)\n }\n }),\n )\n }),\n )\n}\n\nconst redrawCanvases = (sourceElement: HTMLElement, clone: HTMLElement) => {\n const originalCanvases = sourceElement.querySelectorAll(\"canvas\")\n const clonedCanvases = clone.querySelectorAll(\"canvas\")\n\n originalCanvases.forEach((originalCanvas, index) => {\n if (index < clonedCanvases.length) {\n const clonedCanvas = clonedCanvases[index] as HTMLCanvasElement\n\n redrawCanvas(originalCanvas, clonedCanvas)\n }\n })\n}\n\nexport function deepCloneElement(sourceElement: HTMLElement) {\n // Create a deep clone of the source element\n const clone = sourceElement.cloneNode(true) as HTMLElement\n\n // Find all iframes in the original element\n const originalIframes = sourceElement.querySelectorAll(\"iframe\")\n // Find all iframes in the cloned element\n const clonedIframes = clone.querySelectorAll(\"iframe\")\n\n // Handle canvases in the main document\n redrawCanvases(sourceElement, clone)\n\n const copyContents$ = copyIframeContents(originalIframes, clonedIframes)\n\n return {\n clone,\n ready$: copyContents$.pipe(defaultIfEmpty(true)),\n }\n}\n","import {\n DocumentRenderer,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport { Observable, filter, finalize, first, switchMap, tap } from \"rxjs\"\nimport { deepCloneElement } from \"./utils/deepCloneElement\"\n\nconst createSnapshotItem = () => {\n const spineItemContainerElement = document.createElement(\"div\")\n spineItemContainerElement.style.width = `100%`\n spineItemContainerElement.style.height = `100%`\n spineItemContainerElement.style.position = \"relative\"\n spineItemContainerElement.style.overflow = \"hidden\"\n\n const contentMask = document.createElement(\"div\")\n\n contentMask.style.width = \"100%\"\n contentMask.style.height = \"100%\"\n contentMask.style.position = \"absolute\"\n contentMask.style.top = \"0\"\n contentMask.style.left = \"0\"\n contentMask.style.overflow = \"hidden\"\n\n spineItemContainerElement.appendChild(contentMask)\n\n return spineItemContainerElement\n}\n\nexport class Snapshot extends Observable<HTMLElement> {\n constructor(\n reader: Reader,\n item: SpineItem,\n parent: Element,\n options: {\n height: number\n width: number\n },\n ) {\n super((subscriber) => {\n const unlock = reader.spine.spineItemsLoader.forceOpen([item])\n\n return item.isReady$\n .pipe(\n filter((isReady) => isReady),\n first(),\n switchMap(() => {\n const snapshotItem = createSnapshotItem()\n\n const pageSize = reader.viewport.value.pageSize\n const itemElement = snapshotItem\n const contentMask = itemElement?.children[0] as\n | HTMLElement\n | undefined\n\n if (!itemElement || !contentMask)\n throw new Error(\"No item element or content mask\")\n\n // mask reset\n contentMask.style.top = \"0\"\n contentMask.style.left = \"0\"\n\n const measure = options\n const { height, width } = item.layout.layoutInfo\n const numberOfPages = item.numberOfPages\n const widthScaleFullFrame = (measure.width / width) * numberOfPages\n const heightScale = measure.height / height\n\n // Use the minimum scale to ensure the element fits within both dimensions\n const scale = Math.min(widthScaleFullFrame, heightScale)\n\n const { clone: clonedElement, ready$: cloneReady$ } =\n deepCloneElement(item.element)\n\n // cleanup unwanted elements from the spine\n Array.from(clonedElement.children).forEach((child) => {\n if (\n !child.classList.contains(\n DocumentRenderer.DOCUMENT_CONTAINER_CLASS_NAME,\n )\n ) {\n child.remove()\n }\n })\n\n clonedElement.style.left = \"0\"\n clonedElement.style.top = \"0\"\n clonedElement.style.position = \"relative\"\n\n /**\n * Now we adjust the mask to make it fit in the center and cover\n * only the required part of the spine item (hidding) the overflowing\n * pages for example.\n */\n const pageWidthAfterScale = pageSize.width * scale\n const pageHeightAfterScale = pageSize.height * scale\n\n contentMask.style.width = `${pageSize.width}px`\n contentMask.style.height = `${pageSize.height}px`\n contentMask.style.transformOrigin = \"0 0\"\n contentMask.style.transform = `scale(${scale})`\n\n if (pageWidthAfterScale < measure.width) {\n const gap = (measure.width - pageWidthAfterScale) / 2\n\n contentMask.style.left = `${gap}px`\n }\n\n if (pageHeightAfterScale < measure.height) {\n const gap = (measure.height - pageHeightAfterScale) / 2\n\n contentMask.style.top = `${gap}px`\n }\n\n parent.appendChild(snapshotItem)\n contentMask.appendChild(clonedElement)\n\n subscriber.next(snapshotItem)\n\n return cloneReady$\n }),\n tap(() => {\n subscriber.complete()\n }),\n finalize(() => {\n unlock()\n }),\n )\n .subscribe()\n })\n }\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { Snapshot } from \"./Snapshot\"\nimport type { GalleryEnhancerAPI } from \"./types\"\n\nexport type { GalleryEnhancerAPI }\n\nexport const galleryEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions): InheritOutput & GalleryEnhancerAPI => {\n const reader = next(options)\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_GALLERY: true,\n gallery: {\n snapshot: (spineItem, parent, options) =>\n new Snapshot(reader, spineItem, parent, options),\n },\n }\n }\n"],"names":["redrawCanvas","originalCanvas","clonedCanvas","context","e","copyIframeContents","originalIframes","clonedIframes","combineLatest","originalIframe","index","clonedIframe","waitForFrameLoad","of","switchMap","clonedBody","originalHead","clonedHead","node","redrawCanvases","sourceElement","clone","originalCanvases","clonedCanvases","deepCloneElement","copyContents$","defaultIfEmpty","createSnapshotItem","spineItemContainerElement","contentMask","Snapshot","Observable","reader","item","parent","options","subscriber","unlock","filter","isReady","first","snapshotItem","pageSize","itemElement","measure","height","width","numberOfPages","widthScaleFullFrame","heightScale","scale","clonedElement","cloneReady$","child","DocumentRenderer","pageWidthAfterScale","pageHeightAfterScale","gap","tap","finalize","galleryEnhancer","next","spineItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/redrawCanvas.ts","../src/utils/deepCloneElement.ts","../src/Snapshot.ts","../src/index.ts"],"sourcesContent":["export const redrawCanvas = (\n originalCanvas: HTMLCanvasElement,\n clonedCanvas: HTMLCanvasElement,\n) => {\n try {\n // Copy canvas dimensions\n clonedCanvas.width = originalCanvas.width\n clonedCanvas.height = originalCanvas.height\n\n // Copy canvas content\n const context = clonedCanvas.getContext(\"2d\")\n if (context) {\n context.drawImage(originalCanvas, 0, 0)\n }\n } catch (e) {\n console.warn(\n \"Could not copy canvas content - possible tainted canvas or cross-origin issue\",\n e,\n )\n }\n}\n","import { waitForFrameLoad } from \"@prose-reader/core\"\nimport { combineLatest, defaultIfEmpty, of, switchMap } from \"rxjs\"\nimport { redrawCanvas } from \"./redrawCanvas\"\n\nconst copyIframeContents = (\n originalIframes: NodeListOf<HTMLIFrameElement>,\n clonedIframes: NodeListOf<HTMLIFrameElement>,\n) => {\n return combineLatest(\n Array.from(originalIframes).map((originalIframe, index) => {\n const clonedIframe = clonedIframes[index]\n\n if (!clonedIframe) return of(true)\n\n return waitForFrameLoad(of(clonedIframe)).pipe(\n switchMap(() => {\n try {\n // Since we know they're same-origin EPUBs, we can directly copy content\n if (\n originalIframe.contentDocument &&\n clonedIframe.contentDocument\n ) {\n // Clone the entire body content\n const clonedBody =\n originalIframe.contentDocument.body.cloneNode(true)\n\n // Replace the body in the cloned iframe\n clonedIframe.contentDocument.body.replaceWith(clonedBody)\n\n // Also copy any head styles that might be important for rendering\n const originalHead = originalIframe.contentDocument.head\n const clonedHead = clonedIframe.contentDocument.head\n\n // Copy all style and link elements from head\n Array.from(\n originalHead.querySelectorAll('style, link[rel=\"stylesheet\"]'),\n ).forEach((node) => {\n clonedHead.appendChild(node.cloneNode(true))\n })\n }\n return of(true)\n } catch (e) {\n console.error(\"Error copying iframe content:\", e)\n return of(false)\n }\n }),\n )\n }),\n )\n}\n\nconst redrawCanvases = (sourceElement: HTMLElement, clone: HTMLElement) => {\n const originalCanvases = sourceElement.querySelectorAll(\"canvas\")\n const clonedCanvases = clone.querySelectorAll(\"canvas\")\n\n originalCanvases.forEach((originalCanvas, index) => {\n if (index < clonedCanvases.length) {\n const clonedCanvas = clonedCanvases[index] as HTMLCanvasElement\n\n redrawCanvas(originalCanvas, clonedCanvas)\n }\n })\n}\n\nexport function deepCloneElement(sourceElement: HTMLElement) {\n // Create a deep clone of the source element\n const clone = sourceElement.cloneNode(true) as HTMLElement\n\n // Find all iframes in the original element\n const originalIframes = sourceElement.querySelectorAll(\"iframe\")\n // Find all iframes in the cloned element\n const clonedIframes = clone.querySelectorAll(\"iframe\")\n\n // Handle canvases in the main document\n redrawCanvases(sourceElement, clone)\n\n const copyContents$ = copyIframeContents(originalIframes, clonedIframes)\n\n return {\n clone,\n ready$: copyContents$.pipe(defaultIfEmpty(true)),\n }\n}\n","import {\n DocumentRenderer,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport { filter, finalize, first, Observable, switchMap, tap } from \"rxjs\"\nimport { deepCloneElement } from \"./utils/deepCloneElement\"\n\nconst createSnapshotItem = () => {\n const spineItemContainerElement = document.createElement(\"div\")\n spineItemContainerElement.style.width = `100%`\n spineItemContainerElement.style.height = `100%`\n spineItemContainerElement.style.position = \"relative\"\n spineItemContainerElement.style.overflow = \"hidden\"\n\n const contentMask = document.createElement(\"div\")\n\n contentMask.style.width = \"100%\"\n contentMask.style.height = \"100%\"\n contentMask.style.position = \"absolute\"\n contentMask.style.top = \"0\"\n contentMask.style.left = \"0\"\n contentMask.style.overflow = \"hidden\"\n\n spineItemContainerElement.appendChild(contentMask)\n\n return spineItemContainerElement\n}\n\nexport class Snapshot extends Observable<HTMLElement> {\n constructor(\n reader: Reader,\n item: SpineItem,\n parent: Element,\n options: {\n height: number\n width: number\n },\n ) {\n super((subscriber) => {\n const unlock = reader.spine.spineItemsLoader.forceOpen([item])\n\n return item.isReady$\n .pipe(\n filter((isReady) => isReady),\n first(),\n switchMap(() => {\n const snapshotItem = createSnapshotItem()\n\n const pageSize = reader.viewport.value.pageSize\n const itemElement = snapshotItem\n const contentMask = itemElement?.children[0] as\n | HTMLElement\n | undefined\n\n if (!itemElement || !contentMask)\n throw new Error(\"No item element or content mask\")\n\n // mask reset\n contentMask.style.top = \"0\"\n contentMask.style.left = \"0\"\n\n const measure = options\n const { height, width } = item.layoutInfo\n const numberOfPages = item.numberOfPages\n const widthScaleFullFrame = (measure.width / width) * numberOfPages\n const heightScale = measure.height / height\n\n // Use the minimum scale to ensure the element fits within both dimensions\n const scale = Math.min(widthScaleFullFrame, heightScale)\n\n const { clone: clonedElement, ready$: cloneReady$ } =\n deepCloneElement(item.element)\n\n // cleanup unwanted elements from the spine\n Array.from(clonedElement.children).forEach((child) => {\n if (\n !child.classList.contains(\n DocumentRenderer.DOCUMENT_CONTAINER_CLASS_NAME,\n )\n ) {\n child.remove()\n }\n })\n\n clonedElement.style.left = \"0\"\n clonedElement.style.top = \"0\"\n clonedElement.style.position = \"relative\"\n\n /**\n * Now we adjust the mask to make it fit in the center and cover\n * only the required part of the spine item (hidding) the overflowing\n * pages for example.\n */\n const pageWidthAfterScale = pageSize.width * scale\n const pageHeightAfterScale = pageSize.height * scale\n\n contentMask.style.width = `${pageSize.width}px`\n contentMask.style.height = `${pageSize.height}px`\n contentMask.style.transformOrigin = \"0 0\"\n contentMask.style.transform = `scale(${scale})`\n\n if (pageWidthAfterScale < measure.width) {\n const gap = (measure.width - pageWidthAfterScale) / 2\n\n contentMask.style.left = `${gap}px`\n }\n\n if (pageHeightAfterScale < measure.height) {\n const gap = (measure.height - pageHeightAfterScale) / 2\n\n contentMask.style.top = `${gap}px`\n }\n\n parent.appendChild(snapshotItem)\n contentMask.appendChild(clonedElement)\n\n subscriber.next(snapshotItem)\n\n return cloneReady$\n }),\n tap(() => {\n subscriber.complete()\n }),\n finalize(() => {\n unlock()\n }),\n )\n .subscribe()\n })\n }\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { Snapshot } from \"./Snapshot\"\nimport type { GalleryEnhancerAPI } from \"./types\"\n\nexport type { GalleryEnhancerAPI }\n\nexport const galleryEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions): InheritOutput & GalleryEnhancerAPI => {\n const reader = next(options)\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_GALLERY: true,\n gallery: {\n snapshot: (spineItem, parent, options) =>\n new Snapshot(reader, spineItem, parent, options),\n },\n }\n }\n"],"names":["redrawCanvas","originalCanvas","clonedCanvas","context","e","copyIframeContents","originalIframes","clonedIframes","combineLatest","originalIframe","index","clonedIframe","waitForFrameLoad","of","switchMap","clonedBody","originalHead","clonedHead","node","redrawCanvases","sourceElement","clone","originalCanvases","clonedCanvases","deepCloneElement","copyContents$","defaultIfEmpty","createSnapshotItem","spineItemContainerElement","contentMask","Snapshot","Observable","reader","item","parent","options","subscriber","unlock","filter","isReady","first","snapshotItem","pageSize","itemElement","measure","height","width","numberOfPages","widthScaleFullFrame","heightScale","scale","clonedElement","cloneReady$","child","DocumentRenderer","pageWidthAfterScale","pageHeightAfterScale","gap","tap","finalize","galleryEnhancer","next","spineItem"],"mappings":"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"}
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(a,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("@prose-reader/core"),require("rxjs")):typeof define=="function"&&define.amd?define(["exports","@prose-reader/core","rxjs"],d):(a=typeof globalThis<"u"?globalThis:a||self,d(a["prose-reader-enhancer-gallery"]={},a.core,a.rxjs))})(this,(function(a,d,o){"use strict";const S=(t,e)=>{try{e.width=t.width,e.height=t.height;const n=e.getContext("2d");n&&n.drawImage(t,0,0)}catch(n){console.warn("Could not copy canvas content - possible tainted canvas or cross-origin issue",n)}},v=(t,e)=>o.combineLatest(Array.from(t).map((n,s)=>{const r=e[s];return r?d.waitForFrameLoad(o.of(r)).pipe(o.switchMap(()=>{try{if(n.contentDocument&&r.contentDocument){const c=n.contentDocument.body.cloneNode(!0);r.contentDocument.body.replaceWith(c);const u=n.contentDocument.head,i=r.contentDocument.head;Array.from(u.querySelectorAll('style, link[rel="stylesheet"]')).forEach(h=>{i.appendChild(h.cloneNode(!0))})}return o.of(!0)}catch(c){return console.error("Error copying iframe content:",c),o.of(!1)}})):o.of(!0)})),A=(t,e)=>{const n=t.querySelectorAll("canvas"),s=e.querySelectorAll("canvas");n.forEach((r,c)=>{if(c<s.length){const u=s[c];S(r,u)}})};function C(t){const e=t.cloneNode(!0),n=t.querySelectorAll("iframe"),s=e.querySelectorAll("iframe");A(t,e);const r=v(n,s);return{clone:e,ready$:r.pipe(o.defaultIfEmpty(!0))}}const b=()=>{const t=document.createElement("div");t.style.width="100%",t.style.height="100%",t.style.position="relative",t.style.overflow="hidden";const e=document.createElement("div");return e.style.width="100%",e.style.height="100%",e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.overflow="hidden",t.appendChild(e),t};class I extends o.Observable{constructor(e,n,s,r){super(c=>{const u=e.spine.spineItemsLoader.forceOpen([n]);return n.isReady$.pipe(o.filter(i=>i),o.first(),o.switchMap(()=>{const i=b(),h=e.viewport.value.pageSize,g=i,l=g?.children[0];if(!g||!l)throw new Error("No item element or content mask");l.style.top="0",l.style.left="0";const p=r,{height:$,width:D}=n.
|
|
1
|
+
(function(a,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("@prose-reader/core"),require("rxjs")):typeof define=="function"&&define.amd?define(["exports","@prose-reader/core","rxjs"],d):(a=typeof globalThis<"u"?globalThis:a||self,d(a["prose-reader-enhancer-gallery"]={},a.core,a.rxjs))})(this,(function(a,d,o){"use strict";const S=(t,e)=>{try{e.width=t.width,e.height=t.height;const n=e.getContext("2d");n&&n.drawImage(t,0,0)}catch(n){console.warn("Could not copy canvas content - possible tainted canvas or cross-origin issue",n)}},v=(t,e)=>o.combineLatest(Array.from(t).map((n,s)=>{const r=e[s];return r?d.waitForFrameLoad(o.of(r)).pipe(o.switchMap(()=>{try{if(n.contentDocument&&r.contentDocument){const c=n.contentDocument.body.cloneNode(!0);r.contentDocument.body.replaceWith(c);const u=n.contentDocument.head,i=r.contentDocument.head;Array.from(u.querySelectorAll('style, link[rel="stylesheet"]')).forEach(h=>{i.appendChild(h.cloneNode(!0))})}return o.of(!0)}catch(c){return console.error("Error copying iframe content:",c),o.of(!1)}})):o.of(!0)})),A=(t,e)=>{const n=t.querySelectorAll("canvas"),s=e.querySelectorAll("canvas");n.forEach((r,c)=>{if(c<s.length){const u=s[c];S(r,u)}})};function C(t){const e=t.cloneNode(!0),n=t.querySelectorAll("iframe"),s=e.querySelectorAll("iframe");A(t,e);const r=v(n,s);return{clone:e,ready$:r.pipe(o.defaultIfEmpty(!0))}}const b=()=>{const t=document.createElement("div");t.style.width="100%",t.style.height="100%",t.style.position="relative",t.style.overflow="hidden";const e=document.createElement("div");return e.style.width="100%",e.style.height="100%",e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.overflow="hidden",t.appendChild(e),t};class I extends o.Observable{constructor(e,n,s,r){super(c=>{const u=e.spine.spineItemsLoader.forceOpen([n]);return n.isReady$.pipe(o.filter(i=>i),o.first(),o.switchMap(()=>{const i=b(),h=e.viewport.value.pageSize,g=i,l=g?.children[0];if(!g||!l)throw new Error("No item element or content mask");l.style.top="0",l.style.left="0";const p=r,{height:$,width:D}=n.layoutInfo,O=n.numberOfPages,R=p.width/D*O,M=p.height/$,m=Math.min(R,M),{clone:y,ready$:_}=C(n.element);Array.from(y.children).forEach(f=>{f.classList.contains(d.DocumentRenderer.DOCUMENT_CONTAINER_CLASS_NAME)||f.remove()}),y.style.left="0",y.style.top="0",y.style.position="relative";const w=h.width*m,E=h.height*m;if(l.style.width=`${h.width}px`,l.style.height=`${h.height}px`,l.style.transformOrigin="0 0",l.style.transform=`scale(${m})`,w<p.width){const f=(p.width-w)/2;l.style.left=`${f}px`}if(E<p.height){const f=(p.height-E)/2;l.style.top=`${f}px`}return s.appendChild(i),l.appendChild(y),c.next(i),_}),o.tap(()=>{c.complete()}),o.finalize(()=>{u()})).subscribe()})}}const N=t=>e=>{const n=t(e);return{...n,__PROSE_READER_ENHANCER_GALLERY:!0,gallery:{snapshot:(s,r,c)=>new I(n,s,r,c)}}};a.galleryEnhancer=N,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})}));
|
|
2
2
|
//# sourceMappingURL=index.umd.cjs.map
|
package/dist/index.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.cjs","sources":["../src/utils/redrawCanvas.ts","../src/utils/deepCloneElement.ts","../src/Snapshot.ts","../src/index.ts"],"sourcesContent":["export const redrawCanvas = (\n originalCanvas: HTMLCanvasElement,\n clonedCanvas: HTMLCanvasElement,\n) => {\n try {\n // Copy canvas dimensions\n clonedCanvas.width = originalCanvas.width\n clonedCanvas.height = originalCanvas.height\n\n // Copy canvas content\n const context = clonedCanvas.getContext(\"2d\")\n if (context) {\n context.drawImage(originalCanvas, 0, 0)\n }\n } catch (e) {\n console.warn(\n \"Could not copy canvas content - possible tainted canvas or cross-origin issue\",\n e,\n )\n }\n}\n","import { waitForFrameLoad } from \"@prose-reader/core\"\nimport { combineLatest, defaultIfEmpty, of, switchMap } from \"rxjs\"\nimport { redrawCanvas } from \"./redrawCanvas\"\n\nconst copyIframeContents = (\n originalIframes: NodeListOf<HTMLIFrameElement>,\n clonedIframes: NodeListOf<HTMLIFrameElement>,\n) => {\n return combineLatest(\n Array.from(originalIframes).map((originalIframe, index) => {\n const clonedIframe = clonedIframes[index]\n\n if (!clonedIframe) return of(true)\n\n return waitForFrameLoad(of(clonedIframe)).pipe(\n switchMap(() => {\n try {\n // Since we know they're same-origin EPUBs, we can directly copy content\n if (\n originalIframe.contentDocument &&\n clonedIframe.contentDocument\n ) {\n // Clone the entire body content\n const clonedBody =\n originalIframe.contentDocument.body.cloneNode(true)\n\n // Replace the body in the cloned iframe\n clonedIframe.contentDocument.body.replaceWith(clonedBody)\n\n // Also copy any head styles that might be important for rendering\n const originalHead = originalIframe.contentDocument.head\n const clonedHead = clonedIframe.contentDocument.head\n\n // Copy all style and link elements from head\n Array.from(\n originalHead.querySelectorAll('style, link[rel=\"stylesheet\"]'),\n ).forEach((node) => {\n clonedHead.appendChild(node.cloneNode(true))\n })\n }\n return of(true)\n } catch (e) {\n console.error(\"Error copying iframe content:\", e)\n return of(false)\n }\n }),\n )\n }),\n )\n}\n\nconst redrawCanvases = (sourceElement: HTMLElement, clone: HTMLElement) => {\n const originalCanvases = sourceElement.querySelectorAll(\"canvas\")\n const clonedCanvases = clone.querySelectorAll(\"canvas\")\n\n originalCanvases.forEach((originalCanvas, index) => {\n if (index < clonedCanvases.length) {\n const clonedCanvas = clonedCanvases[index] as HTMLCanvasElement\n\n redrawCanvas(originalCanvas, clonedCanvas)\n }\n })\n}\n\nexport function deepCloneElement(sourceElement: HTMLElement) {\n // Create a deep clone of the source element\n const clone = sourceElement.cloneNode(true) as HTMLElement\n\n // Find all iframes in the original element\n const originalIframes = sourceElement.querySelectorAll(\"iframe\")\n // Find all iframes in the cloned element\n const clonedIframes = clone.querySelectorAll(\"iframe\")\n\n // Handle canvases in the main document\n redrawCanvases(sourceElement, clone)\n\n const copyContents$ = copyIframeContents(originalIframes, clonedIframes)\n\n return {\n clone,\n ready$: copyContents$.pipe(defaultIfEmpty(true)),\n }\n}\n","import {\n DocumentRenderer,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport { Observable, filter, finalize, first, switchMap, tap } from \"rxjs\"\nimport { deepCloneElement } from \"./utils/deepCloneElement\"\n\nconst createSnapshotItem = () => {\n const spineItemContainerElement = document.createElement(\"div\")\n spineItemContainerElement.style.width = `100%`\n spineItemContainerElement.style.height = `100%`\n spineItemContainerElement.style.position = \"relative\"\n spineItemContainerElement.style.overflow = \"hidden\"\n\n const contentMask = document.createElement(\"div\")\n\n contentMask.style.width = \"100%\"\n contentMask.style.height = \"100%\"\n contentMask.style.position = \"absolute\"\n contentMask.style.top = \"0\"\n contentMask.style.left = \"0\"\n contentMask.style.overflow = \"hidden\"\n\n spineItemContainerElement.appendChild(contentMask)\n\n return spineItemContainerElement\n}\n\nexport class Snapshot extends Observable<HTMLElement> {\n constructor(\n reader: Reader,\n item: SpineItem,\n parent: Element,\n options: {\n height: number\n width: number\n },\n ) {\n super((subscriber) => {\n const unlock = reader.spine.spineItemsLoader.forceOpen([item])\n\n return item.isReady$\n .pipe(\n filter((isReady) => isReady),\n first(),\n switchMap(() => {\n const snapshotItem = createSnapshotItem()\n\n const pageSize = reader.viewport.value.pageSize\n const itemElement = snapshotItem\n const contentMask = itemElement?.children[0] as\n | HTMLElement\n | undefined\n\n if (!itemElement || !contentMask)\n throw new Error(\"No item element or content mask\")\n\n // mask reset\n contentMask.style.top = \"0\"\n contentMask.style.left = \"0\"\n\n const measure = options\n const { height, width } = item.layout.layoutInfo\n const numberOfPages = item.numberOfPages\n const widthScaleFullFrame = (measure.width / width) * numberOfPages\n const heightScale = measure.height / height\n\n // Use the minimum scale to ensure the element fits within both dimensions\n const scale = Math.min(widthScaleFullFrame, heightScale)\n\n const { clone: clonedElement, ready$: cloneReady$ } =\n deepCloneElement(item.element)\n\n // cleanup unwanted elements from the spine\n Array.from(clonedElement.children).forEach((child) => {\n if (\n !child.classList.contains(\n DocumentRenderer.DOCUMENT_CONTAINER_CLASS_NAME,\n )\n ) {\n child.remove()\n }\n })\n\n clonedElement.style.left = \"0\"\n clonedElement.style.top = \"0\"\n clonedElement.style.position = \"relative\"\n\n /**\n * Now we adjust the mask to make it fit in the center and cover\n * only the required part of the spine item (hidding) the overflowing\n * pages for example.\n */\n const pageWidthAfterScale = pageSize.width * scale\n const pageHeightAfterScale = pageSize.height * scale\n\n contentMask.style.width = `${pageSize.width}px`\n contentMask.style.height = `${pageSize.height}px`\n contentMask.style.transformOrigin = \"0 0\"\n contentMask.style.transform = `scale(${scale})`\n\n if (pageWidthAfterScale < measure.width) {\n const gap = (measure.width - pageWidthAfterScale) / 2\n\n contentMask.style.left = `${gap}px`\n }\n\n if (pageHeightAfterScale < measure.height) {\n const gap = (measure.height - pageHeightAfterScale) / 2\n\n contentMask.style.top = `${gap}px`\n }\n\n parent.appendChild(snapshotItem)\n contentMask.appendChild(clonedElement)\n\n subscriber.next(snapshotItem)\n\n return cloneReady$\n }),\n tap(() => {\n subscriber.complete()\n }),\n finalize(() => {\n unlock()\n }),\n )\n .subscribe()\n })\n }\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { Snapshot } from \"./Snapshot\"\nimport type { GalleryEnhancerAPI } from \"./types\"\n\nexport type { GalleryEnhancerAPI }\n\nexport const galleryEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions): InheritOutput & GalleryEnhancerAPI => {\n const reader = next(options)\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_GALLERY: true,\n gallery: {\n snapshot: (spineItem, parent, options) =>\n new Snapshot(reader, spineItem, parent, options),\n },\n }\n }\n"],"names":["redrawCanvas","originalCanvas","clonedCanvas","context","e","copyIframeContents","originalIframes","clonedIframes","combineLatest","originalIframe","index","clonedIframe","waitForFrameLoad","of","switchMap","clonedBody","originalHead","clonedHead","node","redrawCanvases","sourceElement","clone","originalCanvases","clonedCanvases","deepCloneElement","copyContents$","defaultIfEmpty","createSnapshotItem","spineItemContainerElement","contentMask","Snapshot","Observable","reader","item","parent","options","subscriber","unlock","filter","isReady","first","snapshotItem","pageSize","itemElement","measure","height","width","numberOfPages","widthScaleFullFrame","heightScale","scale","clonedElement","cloneReady$","child","DocumentRenderer","pageWidthAfterScale","pageHeightAfterScale","gap","tap","finalize","galleryEnhancer","next","spineItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/utils/redrawCanvas.ts","../src/utils/deepCloneElement.ts","../src/Snapshot.ts","../src/index.ts"],"sourcesContent":["export const redrawCanvas = (\n originalCanvas: HTMLCanvasElement,\n clonedCanvas: HTMLCanvasElement,\n) => {\n try {\n // Copy canvas dimensions\n clonedCanvas.width = originalCanvas.width\n clonedCanvas.height = originalCanvas.height\n\n // Copy canvas content\n const context = clonedCanvas.getContext(\"2d\")\n if (context) {\n context.drawImage(originalCanvas, 0, 0)\n }\n } catch (e) {\n console.warn(\n \"Could not copy canvas content - possible tainted canvas or cross-origin issue\",\n e,\n )\n }\n}\n","import { waitForFrameLoad } from \"@prose-reader/core\"\nimport { combineLatest, defaultIfEmpty, of, switchMap } from \"rxjs\"\nimport { redrawCanvas } from \"./redrawCanvas\"\n\nconst copyIframeContents = (\n originalIframes: NodeListOf<HTMLIFrameElement>,\n clonedIframes: NodeListOf<HTMLIFrameElement>,\n) => {\n return combineLatest(\n Array.from(originalIframes).map((originalIframe, index) => {\n const clonedIframe = clonedIframes[index]\n\n if (!clonedIframe) return of(true)\n\n return waitForFrameLoad(of(clonedIframe)).pipe(\n switchMap(() => {\n try {\n // Since we know they're same-origin EPUBs, we can directly copy content\n if (\n originalIframe.contentDocument &&\n clonedIframe.contentDocument\n ) {\n // Clone the entire body content\n const clonedBody =\n originalIframe.contentDocument.body.cloneNode(true)\n\n // Replace the body in the cloned iframe\n clonedIframe.contentDocument.body.replaceWith(clonedBody)\n\n // Also copy any head styles that might be important for rendering\n const originalHead = originalIframe.contentDocument.head\n const clonedHead = clonedIframe.contentDocument.head\n\n // Copy all style and link elements from head\n Array.from(\n originalHead.querySelectorAll('style, link[rel=\"stylesheet\"]'),\n ).forEach((node) => {\n clonedHead.appendChild(node.cloneNode(true))\n })\n }\n return of(true)\n } catch (e) {\n console.error(\"Error copying iframe content:\", e)\n return of(false)\n }\n }),\n )\n }),\n )\n}\n\nconst redrawCanvases = (sourceElement: HTMLElement, clone: HTMLElement) => {\n const originalCanvases = sourceElement.querySelectorAll(\"canvas\")\n const clonedCanvases = clone.querySelectorAll(\"canvas\")\n\n originalCanvases.forEach((originalCanvas, index) => {\n if (index < clonedCanvases.length) {\n const clonedCanvas = clonedCanvases[index] as HTMLCanvasElement\n\n redrawCanvas(originalCanvas, clonedCanvas)\n }\n })\n}\n\nexport function deepCloneElement(sourceElement: HTMLElement) {\n // Create a deep clone of the source element\n const clone = sourceElement.cloneNode(true) as HTMLElement\n\n // Find all iframes in the original element\n const originalIframes = sourceElement.querySelectorAll(\"iframe\")\n // Find all iframes in the cloned element\n const clonedIframes = clone.querySelectorAll(\"iframe\")\n\n // Handle canvases in the main document\n redrawCanvases(sourceElement, clone)\n\n const copyContents$ = copyIframeContents(originalIframes, clonedIframes)\n\n return {\n clone,\n ready$: copyContents$.pipe(defaultIfEmpty(true)),\n }\n}\n","import {\n DocumentRenderer,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport { filter, finalize, first, Observable, switchMap, tap } from \"rxjs\"\nimport { deepCloneElement } from \"./utils/deepCloneElement\"\n\nconst createSnapshotItem = () => {\n const spineItemContainerElement = document.createElement(\"div\")\n spineItemContainerElement.style.width = `100%`\n spineItemContainerElement.style.height = `100%`\n spineItemContainerElement.style.position = \"relative\"\n spineItemContainerElement.style.overflow = \"hidden\"\n\n const contentMask = document.createElement(\"div\")\n\n contentMask.style.width = \"100%\"\n contentMask.style.height = \"100%\"\n contentMask.style.position = \"absolute\"\n contentMask.style.top = \"0\"\n contentMask.style.left = \"0\"\n contentMask.style.overflow = \"hidden\"\n\n spineItemContainerElement.appendChild(contentMask)\n\n return spineItemContainerElement\n}\n\nexport class Snapshot extends Observable<HTMLElement> {\n constructor(\n reader: Reader,\n item: SpineItem,\n parent: Element,\n options: {\n height: number\n width: number\n },\n ) {\n super((subscriber) => {\n const unlock = reader.spine.spineItemsLoader.forceOpen([item])\n\n return item.isReady$\n .pipe(\n filter((isReady) => isReady),\n first(),\n switchMap(() => {\n const snapshotItem = createSnapshotItem()\n\n const pageSize = reader.viewport.value.pageSize\n const itemElement = snapshotItem\n const contentMask = itemElement?.children[0] as\n | HTMLElement\n | undefined\n\n if (!itemElement || !contentMask)\n throw new Error(\"No item element or content mask\")\n\n // mask reset\n contentMask.style.top = \"0\"\n contentMask.style.left = \"0\"\n\n const measure = options\n const { height, width } = item.layoutInfo\n const numberOfPages = item.numberOfPages\n const widthScaleFullFrame = (measure.width / width) * numberOfPages\n const heightScale = measure.height / height\n\n // Use the minimum scale to ensure the element fits within both dimensions\n const scale = Math.min(widthScaleFullFrame, heightScale)\n\n const { clone: clonedElement, ready$: cloneReady$ } =\n deepCloneElement(item.element)\n\n // cleanup unwanted elements from the spine\n Array.from(clonedElement.children).forEach((child) => {\n if (\n !child.classList.contains(\n DocumentRenderer.DOCUMENT_CONTAINER_CLASS_NAME,\n )\n ) {\n child.remove()\n }\n })\n\n clonedElement.style.left = \"0\"\n clonedElement.style.top = \"0\"\n clonedElement.style.position = \"relative\"\n\n /**\n * Now we adjust the mask to make it fit in the center and cover\n * only the required part of the spine item (hidding) the overflowing\n * pages for example.\n */\n const pageWidthAfterScale = pageSize.width * scale\n const pageHeightAfterScale = pageSize.height * scale\n\n contentMask.style.width = `${pageSize.width}px`\n contentMask.style.height = `${pageSize.height}px`\n contentMask.style.transformOrigin = \"0 0\"\n contentMask.style.transform = `scale(${scale})`\n\n if (pageWidthAfterScale < measure.width) {\n const gap = (measure.width - pageWidthAfterScale) / 2\n\n contentMask.style.left = `${gap}px`\n }\n\n if (pageHeightAfterScale < measure.height) {\n const gap = (measure.height - pageHeightAfterScale) / 2\n\n contentMask.style.top = `${gap}px`\n }\n\n parent.appendChild(snapshotItem)\n contentMask.appendChild(clonedElement)\n\n subscriber.next(snapshotItem)\n\n return cloneReady$\n }),\n tap(() => {\n subscriber.complete()\n }),\n finalize(() => {\n unlock()\n }),\n )\n .subscribe()\n })\n }\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { Snapshot } from \"./Snapshot\"\nimport type { GalleryEnhancerAPI } from \"./types\"\n\nexport type { GalleryEnhancerAPI }\n\nexport const galleryEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions): InheritOutput & GalleryEnhancerAPI => {\n const reader = next(options)\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_GALLERY: true,\n gallery: {\n snapshot: (spineItem, parent, options) =>\n new Snapshot(reader, spineItem, parent, options),\n },\n }\n }\n"],"names":["redrawCanvas","originalCanvas","clonedCanvas","context","e","copyIframeContents","originalIframes","clonedIframes","combineLatest","originalIframe","index","clonedIframe","waitForFrameLoad","of","switchMap","clonedBody","originalHead","clonedHead","node","redrawCanvases","sourceElement","clone","originalCanvases","clonedCanvases","deepCloneElement","copyContents$","defaultIfEmpty","createSnapshotItem","spineItemContainerElement","contentMask","Snapshot","Observable","reader","item","parent","options","subscriber","unlock","filter","isReady","first","snapshotItem","pageSize","itemElement","measure","height","width","numberOfPages","widthScaleFullFrame","heightScale","scale","clonedElement","cloneReady$","child","DocumentRenderer","pageWidthAfterScale","pageHeightAfterScale","gap","tap","finalize","galleryEnhancer","next","spineItem"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prose-reader/enhancer-gallery",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.272.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.umd.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"test": "vitest run --coverage"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@prose-reader/core": "^1.
|
|
23
|
+
"@prose-reader/core": "^1.272.0"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"rxjs": "*"
|
|
@@ -28,5 +28,5 @@
|
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"rxjs": "*"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "15e071db18742b2ac15c61513ce847ceadc7a2a0"
|
|
32
32
|
}
|