From 12a10b007d1135ab4af34f3eb6345e1cbd3e61c5 Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Thu, 24 Oct 2024 14:00:02 +0200 Subject: [PATCH 01/15] Finally get some badges rendering --- .../[projectUrl]/badge/+page.server.ts | 212 ++++++++++++++++++ .../project/[projectUrl]/badge/+page.svelte | 15 ++ .../embed/project/[projectUrl]/badge/badge.ts | 6 + .../[projectUrl]/badge/drips-badge.svelte | 68 ++++++ .../[projectUrl]/badge/github-badge.svelte | 12 + 5 files changed, 313 insertions(+) create mode 100644 src/routes/embed/project/[projectUrl]/badge/+page.server.ts create mode 100644 src/routes/embed/project/[projectUrl]/badge/+page.svelte create mode 100644 src/routes/embed/project/[projectUrl]/badge/badge.ts create mode 100644 src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte create mode 100644 src/routes/embed/project/[projectUrl]/badge/github-badge.svelte diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts new file mode 100644 index 000000000..6d0a5daa7 --- /dev/null +++ b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts @@ -0,0 +1,212 @@ +// import type { RequestHandler } from './$types'; +// import DripsBadge from './drips-badge'; +// import GithubBadge from './github-badge'; + + +// import assert from '$lib/utils/assert'; +// import { error } from '@sveltejs/kit'; +// import loadImage from '../../loadImage'; +// import getContrastColor from '$lib/utils/get-contrast-text-color'; +// import satori from 'satori'; +// import { html as toReactElement } from 'satori-html'; +// import loadFonts from '../../loadFonts'; +// import { Resvg } from '@resvg/resvg-js'; +// import getBackgroundImage from '../../getBackgroundImage'; +// import { gql } from 'graphql-request'; +// import query from '$lib/graphql/dripsQL'; +// import isClaimed from '$lib/utils/project/is-claimed'; +// import type { ProjectQuery, ProjectQueryVariables } from './__generated__/gql.generated'; +// import sanitize from 'sanitize-html'; +// import twemoji from '$lib/utils/twemoji'; +// import filterCurrentChainData from '$lib/utils/filter-current-chain-data'; +// import network from '$lib/stores/wallet/network'; + + +export async function load({ params }) { + return { params } +} + +// export const GET: RequestHandler = async ({ url, fetch, params }) => { +// const renderedComponent = DripsBadge.render({ +// background: 'cool', +// text: 'mcdonalds', +// stat: 'micro!' +// }) + +// const element = toReactElement(renderedComponent.html) + +// const svg = await satori(element, { +// height: 32, +// width: 172, +// fonts: await loadFonts(fetch), +// }) + +// const resvg = new Resvg(svg, { +// fitTo: { +// mode: 'width', +// value: 1200, +// }, +// }); + +// const image = resvg.render().asPng(); + +// return new Response(image, { +// headers: { +// 'content-type': 'image/png', +// 'cache-control': 'public, max-age=86400', // 24 hours +// }, +// }); +// } + +// embeds/project/whatever.com?background=light&buttonText=me&style=drips&stat=dependencies + +// export const GET: RequestHandler = async ({ url, fetch, params }) => { +// const { projectUrl } = params; +// assert(projectUrl, 'Missing projectUrl param'); + +// const projectQuery = gql` +// query Project($url: String!, $chains: [SupportedChain!]) { +// projectByUrl(url: $url, chains: $chains) { +// source { +// ownerName +// repoName +// } +// chainData { +// ... on UnClaimedProjectData { +// chain +// } +// ... on ClaimedProjectData { +// chain +// avatar { +// ... on ImageAvatar { +// cid +// } +// ... on EmojiAvatar { +// emoji +// } +// } +// color +// splits { +// dependencies { +// __typename +// } +// } +// } +// } +// } +// } +// `; + +// const res = await query( +// projectQuery, +// { url: projectUrl, chains: [network.gqlName] }, +// fetch, +// ); +// const { projectByUrl: project } = res; +// try { +// assert(project); +// } catch { +// error(404); +// } + +// const projectName = `${project.source.ownerName}/${project.source.repoName}`; + +// const projectData = filterCurrentChainData(project.chainData); + +// const emoji = +// isClaimed(projectData) && projectData.avatar.__typename === 'EmojiAvatar' +// ? sanitize(projectData.avatar.emoji, { +// allowedTags: [], +// allowedAttributes: {}, +// }) +// : 'none'; + +// const cid = +// isClaimed(projectData) && projectData.avatar.__typename === 'ImageAvatar' +// ? projectData.avatar.cid +// : 'none'; + +// const dependenciesCount = isClaimed(projectData) +// ? projectData.splits.dependencies.length.toString() +// : '0'; + +// const color = isClaimed(projectData) ? projectData.color : 'none'; +// const target = url.searchParams.get('target'); + +// try { +// assert(target === 'twitter' || target === 'og'); +// } catch { +// error(400, 'Invalid or missing query params'); +// } + +// const height = target === 'twitter' ? 600 : 675; + +// const bgColor = color === 'none' ? '#5555FF' : color; +// const contrastColor = getContrastColor(bgColor); + +// const bgTheme = contrastColor === 'black' ? 'dark' : 'light'; +// const boxIconDataURI = await loadImage(`/assets/share/box-${bgTheme}.png`, fetch); + +// const textColor = contrastColor === 'black' ? '#333333' : '#FFFFFF'; + +// const dependenciesString = dependenciesCount === '1' ? 'Dependency' : 'Dependencies'; + +// const twemojiElem = (emoji !== 'none' && twemoji(emoji)) ?? undefined; +// const twemojiSrc = (twemojiElem && /src\s*=\s*"(.+?)"/g.exec(twemojiElem)?.[1]) ?? undefined; + +// const twemojiImg = twemojiSrc && (await (await fetch(twemojiSrc)).text()); + +// const resizedTwemojImg = +// typeof twemojiImg === 'string' +// ? twemojiImg.replace(' +// +// ` +// : `
+// ${resizedTwemojImg} +//
`; + +// const svg = await satori( +// toReactElement(`
+// ${getBackgroundImage(bgColor, textColor, target)} +//
+// Project +//
+// ${avatarHtml} +// ${projectName} +//
+//
+// +// ${dependenciesCount} ${dependenciesString} +//
+//
+//
`), +// { +// width: 1200, +// height: height, +// fonts: await loadFonts(fetch), +// }, +// ); + +// const resvg = new Resvg(svg, { +// fitTo: { +// mode: 'width', +// value: 1200, +// }, +// }); + +// const image = resvg.render(); + +// return new Response(image.asPng(), { +// headers: { +// 'content-type': 'image/png', +// 'cache-control': 'public, max-age=86400', // 24 hours +// }, +// }); +// }; diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.svelte b/src/routes/embed/project/[projectUrl]/badge/+page.svelte new file mode 100644 index 000000000..9b766e8cd --- /dev/null +++ b/src/routes/embed/project/[projectUrl]/badge/+page.svelte @@ -0,0 +1,15 @@ + + +
+ Hello World {data} + + +
+ + \ No newline at end of file diff --git a/src/routes/embed/project/[projectUrl]/badge/badge.ts b/src/routes/embed/project/[projectUrl]/badge/badge.ts new file mode 100644 index 000000000..b9180a9dd --- /dev/null +++ b/src/routes/embed/project/[projectUrl]/badge/badge.ts @@ -0,0 +1,6 @@ +export type BadgeData = { + support?: number; + dependencies?: number; + projectName?: string; + projectImageUrl?: string; +} diff --git a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte new file mode 100644 index 000000000..aa9de5518 --- /dev/null +++ b/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte @@ -0,0 +1,68 @@ + + +
+ + + + + + {#if text === 'me'} + Drip to me + {:else if text === 'us'} + Support on Drips + {:else if text === 'project'} + Support on {data.projectName} avatar{data.projectName} on Drips + {/if} + + + {#if stat === 'support'} + {data.support} + {:else if stat === 'dependencies'} + {dependenciesString} + {/if} +
+ + \ No newline at end of file diff --git a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte new file mode 100644 index 000000000..92203b06a --- /dev/null +++ b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte @@ -0,0 +1,12 @@ + + +
+ Github +
+ + \ No newline at end of file From d36f2f923987a8cbfa02df64a3ee9e47b819240a Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Thu, 24 Oct 2024 16:04:43 +0200 Subject: [PATCH 02/15] Move to encompasing badge component --- .../[projectUrl]/badge/+page.server.ts | 23 ++++++++++++-- .../project/[projectUrl]/badge/+page.svelte | 11 ++----- .../project/[projectUrl]/badge/badge.svelte | 16 ++++++++++ .../embed/project/[projectUrl]/badge/badge.ts | 30 +++++++++++++++++++ .../[projectUrl]/badge/drips-badge.svelte | 20 ++++++------- .../[projectUrl]/badge/github-badge.svelte | 6 +++- 6 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 src/routes/embed/project/[projectUrl]/badge/badge.svelte diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts index 6d0a5daa7..96ac6764f 100644 --- a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts +++ b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts @@ -2,6 +2,8 @@ // import DripsBadge from './drips-badge'; // import GithubBadge from './github-badge'; +import { BadgeBackground, BadgeStat, BadgeStyle, BadgeText, type BadgeData, type BadgeOptions } from "./badge.js" + // import assert from '$lib/utils/assert'; // import { error } from '@sveltejs/kit'; @@ -21,9 +23,24 @@ // import filterCurrentChainData from '$lib/utils/filter-current-chain-data'; // import network from '$lib/stores/wallet/network'; - -export async function load({ params }) { - return { params } +export async function load({ params }): Promise<{ + badgeData: BadgeData, + badgeOptions: BadgeOptions +}> { + return { + badgeData: { + support: 12456, + dependencies: 15, + projectName: 'cached_resource', + projectImageUrl: 'http://localhost:5173/api/blockies/0xe2E9b9B5d0757c26aB477A754788B19b60f2ed83' + }, + badgeOptions: { + style: BadgeStyle.drips, + text: BadgeText.me, + background: BadgeBackground.light, + stat: BadgeStat.none + } + } } // export const GET: RequestHandler = async ({ url, fetch, params }) => { diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.svelte b/src/routes/embed/project/[projectUrl]/badge/+page.svelte index 9b766e8cd..c0d4fb032 100644 --- a/src/routes/embed/project/[projectUrl]/badge/+page.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/+page.svelte @@ -1,15 +1,10 @@ -
+
Hello World {data} - - +
- - \ No newline at end of file diff --git a/src/routes/embed/project/[projectUrl]/badge/badge.svelte b/src/routes/embed/project/[projectUrl]/badge/badge.svelte new file mode 100644 index 000000000..e2c305ae9 --- /dev/null +++ b/src/routes/embed/project/[projectUrl]/badge/badge.svelte @@ -0,0 +1,16 @@ + + +
+ + +
+ + \ No newline at end of file diff --git a/src/routes/embed/project/[projectUrl]/badge/badge.ts b/src/routes/embed/project/[projectUrl]/badge/badge.ts index b9180a9dd..c204a360e 100644 --- a/src/routes/embed/project/[projectUrl]/badge/badge.ts +++ b/src/routes/embed/project/[projectUrl]/badge/badge.ts @@ -1,3 +1,33 @@ +export enum BadgeStyle { + github = 'github', + drips = 'drips', +} + +export enum BadgeText { + project = 'project', + me = 'me', + us = 'us', +} + +export enum BadgeBackground { + dark = 'dark', + light = 'light', + blue = 'blue', +} + +export enum BadgeStat { + support = 'support', + dependencies = 'dependencies', + none = 'none', +} + +export type BadgeOptions = { + style: BadgeStyle + text: BadgeText + background: BadgeBackground + stat: BadgeStat +} + export type BadgeData = { support?: number; dependencies?: number; diff --git a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte index aa9de5518..23e2de734 100644 --- a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte @@ -1,13 +1,11 @@
- {#if text === 'me'} + {#if options.text === BadgeText.me} Drip to me - {:else if text === 'us'} + {:else if options.text === BadgeText.us} Support on Drips - {:else if text === 'project'} + {:else if options.text === BadgeText.project} Support on {data.projectName} avatar{data.projectName} on Drips {/if} - {#if stat === 'support'} + {#if options.stat === BadgeStat.support} {data.support} - {:else if stat === 'dependencies'} + {:else if options.stat === BadgeStat.dependencies} {dependenciesString} {/if}
diff --git a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte index 92203b06a..4b049e735 100644 --- a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte @@ -1,4 +1,8 @@ -
From 3a1505f898e6a8a2b796be605b50159b70875d9a Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Thu, 24 Oct 2024 17:07:58 +0200 Subject: [PATCH 03/15] Nail down overall styling for badges --- src/lib/components/illustrations/drip.svelte | 8 +- .../[projectUrl]/badge/+page.server.ts | 4 +- .../project/[projectUrl]/badge/+page.svelte | 5 +- .../[projectUrl]/badge/drips-badge.svelte | 41 +++++++-- .../[projectUrl]/badge/github-badge.svelte | 83 ++++++++++++++++++- 5 files changed, 124 insertions(+), 17 deletions(-) diff --git a/src/lib/components/illustrations/drip.svelte b/src/lib/components/illustrations/drip.svelte index 66d5e385c..a15dd7e4e 100644 --- a/src/lib/components/illustrations/drip.svelte +++ b/src/lib/components/illustrations/drip.svelte @@ -1,10 +1,16 @@ {@html ` - + `} diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts index 96ac6764f..1e9c1d786 100644 --- a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts +++ b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts @@ -36,9 +36,9 @@ export async function load({ params }): Promise<{ }, badgeOptions: { style: BadgeStyle.drips, - text: BadgeText.me, + text: BadgeText.project, background: BadgeBackground.light, - stat: BadgeStat.none + stat: BadgeStat.support, } } } diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.svelte b/src/routes/embed/project/[projectUrl]/badge/+page.svelte index c0d4fb032..1b4616ae7 100644 --- a/src/routes/embed/project/[projectUrl]/badge/+page.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/+page.svelte @@ -4,7 +4,4 @@ export let data; -
- Hello World {data} - -
+ diff --git a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte index 23e2de734..f408d08c3 100644 --- a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte @@ -23,9 +23,9 @@ {#if options.text === BadgeText.me} Drip to me {:else if options.text === BadgeText.us} - Support on Drips + Support us on Drips {:else if options.text === BadgeText.project} - Support on {data.projectName} avatar{data.projectName} on Drips + Support {data.projectName} avatar{data.projectName} on Drips {/if} @@ -37,6 +37,10 @@
\ No newline at end of file diff --git a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte index 4b049e735..e0a32620d 100644 --- a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte @@ -1,16 +1,93 @@ -
- Github +
+ + + + + + {#if options.text === BadgeText.me} + Drip to me + {:else if options.text === BadgeText.us} + Support us on Drips + {:else if options.text === BadgeText.project} + Support {data.projectName} avatar{data.projectName} on Drips + {/if} + + + {#if options.stat === BadgeStat.support} + {data.support} + {:else if options.stat === BadgeStat.dependencies} + {dependenciesString} + {/if}
\ No newline at end of file From 6e705c0c479ff39163b3907d1a8c5258412630e7 Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Thu, 24 Oct 2024 18:48:19 +0200 Subject: [PATCH 04/15] Use project avatar to render project avatar in badge --- .../project-avatar/project-avatar.svelte | 3 +- .../[projectUrl]/badge/+page.server.ts | 210 ++++++++++-------- .../project/[projectUrl]/badge/+page.svelte | 4 +- .../project/[projectUrl]/badge/badge.svelte | 12 +- .../embed/project/[projectUrl]/badge/badge.ts | 18 +- .../[projectUrl]/badge/drips-badge.svelte | 38 ++-- .../[projectUrl]/badge/github-badge.svelte | 51 ++--- 7 files changed, 187 insertions(+), 149 deletions(-) diff --git a/src/lib/components/project-avatar/project-avatar.svelte b/src/lib/components/project-avatar/project-avatar.svelte index de0bb217d..c62495441 100644 --- a/src/lib/components/project-avatar/project-avatar.svelte +++ b/src/lib/components/project-avatar/project-avatar.svelte @@ -34,11 +34,12 @@ export let pendingAvatar = false; - type Size = 'tiny' | 'small' | 'medium' | 'large' | 'huge'; + type Size = 'micro' | 'tiny' | 'small' | 'medium' | 'large' | 'huge'; export let size: Size = 'small'; export let outline = project.__typename === 'ClaimedProjectData'; const CONTAINER_SIZES: Record = { + micro: '0.8rem', tiny: '1.5rem', small: '2rem', medium: '3rem', diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts index 1e9c1d786..b8a5dadc3 100644 --- a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts +++ b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts @@ -2,11 +2,17 @@ // import DripsBadge from './drips-badge'; // import GithubBadge from './github-badge'; -import { BadgeBackground, BadgeStat, BadgeStyle, BadgeText, type BadgeData, type BadgeOptions } from "./badge.js" - - -// import assert from '$lib/utils/assert'; -// import { error } from '@sveltejs/kit'; +import { + BadgeBackground, + BadgeStat, + BadgeStyle, + BadgeText, + type BadgeData, + type BadgeOptions, +} from './badge.js'; + +import assert from '$lib/utils/assert'; +import { error } from '@sveltejs/kit'; // import loadImage from '../../loadImage'; // import getContrastColor from '$lib/utils/get-contrast-text-color'; // import satori from 'satori'; @@ -14,105 +20,135 @@ import { BadgeBackground, BadgeStat, BadgeStyle, BadgeText, type BadgeData, type // import loadFonts from '../../loadFonts'; // import { Resvg } from '@resvg/resvg-js'; // import getBackgroundImage from '../../getBackgroundImage'; -// import { gql } from 'graphql-request'; -// import query from '$lib/graphql/dripsQL'; -// import isClaimed from '$lib/utils/project/is-claimed'; -// import type { ProjectQuery, ProjectQueryVariables } from './__generated__/gql.generated'; +import { gql } from 'graphql-request'; +import query from '$lib/graphql/dripsQL'; +import isClaimed from '$lib/utils/project/is-claimed'; +import type { ProjectQuery, ProjectQueryVariables } from './__generated__/gql.generated'; // import sanitize from 'sanitize-html'; // import twemoji from '$lib/utils/twemoji'; -// import filterCurrentChainData from '$lib/utils/filter-current-chain-data'; -// import network from '$lib/stores/wallet/network'; +import filterCurrentChainData from '$lib/utils/filter-current-chain-data'; +import network from '$lib/stores/wallet/network'; export async function load({ params }): Promise<{ - badgeData: BadgeData, - badgeOptions: BadgeOptions + badgeData: BadgeData; + badgeOptions: BadgeOptions; }> { - return { - badgeData: { - support: 12456, - dependencies: 15, - projectName: 'cached_resource', - projectImageUrl: 'http://localhost:5173/api/blockies/0xe2E9b9B5d0757c26aB477A754788B19b60f2ed83' - }, - badgeOptions: { - style: BadgeStyle.drips, - text: BadgeText.project, - background: BadgeBackground.light, - stat: BadgeStat.support, - } - } + const { projectUrl } = params; + assert(projectUrl, 'Missing projectUrl param'); + + // TODO: same as PROJECT_AVATAR_FRAGMENT from project-avatar.svelte + const projectQuery = gql` + query Project($url: String!, $chains: [SupportedChain!]) { + projectByUrl(url: $url, chains: $chains) { + source { + ownerName + repoName + } + chainData { + ... on UnClaimedProjectData { + chain + } + ... on ClaimedProjectData { + chain + color + avatar { + ... on ImageAvatar { + cid + } + ... on EmojiAvatar { + emoji + } + } + splits { + dependencies { + __typename + } + } + totalEarned { + amount + } + } + } + } + } + `; + + const res = await query( + projectQuery, + { url: projectUrl, chains: [network.gqlName] }, + fetch, + ); + const { projectByUrl: project } = res; + try { + assert(project); + } catch { + error(404); + } + + const projectName = `${project.source.repoName}`; + + const projectData = filterCurrentChainData(project.chainData); + + const dependencies = isClaimed(projectData) + ? projectData.splits.dependencies.length.toString() + : '0'; + + console.log(projectName, projectData); + + return { + badgeData: { + support: 12456, + dependencies, + projectName, + projectAvatar: projectData, + }, + badgeOptions: { + style: BadgeStyle.drips, + text: BadgeText.project, + background: BadgeBackground.light, + stat: BadgeStat.support, + }, + }; } -// export const GET: RequestHandler = async ({ url, fetch, params }) => { -// const renderedComponent = DripsBadge.render({ -// background: 'cool', -// text: 'mcdonalds', -// stat: 'micro!' -// }) - -// const element = toReactElement(renderedComponent.html) - -// const svg = await satori(element, { -// height: 32, -// width: 172, -// fonts: await loadFonts(fetch), -// }) - -// const resvg = new Resvg(svg, { -// fitTo: { -// mode: 'width', -// value: 1200, -// }, -// }); - -// const image = resvg.render().asPng(); - -// return new Response(image, { -// headers: { -// 'content-type': 'image/png', -// 'cache-control': 'public, max-age=86400', // 24 hours -// }, -// }); -// } - // embeds/project/whatever.com?background=light&buttonText=me&style=drips&stat=dependencies // export const GET: RequestHandler = async ({ url, fetch, params }) => { -// const { projectUrl } = params; -// assert(projectUrl, 'Missing projectUrl param'); - -// const projectQuery = gql` -// query Project($url: String!, $chains: [SupportedChain!]) { -// projectByUrl(url: $url, chains: $chains) { -// source { -// ownerName -// repoName +// const { projectUrl } = params; +// assert(projectUrl, 'Missing projectUrl param'); + +// const projectQuery = gql` +// query Project($url: String!, $chains: [SupportedChain!]) { +// projectByUrl(url: $url, chains: $chains) { +// source { +// ownerName +// repoName +// } +// chainData { +// ... on UnClaimedProjectData { +// chain // } -// chainData { -// ... on UnClaimedProjectData { -// chain -// } -// ... on ClaimedProjectData { -// chain -// avatar { -// ... on ImageAvatar { -// cid -// } -// ... on EmojiAvatar { -// emoji -// } +// ... on ClaimedProjectData { +// chain +// avatar { +// ... on ImageAvatar { +// cid // } -// color -// splits { -// dependencies { -// __typename -// } +// ... on EmojiAvatar { +// emoji +// } +// } +// color +// splits { +// dependencies { +// __typename // } // } // } // } // } -// `; +// } +// `; // const res = await query( // projectQuery, diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.svelte b/src/routes/embed/project/[projectUrl]/badge/+page.svelte index 1b4616ae7..24ba3a130 100644 --- a/src/routes/embed/project/[projectUrl]/badge/+page.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/+page.svelte @@ -1,7 +1,7 @@ - + diff --git a/src/routes/embed/project/[projectUrl]/badge/badge.svelte b/src/routes/embed/project/[projectUrl]/badge/badge.svelte index e2c305ae9..d59175520 100644 --- a/src/routes/embed/project/[projectUrl]/badge/badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/badge.svelte @@ -1,16 +1,16 @@ -
- - +
+ +
\ No newline at end of file + diff --git a/src/routes/embed/project/[projectUrl]/badge/badge.ts b/src/routes/embed/project/[projectUrl]/badge/badge.ts index c204a360e..085232b03 100644 --- a/src/routes/embed/project/[projectUrl]/badge/badge.ts +++ b/src/routes/embed/project/[projectUrl]/badge/badge.ts @@ -1,3 +1,5 @@ +import type { ProjectAvatarFragment } from '$lib/components/project-avatar/__generated__/gql.generated'; + export enum BadgeStyle { github = 'github', drips = 'drips', @@ -22,15 +24,15 @@ export enum BadgeStat { } export type BadgeOptions = { - style: BadgeStyle - text: BadgeText - background: BadgeBackground - stat: BadgeStat -} + style: BadgeStyle; + text: BadgeText; + background: BadgeBackground; + stat: BadgeStat; +}; export type BadgeData = { support?: number; - dependencies?: number; + dependencies?: string; projectName?: string; - projectImageUrl?: string; -} + projectAvatar: ProjectAvatarFragment; +}; diff --git a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte index f408d08c3..277322dc8 100644 --- a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte @@ -1,32 +1,36 @@
+> - + - {#if options.text === BadgeText.me} - Drip to me - {:else if options.text === BadgeText.us} - Support us on Drips - {:else if options.text === BadgeText.project} - Support {data.projectName} avatar{data.projectName} on Drips - {/if} + {#if options.text === BadgeText.me} + Drip to me + {:else if options.text === BadgeText.us} + Support us on Drips + {:else if options.text === BadgeText.project} + Support {data.projectName} on Drips + {/if} {#if options.stat === BadgeStat.support} @@ -90,4 +94,4 @@ .embed-badge--drips.embed-badge--light .embed-badge__support { color: var(--color-primary); } - \ No newline at end of file + diff --git a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte index e0a32620d..3d8559139 100644 --- a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte @@ -1,36 +1,37 @@
+> - + - {#if options.text === BadgeText.me} - Drip to me - {:else if options.text === BadgeText.us} - Support us on Drips - {:else if options.text === BadgeText.project} - Support {data.projectName} avatar{data.projectName} on Drips - {/if} + {#if options.text === BadgeText.me} + Drip to me + {:else if options.text === BadgeText.us} + Support us on Drips + {:else if options.text === BadgeText.project} + Support {data.projectName} on Drips + {/if} {#if options.stat === BadgeStat.support} @@ -51,7 +52,7 @@ font-size: 11px; font-family: Verdana, sans-serif; gap: 3px; - background: linear-gradient(0deg, #425160 0%, #5A6B7C 100%); + background: linear-gradient(0deg, #425160 0%, #5a6b7c 100%); height: 20px; padding: 0 4px; color: white; @@ -71,12 +72,6 @@ align-items: center; } - .embed-badge__avatar { - width: 9px; - height: 9px; - border-radius: 100%; - } - .embed-badge--github.embed-badge--dependencies, .embed-badge--github.embed-badge--support { padding-right: 0; @@ -90,4 +85,4 @@ display: flex; align-items: center; } - \ No newline at end of file + From 0a59ab2b84cef1c416bb4d9d5f4ec76eda96cfa7 Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Thu, 24 Oct 2024 19:39:00 +0200 Subject: [PATCH 05/15] Ingest embed options from query params --- .../[projectUrl]/badge/+page.server.ts | 27 ++++++++++++++----- .../embed/project/[projectUrl]/badge/badge.ts | 4 +++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts index b8a5dadc3..d45be3a5d 100644 --- a/src/routes/embed/project/[projectUrl]/badge/+page.server.ts +++ b/src/routes/embed/project/[projectUrl]/badge/+page.server.ts @@ -29,7 +29,23 @@ import type { ProjectQuery, ProjectQueryVariables } from './__generated__/gql.ge import filterCurrentChainData from '$lib/utils/filter-current-chain-data'; import network from '$lib/stores/wallet/network'; -export async function load({ params }): Promise<{ +// const DEFAULT_BADGE_OPTIONS: BadgeOptions = { +// style: BadgeStyle.drips, +// text: BadgeText.me, +// background: BadgeBackground.light, +// stat: BadgeStat.none, +// } as const + +const getBadgeOptions = (url: URL): BadgeOptions => { + return { + style: BadgeStyle[url.searchParams.get('style') as BadgeStyle] || BadgeStyle.default, + text: BadgeText[url.searchParams.get('text') as BadgeText] || BadgeText.default, + background: BadgeBackground[url.searchParams.get('background') as BadgeBackground] || BadgeBackground.default, + stat: BadgeStat[url.searchParams.get('stat') as BadgeStat] || BadgeStat.default, + } +} + +export async function load({ url, params }): Promise<{ badgeData: BadgeData; badgeOptions: BadgeOptions; }> { @@ -95,6 +111,8 @@ export async function load({ params }): Promise<{ console.log(projectName, projectData); + const badgeOptions = getBadgeOptions(url) + return { badgeData: { support: 12456, @@ -102,12 +120,7 @@ export async function load({ params }): Promise<{ projectName, projectAvatar: projectData, }, - badgeOptions: { - style: BadgeStyle.drips, - text: BadgeText.project, - background: BadgeBackground.light, - stat: BadgeStat.support, - }, + badgeOptions, }; } diff --git a/src/routes/embed/project/[projectUrl]/badge/badge.ts b/src/routes/embed/project/[projectUrl]/badge/badge.ts index 085232b03..e440c3a32 100644 --- a/src/routes/embed/project/[projectUrl]/badge/badge.ts +++ b/src/routes/embed/project/[projectUrl]/badge/badge.ts @@ -3,24 +3,28 @@ import type { ProjectAvatarFragment } from '$lib/components/project-avatar/__gen export enum BadgeStyle { github = 'github', drips = 'drips', + default = drips } export enum BadgeText { project = 'project', me = 'me', us = 'us', + default = me } export enum BadgeBackground { dark = 'dark', light = 'light', blue = 'blue', + default = light } export enum BadgeStat { support = 'support', dependencies = 'dependencies', none = 'none', + default = none } export type BadgeOptions = { From 63df158374618e9d8febe196a633ba55b8ad0687 Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Fri, 25 Oct 2024 12:59:36 +0200 Subject: [PATCH 06/15] Badge knows how to render badges conditionally --- src/routes/embed/project/[projectUrl]/badge/badge.svelte | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/routes/embed/project/[projectUrl]/badge/badge.svelte b/src/routes/embed/project/[projectUrl]/badge/badge.svelte index d59175520..b34d49be4 100644 --- a/src/routes/embed/project/[projectUrl]/badge/badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/badge.svelte @@ -1,5 +1,5 @@
- - + {#if options.style === BadgeStyle.github} + + {:else} + + {/if}
diff --git a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte index 3d8559139..dd545f168 100644 --- a/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte +++ b/src/routes/embed/project/[projectUrl]/badge/github-badge.svelte @@ -79,7 +79,7 @@ .embed-badge__support, .embed-badge__dependencies { - background: var(--color-primary); + background: #5555ff; height: 20px; padding: 0 4px; display: flex; From 89aeddc090759ddf0bc8e0487a0569bd1e67289a Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Fri, 25 Oct 2024 14:51:18 +0200 Subject: [PATCH 08/15] Move to components, rename to support button --- .../drips-style-button.svelte} | 7 +++++- .../github-style-button.svelte} | 7 +++++- .../project-support-button.svelte} | 6 ++--- .../project-support-button.ts} | 8 +++---- .../[projectUrl]/badge/+page.server.ts | 22 +++++++++---------- .../project/[projectUrl]/badge/+page.svelte | 2 +- 6 files changed, 31 insertions(+), 21 deletions(-) rename src/{routes/embed/project/[projectUrl]/badge/drips-badge.svelte => lib/components/project-support-button/drips-style-button.svelte} (95%) rename src/{routes/embed/project/[projectUrl]/badge/github-badge.svelte => lib/components/project-support-button/github-style-button.svelte} (95%) rename src/{routes/embed/project/[projectUrl]/badge/badge.svelte => lib/components/project-support-button/project-support-button.svelte} (69%) rename src/{routes/embed/project/[projectUrl]/badge/badge.ts => lib/components/project-support-button/project-support-button.ts} (90%) diff --git a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte b/src/lib/components/project-support-button/drips-style-button.svelte similarity index 95% rename from src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte rename to src/lib/components/project-support-button/drips-style-button.svelte index 2fe6a87d2..97be169ce 100644 --- a/src/routes/embed/project/[projectUrl]/badge/drips-badge.svelte +++ b/src/lib/components/project-support-button/drips-style-button.svelte @@ -1,7 +1,12 @@
- {#if options.style === BadgeStyle.github} - + {#if options.style === SupportButtonStyle.github} + {:else} - + {/if}
diff --git a/src/lib/components/project-support-button/project-support-button.ts b/src/lib/components/project-support-button/project-support-button.ts index e5adb0d02..5ffdd0a47 100644 --- a/src/lib/components/project-support-button/project-support-button.ts +++ b/src/lib/components/project-support-button/project-support-button.ts @@ -1,40 +1,40 @@ import type { ProjectAvatarFragment } from '$lib/components/project-avatar/__generated__/gql.generated'; -export enum BadgeStyle { +export enum SupportButtonStyle { github = 'github', drips = 'drips', default = drips, } -export enum BadgeText { +export enum SupportButtonText { project = 'project', me = 'me', us = 'us', default = me, } -export enum BadgeBackground { +export enum SupportButtonBackground { dark = 'dark', light = 'light', blue = 'blue', default = light, } -export enum BadgeStat { +export enum SupportButtonStat { support = 'support', dependencies = 'dependencies', none = 'none', default = none, } -export type BadgeOptions = { - style: BadgeStyle; - text: BadgeText; - background: BadgeBackground; - stat: BadgeStat; +export type SupportButtonOptions = { + style: SupportButtonStyle; + text: SupportButtonText; + background: SupportButtonBackground; + stat: SupportButtonStat; }; -export type BadgeData = { +export type SupportButtonData = { support?: number; dependencies?: string; projectName?: string; diff --git a/src/routes/embed/project/[projectUrl]/support/+page.server.ts b/src/routes/embed/project/[projectUrl]/support/+page.server.ts index 9c84cbd79..253c5cb69 100644 --- a/src/routes/embed/project/[projectUrl]/support/+page.server.ts +++ b/src/routes/embed/project/[projectUrl]/support/+page.server.ts @@ -1,10 +1,10 @@ import { - BadgeBackground, - BadgeStat, - BadgeStyle, - BadgeText, - type BadgeData, - type BadgeOptions, + SupportButtonBackground, + SupportButtonStat, + SupportButtonStyle, + SupportButtonText, + type SupportButtonData, + type SupportButtonOptions, } from '$lib/components/project-support-button/project-support-button'; import assert from '$lib/utils/assert'; @@ -16,20 +16,26 @@ import type { ProjectQuery, ProjectQueryVariables } from './__generated__/gql.ge import filterCurrentChainData from '$lib/utils/filter-current-chain-data'; import network from '$lib/stores/wallet/network'; -const getBadgeOptions = (url: URL): BadgeOptions => { +const getSupportButtonOptions = (url: URL): SupportButtonOptions => { return { - style: BadgeStyle[url.searchParams.get('style') as BadgeStyle] || BadgeStyle.default, - text: BadgeText[url.searchParams.get('text') as BadgeText] || BadgeText.default, + style: + SupportButtonStyle[url.searchParams.get('style') as SupportButtonStyle] || + SupportButtonStyle.default, + text: + SupportButtonText[url.searchParams.get('text') as SupportButtonText] || + SupportButtonText.default, background: - BadgeBackground[url.searchParams.get('background') as BadgeBackground] || - BadgeBackground.default, - stat: BadgeStat[url.searchParams.get('stat') as BadgeStat] || BadgeStat.default, + SupportButtonBackground[url.searchParams.get('background') as SupportButtonBackground] || + SupportButtonBackground.default, + stat: + SupportButtonStat[url.searchParams.get('stat') as SupportButtonStat] || + SupportButtonStat.default, }; }; export async function load({ url, params }): Promise<{ - badgeData: BadgeData; - badgeOptions: BadgeOptions; + supportButtonData: SupportButtonData; + supportButtonOptions: SupportButtonOptions; }> { const { projectUrl } = params; assert(projectUrl, 'Missing projectUrl param'); @@ -91,15 +97,15 @@ export async function load({ url, params }): Promise<{ ? projectData.splits.dependencies.length.toString() : '0'; - const badgeOptions = getBadgeOptions(url); + const supportButtonOptions = getSupportButtonOptions(url); return { - badgeData: { + supportButtonData: { support: 12456, dependencies, projectName, projectAvatar: projectData, }, - badgeOptions, + supportButtonOptions, }; } diff --git a/src/routes/embed/project/[projectUrl]/support/+page.svelte b/src/routes/embed/project/[projectUrl]/support/+page.svelte index d6e9155fa..ea3f1d8e3 100644 --- a/src/routes/embed/project/[projectUrl]/support/+page.svelte +++ b/src/routes/embed/project/[projectUrl]/support/+page.svelte @@ -24,5 +24,5 @@ {#if ready} - + {/if} From 178c1bc2a1ffafdfe0e16d55fd3e3712de37499d Mon Sep 17 00:00:00 2001 From: Morgan Brown Date: Fri, 25 Oct 2024 15:10:56 +0200 Subject: [PATCH 11/15] Further style alignment around project support button --- .../drips-style-button.svelte | 32 +++++++++---------- .../github-style-button.svelte | 26 +++++++-------- .../[projectUrl]/support.png/+server.ts | 6 ++-- .../project/[projectUrl]/support/+page.svelte | 4 +-- 4 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/lib/components/project-support-button/drips-style-button.svelte b/src/lib/components/project-support-button/drips-style-button.svelte index 050f1d8b8..39aec4498 100644 --- a/src/lib/components/project-support-button/drips-style-button.svelte +++ b/src/lib/components/project-support-button/drips-style-button.svelte @@ -20,13 +20,13 @@
- + - + {#if options.text === SupportButtonText.me} Drip to me {:else if options.text === SupportButtonText.us} @@ -39,18 +39,18 @@ {#if options.stat === SupportButtonStat.support} - {data.support} + {data.support} {:else if options.stat === SupportButtonStat.dependencies} - {dependenciesString} + {dependenciesString} {/if}
diff --git a/src/lib/components/project-support-button/github-style-button.svelte b/src/lib/components/project-support-button/github-style-button.svelte index a78659683..21abf0d54 100644 --- a/src/lib/components/project-support-button/github-style-button.svelte +++ b/src/lib/components/project-support-button/github-style-button.svelte @@ -21,13 +21,13 @@
- + - + {#if options.text === SupportButtonText.me} Drip to me {:else if options.text === SupportButtonText.us} @@ -40,18 +40,18 @@ {#if options.stat === SupportButtonStat.support} - {data.support} + {data.support} {:else if options.stat === SupportButtonStat.dependencies} - {dependenciesString} + {dependenciesString} {/if}
diff --git a/src/lib/components/project-support-button/github-style-button.svelte b/src/lib/components/project-support-button/github-style-button.svelte index 21abf0d54..a5c2afe24 100644 --- a/src/lib/components/project-support-button/github-style-button.svelte +++ b/src/lib/components/project-support-button/github-style-button.svelte @@ -7,6 +7,7 @@ type SupportButtonOptions, } from './project-support-button'; import ProjectAvatar from '$lib/components/project-avatar/project-avatar.svelte'; + import AggregateFiatEstimate from '$lib/components/aggregate-fiat-estimate/aggregate-fiat-estimate.svelte'; export let options: SupportButtonOptions; export let data: SupportButtonData; @@ -20,7 +21,8 @@ : `Splitting to ${dependencies} Dependencies`; -
@@ -40,11 +42,13 @@ {#if options.stat === SupportButtonStat.support} - {data.support} + {:else if options.stat === SupportButtonStat.dependencies} {dependenciesString} {/if} -
+