summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoe Carstairs <65492573+Sycamost@users.noreply.github.com>2023-08-13 20:12:53 +0100
committerJoe Carstairs <65492573+Sycamost@users.noreply.github.com>2023-08-13 20:12:53 +0100
commitf6d45f7b9374444ae1ab751a213d86827b64eb8f (patch)
tree75ded0ecc1bb3c58086fdbf65dc84e2f476ca9b5 /src
parent3d6bc8137220f483ef87ba0aa059568711d0e287 (diff)
Adds Scotsoun
Diffstat (limited to 'src')
-rw-r--r--src/components/Scotsoun.astro65
-rw-r--r--src/components/ScotsounCdGallery.astro20
-rw-r--r--src/data/scotsoun/index.ts158
-rw-r--r--src/i18n/translations/components/breadcrumbs.ts4
-rw-r--r--src/i18n/translations/components/scotsoun.ts24
-rw-r--r--src/i18n/translations/pages/scotsounGallery.ts11
-rw-r--r--src/i18n/translations/pages/scotsounPaymentSuccessConfirmation.ts27
-rw-r--r--src/pages/[locale]/furthsettins/index.astro8
-rw-r--r--src/pages/[locale]/furthsettins/scotsoun/[scotsounId]/index.astro27
-rw-r--r--src/pages/[locale]/furthsettins/scotsoun/[scotsounId]/payment-success-confirmation.astro30
-rw-r--r--src/pages/[locale]/furthsettins/scotsoun/index.astro22
11 files changed, 317 insertions, 79 deletions
diff --git a/src/components/Scotsoun.astro b/src/components/Scotsoun.astro
new file mode 100644
index 0000000..13c6fa9
--- /dev/null
+++ b/src/components/Scotsoun.astro
@@ -0,0 +1,65 @@
+---
+import translate from '$i18n/translate';
+import tSite from '$i18n/translations/site';
+import tComponent from '$i18n/translations/components/scotsoun';
+import type Locale from '$types/Locale';
+import type Scotsoun from '$types/Scotsoun';
+import PayPalButtons from './PayPalButtons.astro';
+
+interface Props {
+ locale: Locale;
+ scotsoun: Scotsoun;
+}
+
+const { locale, scotsoun } = Astro.props;
+const t = translate(locale);
+---
+
+<section class="section--full-width">
+ <div class="product__header-block">
+ <header>
+ <h1>{scotsoun.title}</h1>
+ {scotsoun?.subtitle && <p class="italic">{scotsoun.subtitle}</p>}
+ {
+ scotsoun?.author && (
+ <p>
+ {t(tSite, { key: 'by' })} {scotsoun.author}
+ </p>
+ )
+ }
+ </header>
+ <div class="product__action-block">
+ <img src={`/images/scotsoun/sscd${scotsoun.scotsounId}.jpg`} />
+ <PayPalButtons successPageUrl={`./${scotsoun.scotsounId}/payment-success-confirmation`} />
+ </div>
+ </div>
+
+ <section>
+ {scotsoun?.description && <p>{scotsoun.description[locale]}</p>}
+
+ {
+ scotsoun?.coverArtist && (
+ <p>{t(tComponent, { key: 'cover-artist', coverArtist: scotsoun.coverArtist })}</p>
+ )
+ }
+
+ {
+ scotsoun?.releaseDate && (
+ <p>{t(tComponent, { key: 'release-date', releaseDate: scotsoun.releaseDate })}</p>
+ )
+ }
+
+ {
+ scotsoun?.trackList && scotsoun.trackList.length > 1 && (
+ <>
+ <h2>Track list</h2>
+ <ol>
+ {scotsoun.trackList.map((track) => (
+ <li>{track}</li>
+ ))}
+ </ol>
+ </>
+ )
+ }
+ </section>
+</section>
diff --git a/src/components/ScotsounCdGallery.astro b/src/components/ScotsounCdGallery.astro
new file mode 100644
index 0000000..12bafb0
--- /dev/null
+++ b/src/components/ScotsounCdGallery.astro
@@ -0,0 +1,20 @@
+---
+import { getAllScotsoun } from '$data/scotsoun';
+
+const scotsoun = await getAllScotsoun();
+---
+
+<ul class="link-gallery link-gallery--scotsoun">
+ {
+ scotsoun.map((scotsounItem) => (
+ <li>
+ <a class="link link-gallery__container" href={`scotsoun/${scotsounItem.scotsounId}`}>
+ <div class="link-gallery__image">
+ <img src={`/images/scotsoun/sscd${scotsounItem.scotsounId}.jpg`} />
+ </div>
+ <p class="link-gallery__title">{scotsounItem.title}</p>
+ </a>
+ </li>
+ ))
+ }
+</ul>
diff --git a/src/data/scotsoun/index.ts b/src/data/scotsoun/index.ts
index 0140cf6..a7cc1d9 100644
--- a/src/data/scotsoun/index.ts
+++ b/src/data/scotsoun/index.ts
@@ -7,88 +7,88 @@ import type ScotsounId from '$types/ScotsounId';
* Lallans issue is accounted for.
*/
export const getScotsoun: ScotsounGetterTable = {
- sscd001: async () => (await import('./sscd001')).default,
- sscd003: async () => (await import('./sscd003')).default,
- sscd008: async () => (await import('./sscd008')).default,
- sscd012: async () => (await import('./sscd012')).default,
- sscd014: async () => (await import('./sscd014')).default,
- sscd015: async () => (await import('./sscd015')).default,
- sscd017: async () => (await import('./sscd017')).default,
- sscd018: async () => (await import('./sscd018')).default,
- sscd020: async () => (await import('./sscd020')).default,
- sscd021: async () => (await import('./sscd021')).default,
- sscd022: async () => (await import('./sscd022')).default,
- sscd024: async () => (await import('./sscd024')).default,
- sscd028: async () => (await import('./sscd028')).default,
- sscd034: async () => (await import('./sscd034')).default,
- sscd035: async () => (await import('./sscd035')).default,
- sscd039: async () => (await import('./sscd039')).default,
- sscd042: async () => (await import('./sscd042')).default,
- sscd043: async () => (await import('./sscd043')).default,
- sscd046: async () => (await import('./sscd046')).default,
- sscd047: async () => (await import('./sscd047')).default,
- sscd048: async () => (await import('./sscd048')).default,
- sscd050: async () => (await import('./sscd050')).default,
- sscd051: async () => (await import('./sscd051')).default,
- sscd056: async () => (await import('./sscd056')).default,
- sscd057: async () => (await import('./sscd057')).default,
- sscd061: async () => (await import('./sscd061')).default,
- sscd063: async () => (await import('./sscd063')).default,
- sscd065: async () => (await import('./sscd065')).default,
- sscd067: async () => (await import('./sscd067')).default,
- sscd069: async () => (await import('./sscd069')).default,
- sscd070: async () => (await import('./sscd070')).default,
- sscd071: async () => (await import('./sscd071')).default,
- sscd072: async () => (await import('./sscd072')).default,
- sscd079: async () => (await import('./sscd079')).default,
- sscd080: async () => (await import('./sscd080')).default,
- sscd081: async () => (await import('./sscd081')).default,
- sscd083: async () => (await import('./sscd083')).default,
- sscd084: async () => (await import('./sscd084')).default,
- sscd087: async () => (await import('./sscd087')).default,
- sscd089: async () => (await import('./sscd089')).default,
- sscd092: async () => (await import('./sscd092')).default,
- sscd094: async () => (await import('./sscd094')).default,
- sscd095: async () => (await import('./sscd095')).default,
- sscd099: async () => (await import('./sscd099')).default,
- sscd105: async () => (await import('./sscd105')).default,
- sscd110: async () => (await import('./sscd110')).default,
- sscd111: async () => (await import('./sscd111')).default,
- sscd112: async () => (await import('./sscd112')).default,
- sscd115: async () => (await import('./sscd115')).default,
- sscd117: async () => (await import('./sscd117')).default,
- sscd118: async () => (await import('./sscd118')).default,
- sscd120: async () => (await import('./sscd120')).default,
- sscd121: async () => (await import('./sscd121')).default,
- sscd122: async () => (await import('./sscd122')).default,
- 'sscd137-8': async () => (await import('./sscd137-8')).default,
- sscd146: async () => (await import('./sscd146')).default,
- sscd147: async () => (await import('./sscd147')).default,
- sscd504: async () => (await import('./sscd504')).default,
- sscd518: async () => (await import('./sscd581')).default,
- sscd800: async () => (await import('./sscd800')).default,
- sscd801: async () => (await import('./sscd801')).default,
- sscd802: async () => (await import('./sscd802')).default,
- sscd803: async () => (await import('./sscd803')).default,
- sscd804: async () => (await import('./sscd804')).default,
- sscd805: async () => (await import('./sscd805')).default,
- sscd806: async () => (await import('./sscd806')).default,
- sscd807: async () => (await import('./sscd807')).default,
- sscd808: async () => (await import('./sscd808')).default,
- sscd809: async () => (await import('./sscd809')).default,
- sscd810: async () => (await import('./sscd810')).default,
- sscd811: async () => (await import('./sscd811')).default,
- sscd812: async () => (await import('./sscd812')).default,
- sscd813: async () => (await import('./sscd813')).default,
- sscd814: async () => (await import('./sscd814')).default,
- sscd815: async () => (await import('./sscd815')).default,
- sscd816: async () => (await import('./sscd816')).default,
- sscdM150: async () => (await import('./sscdM150')).default,
- sscdU1: async () => (await import('./sscdU1')).default,
+ '001': async () => (await import('./sscd001')).default,
+ '003': async () => (await import('./sscd003')).default,
+ '008': async () => (await import('./sscd008')).default,
+ '012': async () => (await import('./sscd012')).default,
+ '014': async () => (await import('./sscd014')).default,
+ '015': async () => (await import('./sscd015')).default,
+ '017': async () => (await import('./sscd017')).default,
+ '018': async () => (await import('./sscd018')).default,
+ '020': async () => (await import('./sscd020')).default,
+ '021': async () => (await import('./sscd021')).default,
+ '022': async () => (await import('./sscd022')).default,
+ '024': async () => (await import('./sscd024')).default,
+ '028': async () => (await import('./sscd028')).default,
+ '034': async () => (await import('./sscd034')).default,
+ '035': async () => (await import('./sscd035')).default,
+ '039': async () => (await import('./sscd039')).default,
+ '042': async () => (await import('./sscd042')).default,
+ '043': async () => (await import('./sscd043')).default,
+ '046': async () => (await import('./sscd046')).default,
+ '047': async () => (await import('./sscd047')).default,
+ '048': async () => (await import('./sscd048')).default,
+ '050': async () => (await import('./sscd050')).default,
+ '051': async () => (await import('./sscd051')).default,
+ '056': async () => (await import('./sscd056')).default,
+ '057': async () => (await import('./sscd057')).default,
+ '061': async () => (await import('./sscd061')).default,
+ '063': async () => (await import('./sscd063')).default,
+ '065': async () => (await import('./sscd065')).default,
+ '067': async () => (await import('./sscd067')).default,
+ '069': async () => (await import('./sscd069')).default,
+ '070': async () => (await import('./sscd070')).default,
+ '071': async () => (await import('./sscd071')).default,
+ '072': async () => (await import('./sscd072')).default,
+ '079': async () => (await import('./sscd079')).default,
+ '080': async () => (await import('./sscd080')).default,
+ '081': async () => (await import('./sscd081')).default,
+ '083': async () => (await import('./sscd083')).default,
+ '084': async () => (await import('./sscd084')).default,
+ '087': async () => (await import('./sscd087')).default,
+ '089': async () => (await import('./sscd089')).default,
+ '092': async () => (await import('./sscd092')).default,
+ '094': async () => (await import('./sscd094')).default,
+ '095': async () => (await import('./sscd095')).default,
+ '099': async () => (await import('./sscd099')).default,
+ '105': async () => (await import('./sscd105')).default,
+ '110': async () => (await import('./sscd110')).default,
+ '111': async () => (await import('./sscd111')).default,
+ '112': async () => (await import('./sscd112')).default,
+ '115': async () => (await import('./sscd115')).default,
+ '117': async () => (await import('./sscd117')).default,
+ '118': async () => (await import('./sscd118')).default,
+ '120': async () => (await import('./sscd120')).default,
+ '121': async () => (await import('./sscd121')).default,
+ '122': async () => (await import('./sscd122')).default,
+ '137-8': async () => (await import('./sscd137-8')).default,
+ '146': async () => (await import('./sscd146')).default,
+ '147': async () => (await import('./sscd147')).default,
+ '504': async () => (await import('./sscd504')).default,
+ '581': async () => (await import('./sscd581')).default,
+ '800': async () => (await import('./sscd800')).default,
+ '801': async () => (await import('./sscd801')).default,
+ '802': async () => (await import('./sscd802')).default,
+ '803': async () => (await import('./sscd803')).default,
+ '804': async () => (await import('./sscd804')).default,
+ '805': async () => (await import('./sscd805')).default,
+ '806': async () => (await import('./sscd806')).default,
+ '807': async () => (await import('./sscd807')).default,
+ '808': async () => (await import('./sscd808')).default,
+ '809': async () => (await import('./sscd809')).default,
+ '810': async () => (await import('./sscd810')).default,
+ '811': async () => (await import('./sscd811')).default,
+ '812': async () => (await import('./sscd812')).default,
+ '813': async () => (await import('./sscd813')).default,
+ '814': async () => (await import('./sscd814')).default,
+ '815': async () => (await import('./sscd815')).default,
+ '816': async () => (await import('./sscd816')).default,
+ M150: async () => (await import('./sscdM150')).default,
+ U1: async () => (await import('./sscdU1')).default,
};
export type ScotsounGetterTable = { [key in ScotsounId]: () => Promise<Scotsoun> };
-export async function getAllLallansIssues(): Promise<Scotsoun[]> {
+export async function getAllScotsoun(): Promise<Scotsoun[]> {
return Promise.all(Object.values(getScotsoun).map((f) => f()));
}
diff --git a/src/i18n/translations/components/breadcrumbs.ts b/src/i18n/translations/components/breadcrumbs.ts
index 3db3f2f..8e7928f 100644
--- a/src/i18n/translations/components/breadcrumbs.ts
+++ b/src/i18n/translations/components/breadcrumbs.ts
@@ -18,6 +18,10 @@ const breadcrumbsTranslations = {
sco: () => 'Lallans',
'en-GB': () => 'Lallans',
},
+ '/furthsettins/scotsoun/': {
+ sco: () => 'Scotsoun',
+ 'en-GB': () => 'Scotsoun',
+ },
...Object.fromEntries(
Object.keys(getLallansIssue).map((lallansIssueNumber) => [
`/furthsettins/lallans/${lallansIssueNumber}/`,
diff --git a/src/i18n/translations/components/scotsoun.ts b/src/i18n/translations/components/scotsoun.ts
new file mode 100644
index 0000000..51017a7
--- /dev/null
+++ b/src/i18n/translations/components/scotsoun.ts
@@ -0,0 +1,24 @@
+import tSite from '../site';
+import type { TranslationsDictionary } from '$types/TranslationsDictionary';
+import type Date from '$types/Date';
+import { defaultLocale } from '$i18n/locales';
+
+const scotsounTranslations = {
+ 'cover-artist': {
+ sco: ({ coverArtist }: { coverArtist: string }) => `Cover airtist: ${coverArtist}.`,
+ 'en-GB': ({ coverArtist }: { coverArtist: string }) => `Cover airtist: ${coverArtist}.`,
+ },
+ 'release-date': {
+ sco: ({ releaseDate }: { releaseDate: Date }) => {
+ const tDate = tSite['long-date']['sco'];
+ return `Releast: ${tDate({ date: releaseDate })}`;
+ },
+ 'en-GB': ({ releaseDate }: { releaseDate: Date }) => {
+ const tDate = tSite['long-date']['en-GB'] ?? tSite['long-date'][defaultLocale];
+ return `Released: ${tDate({ date: releaseDate })}`;
+ },
+ },
+};
+
+type Raw = typeof scotsounTranslations;
+export default scotsounTranslations as TranslationsDictionary<Raw>;
diff --git a/src/i18n/translations/pages/scotsounGallery.ts b/src/i18n/translations/pages/scotsounGallery.ts
new file mode 100644
index 0000000..58de8ef
--- /dev/null
+++ b/src/i18n/translations/pages/scotsounGallery.ts
@@ -0,0 +1,11 @@
+import type { TranslationsDictionary } from '$types/TranslationsDictionary';
+
+const scotsounGalleryTranslations = {
+ title: {
+ sco: () => 'Scotsoun',
+ 'en-GB': () => 'Scotsoun',
+ },
+};
+
+type Raw = typeof scotsounGalleryTranslations;
+export default scotsounGalleryTranslations as TranslationsDictionary<Raw>;
diff --git a/src/i18n/translations/pages/scotsounPaymentSuccessConfirmation.ts b/src/i18n/translations/pages/scotsounPaymentSuccessConfirmation.ts
new file mode 100644
index 0000000..3089a4d
--- /dev/null
+++ b/src/i18n/translations/pages/scotsounPaymentSuccessConfirmation.ts
@@ -0,0 +1,27 @@
+import type ScotsounId from '$types/ScotsounId';
+import type { TranslationsDictionary } from '$types/TranslationsDictionary';
+
+const scotsounPaymentSuccessConfirmation = {
+ title: {
+ sco: () => 'Payment Success',
+ 'en-GB': () => 'Payment Success',
+ },
+ 'payment-confirmation-message': {
+ sco: ({ scotsounId }: { scotsounId: ScotsounId }) => `
+ Gin ye hae been sent til this page, at means ye hae successfully ordered
+ Scotsoun ${scotsounId} an we’ll be pittin it in the post fur ye belyve!
+ `,
+ 'en-GB': ({ scotsounId }: { scotsounId: ScotsounId }) => `
+ If you have been directed to this page, that means you have successfully
+ ordered Scotsoun ${scotsounId} and we shall be putting it in the post for
+ you right away!
+ `,
+ },
+ 'back-button-text': {
+ sco: ({ scotsounId }: { scotsounId: ScotsounId }) => `Retour til Scotsoun ${scotsounId}`,
+ 'en-GB': ({ scotsounId }: { scotsounId: ScotsounId }) => `Return to Scotsoun ${scotsounId}`,
+ },
+};
+
+type Raw = typeof scotsounPaymentSuccessConfirmation;
+export default scotsounPaymentSuccessConfirmation as TranslationsDictionary<Raw>;
diff --git a/src/pages/[locale]/furthsettins/index.astro b/src/pages/[locale]/furthsettins/index.astro
index c6a805e..d7a9421 100644
--- a/src/pages/[locale]/furthsettins/index.astro
+++ b/src/pages/[locale]/furthsettins/index.astro
@@ -27,6 +27,14 @@ const t = translate(locale);
<p class="link-gallery__title">{t(tSite, { key: 'lallans' })}</p>
</a>
</li>
+ <li>
+ <a href="scotsoun" class="link link-gallery__container">
+ <div class="link-gallery__image">
+ <img src="/images/furthsettins/scotsoun.jpg" />
+ </div>
+ <p class="link-gallery__title">{t(tSite, { key: 'scotsoun' })}</p>
+ </a>
+ </li>
</ul>
</section>
</Page>
diff --git a/src/pages/[locale]/furthsettins/scotsoun/[scotsounId]/index.astro b/src/pages/[locale]/furthsettins/scotsoun/[scotsounId]/index.astro
new file mode 100644
index 0000000..5b5dc82
--- /dev/null
+++ b/src/pages/[locale]/furthsettins/scotsoun/[scotsounId]/index.astro
@@ -0,0 +1,27 @@
+---
+import Page from '$layouts/Page.astro';
+import localeStaticPaths from '$lib/localeStaticPaths';
+import tPage from '$i18n/translations/pages/scotsounGallery';
+import translate from '$i18n/translate';
+import type Locale from '$types/Locale';
+import { getScotsoun } from '$data/scotsoun';
+import type ScotsounId from '$types/ScotsounId';
+import Scotsoun from '$components/Scotsoun.astro';
+
+export async function getStaticPaths() {
+ const scotsounIds = Object.keys(getScotsoun) as `${ScotsounId}`[];
+ return scotsounIds.flatMap((n) =>
+ localeStaticPaths.map((p) => ({ ...p, params: { ...p.params, scotsounId: n } }))
+ );
+}
+
+const locale = Astro.params.locale as Locale;
+const scotsounId = Astro.params.scotsounId as ScotsounId;
+const t = translate(locale);
+
+const scotsoun = await getScotsoun[scotsounId]();
+---
+
+<Page locale={locale} title={t(tPage, { key: 'title' })}>
+ <Scotsoun scotsoun={scotsoun} locale={locale} />
+</Page>
diff --git a/src/pages/[locale]/furthsettins/scotsoun/[scotsounId]/payment-success-confirmation.astro b/src/pages/[locale]/furthsettins/scotsoun/[scotsounId]/payment-success-confirmation.astro
new file mode 100644
index 0000000..e4f62cb
--- /dev/null
+++ b/src/pages/[locale]/furthsettins/scotsoun/[scotsounId]/payment-success-confirmation.astro
@@ -0,0 +1,30 @@
+---
+import Page from '$layouts/Page.astro';
+import localeStaticPaths from '$lib/localeStaticPaths';
+import translate from '$i18n/translate';
+import tPage from '$i18n/translations/pages/scotsounPaymentSuccessConfirmation';
+import type Locale from '$types/Locale';
+import { getScotsoun } from '$data/scotsoun';
+import type ScotsounId from '$types/ScotsounId';
+
+export async function getStaticPaths() {
+ const scotsounIds = Object.keys(getScotsoun) as `${ScotsounId}`[];
+ return scotsounIds.flatMap((n) =>
+ localeStaticPaths.map((p) => ({ ...p, params: { ...p.params, issueNumber: n } }))
+ );
+}
+
+const locale = Astro.params.locale as Locale;
+const scotsounId = Astro.params.scotsounId as ScotsounId;
+const t = translate(locale);
+---
+
+<Page locale={locale} title={t(tPage, { key: 'title' })}>
+ <section>
+ <h1>{t(tPage, { key: 'title' })}</h1>
+ <p>{t(tPage, { key: 'payment-confirmation-message', scotsounId })}</p>
+ <a class="link" href="./">
+ {t(tPage, { key: 'back-button-text', scotsounId })}
+ </a>
+ </section>
+</Page>
diff --git a/src/pages/[locale]/furthsettins/scotsoun/index.astro b/src/pages/[locale]/furthsettins/scotsoun/index.astro
new file mode 100644
index 0000000..cd2e1fe
--- /dev/null
+++ b/src/pages/[locale]/furthsettins/scotsoun/index.astro
@@ -0,0 +1,22 @@
+---
+import Page from '$layouts/Page.astro';
+import localeStaticPaths from '$lib/localeStaticPaths';
+import translate from '$i18n/translate';
+import tPage from '$i18n/translations/pages/scotsounGallery';
+import type Locale from '$types/Locale';
+import ScotsounCdGallery from '$components/ScotsounCdGallery.astro';
+
+export async function getStaticPaths() {
+ return localeStaticPaths;
+}
+
+const locale = Astro.params.locale as Locale;
+const t = translate(locale);
+---
+
+<Page locale={locale} title={t(tPage, { key: 'title' })}>
+ <section class="section--full-width">
+ <h1>Scotsoun</h1>
+ <ScotsounCdGallery />
+ </section>
+</Page>