From daf8282177734248891e4de201d7dbe5ccbcd5fb Mon Sep 17 00:00:00 2001 From: "Gustavo L de Mello (Guz)" Date: Wed, 25 Sep 2024 16:01:30 -0300 Subject: [PATCH] feat: support for image interactions --- bun.lockb | Bin 150499 -> 150846 bytes package.json | 1 + src/lib/sqlite.ts | 21 ++- src/routes/projects/[id]/+page.server.ts | 4 +- src/routes/projects/[id]/+page.svelte | 142 +++++++++++++++++- .../projects/[id]/IteractiveImage.svelte | 64 ++++++++ 6 files changed, 222 insertions(+), 10 deletions(-) create mode 100644 src/routes/projects/[id]/IteractiveImage.svelte diff --git a/bun.lockb b/bun.lockb index 21ce4e23f63cc900615ae823fcbcb50a86bbe2a0..2c89d77970c65c95714927e7df65517d6a5f8f7b 100755 GIT binary patch delta 20228 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 j?V48^4e4^rCrUg+=`bW(EdX28M7?cX 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 X65F0|jgd2ddLJtj+xC^NOjFqbkJBAE diff --git a/package.json b/package.json index 027ffd1..5645c19 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "@sveltejs/vite-plugin-svelte": "^3.0.0", "@types/eslint": "^9.6.0", "@types/node": "^22.6.0", + "blob-util": "^2.0.2", "eslint": "^9.0.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-svelte": "^2.36.0", diff --git a/src/lib/sqlite.ts b/src/lib/sqlite.ts index f6affd3..a91f8ed 100644 --- a/src/lib/sqlite.ts +++ b/src/lib/sqlite.ts @@ -17,12 +17,21 @@ CREATE TABLE IF NOT EXISTS projects ( type Project = { id: string; title: string; - pages: { - title: string; - src: string; - background: string; - }[]; + pages: Page[]; }; -export type { Project }; +type Page = { + title: string; + src: string; + background: string; + iteraction: Iteraction[]; +}; + +type Iteraction = { + x: number; + y: number; + link: string; +}; + +export type { Project, Iteraction, Page }; export default db; diff --git a/src/routes/projects/[id]/+page.server.ts b/src/routes/projects/[id]/+page.server.ts index 4c20ea7..4ae541b 100644 --- a/src/routes/projects/[id]/+page.server.ts +++ b/src/routes/projects/[id]/+page.server.ts @@ -49,6 +49,7 @@ export const actions = { const file = form?.get('file') as File; const title = form?.get('title') as string; const color = form?.get('color') as string; + const iteractions = form?.get('iteractions') as string; console.log(file); @@ -68,7 +69,8 @@ export const actions = { proj.pages.push({ title: title, src: filename, - background: color + background: color, + iteraction: JSON.parse(iteractions) }); const buf = Buffer.from(await file.arrayBuffer()); diff --git a/src/routes/projects/[id]/+page.svelte b/src/routes/projects/[id]/+page.svelte index 0c87f6b..3af13a8 100644 --- a/src/routes/projects/[id]/+page.svelte +++ b/src/routes/projects/[id]/+page.svelte @@ -1,6 +1,8 @@ {#if browser} @@ -82,6 +109,12 @@ )} + +
+
+{JSON.stringify(pages)}
+
+
{/if} @@ -101,7 +134,96 @@
- + {#if blobUrl} +
+
+
+ {#each iteractions as i} + + {/each} + { + let rect = imageElement.getBoundingClientRect(); + imageX = Math.round(((e.clientX - rect.left) / rect.width) * 100); + imageY = Math.round(((e.clientY - rect.top) / rect.height) * 100); + imageWidth = rect.width; + imageHeight = rect.height; + }} + on:click={() => { + currentIteraction ||= { x: 0, y: 0, link: '' }; + currentIteraction.x = imageX; + currentIteraction.y = imageY; + }} + alt="" + /> +
+
+ { + currentIteraction ||= { x: 0, y: 0, link: '' }; + currentIteraction.link = iteractionUrl; + }} + on:mouseout={() => { + currentIteraction ||= { x: 0, y: 0, link: '' }; + currentIteraction.link = iteractionUrl; + }} + /> + { + iteractions.push({ + x: currentIteraction.x, + y: currentIteraction.y, + link: currentIteraction.link + }); + iteractions = iteractions; + }} + /> +
+
+ {imageX} {imageY} + + Iteraction: {JSON.stringify(currentIteraction)} + + +
+
+ {/if} + { + // @ts-ignore + readFile(fileInput.files[0]); + }} + />
@@ -156,10 +278,10 @@ {#each pages as page, key} {@const coord = key * chunk}
- +
- +
@@ -182,6 +304,20 @@ opacity: 0.3; } + .iteraction-box { + width: 30px; + height: 30px; + display: block; + background-color: #ff0000; + opacity: 0.3; + position: absolute; + z-index: 100; + } + + .blob-image-image { + position: relative; + } + .reader { display: flex; diff --git a/src/routes/projects/[id]/IteractiveImage.svelte b/src/routes/projects/[id]/IteractiveImage.svelte new file mode 100644 index 0000000..17f8348 --- /dev/null +++ b/src/routes/projects/[id]/IteractiveImage.svelte @@ -0,0 +1,64 @@ + + +
setCoords()}> + {#if page.iteraction !== undefined && browser} + {#each page.iteraction as i} + + {/each} + {/if} + +
+ +