@turnipxenon/pineapple 5.3.0-alpha.5 → 5.3.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/external/paraglide/messages/_index.d.ts +8 -2
- package/dist/external/paraglide/messages/_index.d.ts.map +1 -1
- package/dist/external/paraglide/messages/_index.js +50 -2
- package/dist/external/paraglide/messages/en.d.ts +5 -0
- package/dist/external/paraglide/messages/en.d.ts.map +1 -0
- package/dist/external/paraglide/messages/en.js +10 -0
- package/dist/external/paraglide/messages/fr.d.ts +5 -0
- package/dist/external/paraglide/messages/fr.d.ts.map +1 -0
- package/dist/external/paraglide/messages/fr.js +10 -0
- package/dist/external/paraglide/messages/tl.d.ts +5 -0
- package/dist/external/paraglide/messages/tl.d.ts.map +1 -0
- package/dist/external/paraglide/messages/tl.js +7 -0
- package/dist/modules/parsnip/ParsnipEmbedWikilink.svelte +10 -0
- package/dist/modules/parsnip/ParsnipEmbedWikilink.svelte.d.ts.map +1 -1
- package/dist/modules/parsnip/ParsnipEntry.d.ts +2 -0
- package/dist/modules/parsnip/ParsnipEntry.d.ts.map +1 -1
- package/dist/modules/parsnip/ParsnipOverall.d.ts +2 -0
- package/dist/modules/parsnip/ParsnipOverall.d.ts.map +1 -1
- package/dist/modules/parsnip/external-images/ParsnipImage.svelte +4 -1
- package/dist/modules/parsnip/route-util/ParsnipBlog.svelte +10 -2
- package/dist/modules/parsnip/route-util/ParsnipBlog.svelte.d.ts.map +1 -1
- package/dist/modules/parsnip/route-util/slugPageServerLoad.d.ts.map +1 -1
- package/dist/modules/parsnip/route-util/slugPageServerLoad.js +28 -2
- package/dist/ui/components/FourPartCard.svelte +11 -3
- package/dist/ui/modules/NavigationMenu/NavigationMenu.svelte +114 -35
- package/dist/ui/modules/NavigationMenu/NavigationMenu.svelte.d.ts.map +1 -1
- package/dist/ui/modules/NavigationMenu/PageMeta.d.ts +11 -0
- package/dist/ui/modules/NavigationMenu/PageMeta.d.ts.map +1 -1
- package/dist/ui/templates/PinyaPageLayout/PinyaPageLayout.svelte +1 -1
- package/dist/ui/templates/blog_template/BlogTemplate.svelte +3 -3
- package/dist/ui/templates/blog_template/BlogTemplateInner.svelte +51 -14
- package/dist/ui/templates/blog_template/BlogTemplateInner.svelte.d.ts.map +1 -1
- package/dist/util/util.d.ts +1 -0
- package/dist/util/util.d.ts.map +1 -1
- package/dist/util/util.js +18 -0
- package/package.json +1 -1
- package/dist/external/paraglide/messages/example_message.d.ts +0 -6
- package/dist/external/paraglide/messages/example_message.d.ts.map +0 -1
- package/dist/external/paraglide/messages/example_message.js +0 -38
- package/dist/external/paraglide/messages/settings.d.ts +0 -4
- package/dist/external/paraglide/messages/settings.d.ts.map +0 -1
- package/dist/external/paraglide/messages/settings.js +0 -37
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
1
|
+
export function example_message(inputs: {
|
|
2
|
+
username: NonNullable<unknown>;
|
|
3
|
+
}, options?: {
|
|
4
|
+
locale?: "en" | "fr" | "tl";
|
|
5
|
+
}): string;
|
|
6
|
+
export function settings(inputs?: {}, options?: {
|
|
7
|
+
locale?: "en" | "fr" | "tl";
|
|
8
|
+
}): string;
|
|
3
9
|
//# sourceMappingURL=_index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_index.d.ts","sourceRoot":"","sources":["../../../../src/lib/external/paraglide/messages/_index.js"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"_index.d.ts","sourceRoot":"","sources":["../../../../src/lib/external/paraglide/messages/_index.js"],"names":[],"mappings":"AAkBO,wCALG;IAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,YAClC;IAAE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAAE,GAC7B,MAAM,CAYjB;AAcM,kCALG,EAAE,YACF;IAAE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAAE,GAC7B,MAAM,CAYjB"}
|
|
@@ -1,3 +1,51 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { getLocale, trackMessageCall, experimentalMiddlewareLocaleSplitting, isServer } from "../runtime.js"
|
|
3
|
+
import * as en from "./en.js"
|
|
4
|
+
import * as fr from "./fr.js"
|
|
5
|
+
import * as tl from "./tl.js"
|
|
6
|
+
/**
|
|
7
|
+
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
8
|
+
*
|
|
9
|
+
* - Changing this function will be over-written by the next build.
|
|
10
|
+
*
|
|
11
|
+
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
12
|
+
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
13
|
+
*
|
|
14
|
+
* @param {{ username: NonNullable<unknown> }} inputs
|
|
15
|
+
* @param {{ locale?: "en" | "fr" | "tl" }} options
|
|
16
|
+
* @returns {string}
|
|
17
|
+
*/
|
|
18
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
19
|
+
export const example_message = (inputs, options = {}) => {
|
|
20
|
+
if (experimentalMiddlewareLocaleSplitting && isServer === false) {
|
|
21
|
+
return /** @type {any} */ (globalThis).__paraglide_ssr.example_message(inputs)
|
|
22
|
+
}
|
|
23
|
+
const locale = options.locale ?? getLocale()
|
|
24
|
+
trackMessageCall("example_message", locale)
|
|
25
|
+
if (locale === "en") return en.example_message(inputs)
|
|
26
|
+
if (locale === "fr") return fr.example_message(inputs)
|
|
27
|
+
return tl.example_message(inputs)
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
31
|
+
*
|
|
32
|
+
* - Changing this function will be over-written by the next build.
|
|
33
|
+
*
|
|
34
|
+
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
35
|
+
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
36
|
+
*
|
|
37
|
+
* @param {{}} inputs
|
|
38
|
+
* @param {{ locale?: "en" | "fr" | "tl" }} options
|
|
39
|
+
* @returns {string}
|
|
40
|
+
*/
|
|
41
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
42
|
+
export const settings = (inputs = {}, options = {}) => {
|
|
43
|
+
if (experimentalMiddlewareLocaleSplitting && isServer === false) {
|
|
44
|
+
return /** @type {any} */ (globalThis).__paraglide_ssr.settings(inputs)
|
|
45
|
+
}
|
|
46
|
+
const locale = options.locale ?? getLocale()
|
|
47
|
+
trackMessageCall("settings", locale)
|
|
48
|
+
if (locale === "en") return en.settings(inputs)
|
|
49
|
+
if (locale === "fr") return fr.settings(inputs)
|
|
50
|
+
return tl.settings(inputs)
|
|
51
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../src/lib/external/paraglide/messages/en.js"],"names":[],"mappings":"AAGA,8BAA0C,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,KAAK,MAAM,CAE9F;AAEF,uBAAmC,CAAC,MAAM,EAAE,EAAE,KAAK,MAAM,CAEvD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const example_message = /** @type {(inputs: { username: NonNullable<unknown> }) => string} */ (i) => {
|
|
5
|
+
return `Hello world ${i.username}`
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const settings = /** @type {(inputs: {}) => string} */ () => {
|
|
9
|
+
return `Settings`
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../../../src/lib/external/paraglide/messages/fr.js"],"names":[],"mappings":"AAGA,8BAA0C,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,KAAK,MAAM,CAE9F;AAEF,uBAAmC,CAAC,MAAM,EAAE,EAAE,KAAK,MAAM,CAEvD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const example_message = /** @type {(inputs: { username: NonNullable<unknown> }) => string} */ (i) => {
|
|
5
|
+
return `Bonjour ${i.username}`
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const settings = /** @type {(inputs: {}) => string} */ () => {
|
|
9
|
+
return `Paramètres`
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tl.d.ts","sourceRoot":"","sources":["../../../../src/lib/external/paraglide/messages/tl.js"],"names":[],"mappings":"AAGA,8BAA0C,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,KAAK,MAAM,CAE9F"}
|
|
@@ -17,3 +17,13 @@
|
|
|
17
17
|
<!-- todo(turnip): determine appropriate media -->
|
|
18
18
|
<!-- todo(turnip): add alt text -->
|
|
19
19
|
<img src={`${getCmsBaseUrl()}/${wikilink.fileAccessor.basePath}`} alt=""/>
|
|
20
|
+
|
|
21
|
+
<style>
|
|
22
|
+
img {
|
|
23
|
+
display: block;
|
|
24
|
+
width: auto;
|
|
25
|
+
max-height: min(50vh, 24lh);
|
|
26
|
+
margin: auto;
|
|
27
|
+
object-fit: contain;
|
|
28
|
+
}
|
|
29
|
+
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParsnipEmbedWikilink.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/modules/parsnip/ParsnipEmbedWikilink.svelte.ts"],"names":[],"mappings":"AAMC,UAAU,aAAa;IACtB,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAA;CACD;AACD,KAAK,gBAAgB,GAAI;IAAE,QAAQ,EAAE,aAAa,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ParsnipEmbedWikilink.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/modules/parsnip/ParsnipEmbedWikilink.svelte.ts"],"names":[],"mappings":"AAMC,UAAU,aAAa;IACtB,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAA;CACD;AACD,KAAK,gBAAgB,GAAI;IAAE,QAAQ,EAAE,aAAa,CAAA;CAAE,CAAC;AAgBtD,QAAA,MAAM,oBAAoB,sDAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { FoodReviewJson } from "../../ui/modules/index";
|
|
1
2
|
import type { ParsnipEntrySummary } from "./ParsnipOverall";
|
|
2
3
|
import type { Root } from "mdast";
|
|
3
4
|
export interface ParsnipEntry extends ParsnipEntrySummary {
|
|
4
5
|
ast: {
|
|
5
6
|
ast: Root;
|
|
6
7
|
};
|
|
8
|
+
foodReviewJson: FoodReviewJson;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=ParsnipEntry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParsnipEntry.d.ts","sourceRoot":"","sources":["../../../src/lib/modules/parsnip/ParsnipEntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACxD,GAAG,EAAE;QAAE,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ParsnipEntry.d.ts","sourceRoot":"","sources":["../../../src/lib/modules/parsnip/ParsnipEntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACxD,GAAG,EAAE;QAAE,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParsnipOverall.d.ts","sourceRoot":"","sources":["../../../src/lib/modules/parsnip/ParsnipOverall.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC3D;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE;QACL;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;KACd,CAAA;CACD;AAED,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB"}
|
|
1
|
+
{"version":3,"file":"ParsnipOverall.d.ts","sourceRoot":"","sources":["../../../src/lib/modules/parsnip/ParsnipOverall.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC3D;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE;QACL;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;KACd,CAAA;CACD;AAED,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -13,10 +13,18 @@
|
|
|
13
13
|
title: parsnipEntry.basename,
|
|
14
14
|
datePublished: new Date(parsnipEntry.stat.ctime).toLocaleString(),
|
|
15
15
|
lastUpdated: new Date(parsnipEntry.stat.mtime).toLocaleString(),
|
|
16
|
-
priority: 0
|
|
16
|
+
priority: 0,
|
|
17
|
+
foodReviewJson: parsnipEntry.foodReviewJson,
|
|
17
18
|
});
|
|
19
|
+
|
|
18
20
|
</script>
|
|
19
21
|
|
|
20
|
-
<
|
|
22
|
+
<svelte:head>
|
|
23
|
+
{#if parsnipEntry.foodReviewJson}
|
|
24
|
+
{@html `<script type="application/ld+json">${JSON.stringify(parsnipEntry.foodReviewJson)}</script>`}
|
|
25
|
+
{/if}
|
|
26
|
+
</svelte:head>
|
|
27
|
+
|
|
28
|
+
<BlogTemplate {pageMeta}>
|
|
21
29
|
<ParsnipBlockChildren blockChildren={parsnipEntry.ast.ast.children} />
|
|
22
30
|
</BlogTemplate>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParsnipBlog.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/modules/parsnip/route-util/ParsnipBlog.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnD,KAAK,gBAAgB,GAAI;IAAE,YAAY,EAAE,YAAY,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ParsnipBlog.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/modules/parsnip/route-util/ParsnipBlog.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnD,KAAK,gBAAgB,GAAI;IAAE,YAAY,EAAE,YAAY,CAAA;CAAE,CAAC;AAkCzD,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slugPageServerLoad.d.ts","sourceRoot":"","sources":["../../../../src/lib/modules/parsnip/route-util/slugPageServerLoad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uDAAuD,CAAC;AAKvF,eAAO,MAAM,kBAAkB,GAAU,YAAY;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;;;
|
|
1
|
+
{"version":3,"file":"slugPageServerLoad.d.ts","sourceRoot":"","sources":["../../../../src/lib/modules/parsnip/route-util/slugPageServerLoad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uDAAuD,CAAC;AAKvF,eAAO,MAAM,kBAAkB,GAAU,YAAY;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;;;EA2FhF,CAAC"}
|
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { getCmsBaseUrl } from "../../../util/env-getter";
|
|
11
11
|
import { error } from "@sveltejs/kit";
|
|
12
12
|
export const slugPageServerLoad = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params }) {
|
|
13
|
+
var _b;
|
|
13
14
|
const baseUrl = getCmsBaseUrl();
|
|
14
15
|
const mainMeta = yield fetch(`${baseUrl}/main.meta.json`);
|
|
15
16
|
if (!mainMeta.ok) {
|
|
@@ -30,7 +31,10 @@ export const slugPageServerLoad = (_a) => __awaiter(void 0, [_a], void 0, functi
|
|
|
30
31
|
parsnipEntry.ast.ast.children.forEach(child => {
|
|
31
32
|
if (child.type === "paragraph"
|
|
32
33
|
&& child.children.length === 1
|
|
33
|
-
&& child.children[0].type === "image"
|
|
34
|
+
&& (child.children[0].type === "image"
|
|
35
|
+
|| (child.children[0].type === "link" &&
|
|
36
|
+
(child.children[0].url.startsWith("https://photos.")
|
|
37
|
+
|| child.children[0].url.startsWith("https://rabiole."))))) {
|
|
34
38
|
imageCollection.push(child.children[0]);
|
|
35
39
|
}
|
|
36
40
|
else if (imageCollection.length > 0) {
|
|
@@ -45,13 +49,35 @@ export const slugPageServerLoad = (_a) => __awaiter(void 0, [_a], void 0, functi
|
|
|
45
49
|
newChildren.push(child);
|
|
46
50
|
}
|
|
47
51
|
});
|
|
52
|
+
if (imageCollection.length > 0) {
|
|
53
|
+
newChildren.push({
|
|
54
|
+
"type": "imageCollection",
|
|
55
|
+
children: imageCollection
|
|
56
|
+
});
|
|
57
|
+
}
|
|
48
58
|
parsnipEntry.ast.ast.children = newChildren;
|
|
59
|
+
let imageUrl = parsnipEntry.preview ? parsnipEntry.preview : undefined;
|
|
60
|
+
if (imageUrl && !imageUrl.includes("https://")) {
|
|
61
|
+
imageUrl = `${parsnipOverall.baseUrl}/${parsnipEntry.preview}`;
|
|
62
|
+
}
|
|
49
63
|
const meta = {
|
|
50
64
|
title: parsnipEntry.basename,
|
|
51
65
|
ogTitle: parsnipEntry.basename,
|
|
52
66
|
ogDescription: parsnipEntry.tagline,
|
|
53
|
-
ogImage:
|
|
67
|
+
ogImage: imageUrl ? [imageUrl] : undefined
|
|
54
68
|
};
|
|
69
|
+
// process review metadata
|
|
70
|
+
if ((_b = parsnipEntry.tags) === null || _b === void 0 ? void 0 : _b.includes('food-review')) {
|
|
71
|
+
// parsnipEntry.foodReviewJson =
|
|
72
|
+
try {
|
|
73
|
+
const foodReviewResp = yield fetch(`${baseUrl}/${entryMeta.path.replace('.ast.', '.ld.')}`);
|
|
74
|
+
parsnipEntry.foodReviewJson = yield foodReviewResp.json();
|
|
75
|
+
parsnipEntry.datePublished = parsnipEntry.foodReviewJson.datePublished;
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
console.error(`Failed to fetch review data for ${entryMeta.path}: ${err}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
55
81
|
return {
|
|
56
82
|
parsnipEntry,
|
|
57
83
|
meta
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
</script>
|
|
22
22
|
|
|
23
23
|
<PinyaCard {...props} class={`pinya-four-part-card ${props.class}`}>
|
|
24
|
-
<section class="mb-6">
|
|
24
|
+
<section class="mb-6 flex-wrapper">
|
|
25
25
|
|
|
26
26
|
{#if headerCover}
|
|
27
27
|
<section class="card-header-cover w-full">
|
|
@@ -53,13 +53,21 @@
|
|
|
53
53
|
padding: 0;
|
|
54
54
|
|
|
55
55
|
.card-header-cover > img {
|
|
56
|
-
border-
|
|
57
|
-
border-top-left-radius: var(--radius-xl);
|
|
56
|
+
border-radius: calc(var(--radius-xl) - 2px);
|
|
58
57
|
}
|
|
58
|
+
|
|
59
|
+
word-wrap: break-word;
|
|
60
|
+
-webkit-hyphens: auto;
|
|
61
|
+
-moz-hyphens: auto;
|
|
62
|
+
-ms-hyphens: auto;
|
|
63
|
+
hyphens: auto;
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
html.dark .pinya-four-part-card {
|
|
62
67
|
border: 0;
|
|
68
|
+
.card-header-cover > img {
|
|
69
|
+
border-radius: var(--radius-xl);
|
|
70
|
+
}
|
|
63
71
|
}
|
|
64
72
|
}
|
|
65
73
|
</style>
|
|
@@ -3,17 +3,21 @@
|
|
|
3
3
|
<script lang="ts">
|
|
4
4
|
import { browser } from "$app/environment";
|
|
5
5
|
import { page } from "$app/state";
|
|
6
|
+
import { localizeHref } from "../../../external/paraglide/runtime.js";
|
|
6
7
|
import type { ParsnipOverall } from "../../../modules/parsnip/ParsnipOverall";
|
|
8
|
+
import { FourPartCard } from "../../components/index";
|
|
9
|
+
import { PinyaCard } from "../../elements/index";
|
|
10
|
+
import Placeholder from "../../elements/Placeholder.svelte";
|
|
7
11
|
import NavigationControl from "./NavigationControl.svelte";
|
|
8
12
|
import {
|
|
9
13
|
DefaultPageMetaSorter,
|
|
14
|
+
type FoodReviewJson,
|
|
10
15
|
type PageMeta,
|
|
11
16
|
parsePageMeta,
|
|
12
17
|
type ParsePageMetaCompareFn
|
|
13
18
|
} from "./PageMeta";
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
import { localizeHref } from "../../../external/paraglide/runtime.js";
|
|
19
|
+
import { renderStar } from "../../../util/util";
|
|
20
|
+
import { SvelteMap } from "svelte/reactivity";
|
|
17
21
|
|
|
18
22
|
interface Props {
|
|
19
23
|
fileList: Record<string, unknown>;
|
|
@@ -73,7 +77,7 @@
|
|
|
73
77
|
const fileBasedList = parsePageMeta(fileList, jsonList, imageMap, compareFn);
|
|
74
78
|
const parsnipBasedList = parsnipOverall?.files.map(pf => {
|
|
75
79
|
let imageUrl = pf.preview;
|
|
76
|
-
if (imageUrl && !imageUrl.includes(
|
|
80
|
+
if (imageUrl && !imageUrl.includes("https://")) {
|
|
77
81
|
imageUrl = `${parsnipOverall.baseUrl}/${pf.preview}`;
|
|
78
82
|
}
|
|
79
83
|
const meta: PageMeta = {
|
|
@@ -83,8 +87,8 @@
|
|
|
83
87
|
tags: pf.tags,
|
|
84
88
|
imageUrl,
|
|
85
89
|
imageAlt: pf.previewAlt,
|
|
86
|
-
datePublished: pf.stat.ctime ? new Date(pf.stat.ctime).toISOString().split("T")[0] : undefined,
|
|
87
|
-
lastUpdated: pf.stat.mtime ? new Date(pf.stat.mtime).toISOString().split("T")[0] : undefined,
|
|
90
|
+
datePublished: pf.datePublished ?? pf.stat.ctime ? new Date(pf.stat.ctime).toISOString().split("T")[0] : undefined,
|
|
91
|
+
lastUpdated: pf.lastUpdated ?? pf.stat.mtime ? new Date(pf.stat.mtime).toISOString().split("T")[0] : undefined,
|
|
88
92
|
description: pf.tagline,
|
|
89
93
|
priority: 0
|
|
90
94
|
};
|
|
@@ -125,6 +129,33 @@
|
|
|
125
129
|
}
|
|
126
130
|
});
|
|
127
131
|
let visiblePages = $derived(filteredPageFlatList.slice(currentIndex * pageSize, (currentIndex * pageSize) + pageSize));
|
|
132
|
+
|
|
133
|
+
let ratingCache = new SvelteMap<string, string>();
|
|
134
|
+
|
|
135
|
+
$effect(() => {
|
|
136
|
+
if (!browser || !parsnipOverall) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
visiblePages.forEach(vp => {
|
|
141
|
+
if (vp.tags.includes("food-review") && !ratingCache.has(vp.relativeLink)) {
|
|
142
|
+
ratingCache.set(vp.relativeLink, "");
|
|
143
|
+
const parsnipMetadata = parsnipOverall.files.find(f => f.basename == vp.title);
|
|
144
|
+
|
|
145
|
+
if (parsnipMetadata) {
|
|
146
|
+
fetch(`${parsnipOverall.baseUrl}/${parsnipMetadata.path}`.replaceAll(".ast.", ".ld."))
|
|
147
|
+
.then(data => data.json())
|
|
148
|
+
.then((data: FoodReviewJson) => {
|
|
149
|
+
ratingCache.set(vp.relativeLink, `${renderStar(data.reviewRating.ratingValue)}`);
|
|
150
|
+
}).catch(err => {
|
|
151
|
+
console.warn(err);
|
|
152
|
+
}).finally(() => {
|
|
153
|
+
console.log(`Rating fetched for ${vp.relativeLink}: ${ratingCache.get(vp.relativeLink)}`);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
});
|
|
128
159
|
</script>
|
|
129
160
|
|
|
130
161
|
<div class="navigation-wrapper">
|
|
@@ -158,7 +189,7 @@
|
|
|
158
189
|
<Placeholder classes="h-4 w-5/6 mb-2" />
|
|
159
190
|
</div>
|
|
160
191
|
</PinyaCard>
|
|
161
|
-
<PinyaCard widthClass="w-full" className="navigation-element" paddingClass=""
|
|
192
|
+
<PinyaCard widthClass="w-full" className="navigation-element" paddingClass="" flexClass="">
|
|
162
193
|
<div class="blurb-text">
|
|
163
194
|
<Placeholder classes="h-8 w-2/3 mb-4" />
|
|
164
195
|
<Placeholder classes="h-4 w-1/2 mb-2" />
|
|
@@ -170,33 +201,43 @@
|
|
|
170
201
|
<!-- all the misc routes-->
|
|
171
202
|
{#each visiblePages as pageMeta (pageMeta.title)}
|
|
172
203
|
{@const fullPath = `${parentSubpath}${pageMeta.relativeLink}`}
|
|
204
|
+
|
|
205
|
+
<!-- https://github.com/sveltejs/svelte/issues/11115#issuecomment-2048556800 -->
|
|
206
|
+
{#snippet headerCover()}
|
|
207
|
+
<img src={pageMeta.imageUrl}
|
|
208
|
+
class="pinya-card-image"
|
|
209
|
+
alt={pageMeta.imageAlt ?? "placeholder alt text please replace me or report me!"} />
|
|
210
|
+
{/snippet}
|
|
211
|
+
|
|
173
212
|
<!-- thank you so much to https://www.reddit.com/r/sveltejs/comments/yoe6in/comment/jvaj1ez -->
|
|
174
213
|
<a href={localizeHref(fullPath)} class="card-anchor a-as-btn" data-sveltekit-reload>
|
|
175
|
-
<
|
|
214
|
+
<FourPartCard
|
|
176
215
|
widthClass="w-full"
|
|
177
216
|
className="navigation-element"
|
|
178
217
|
flexClass=""
|
|
179
218
|
paddingClass=""
|
|
219
|
+
headerCover={pageMeta.imageUrl ? headerCover : undefined}
|
|
180
220
|
>
|
|
181
|
-
{#if pageMeta.imageUrl}
|
|
182
|
-
<img src={pageMeta.imageUrl}
|
|
183
|
-
class="pinya-card-image"
|
|
184
|
-
alt={pageMeta.imageAlt ?? "placeholder alt text please replace me or report me!"} />
|
|
185
|
-
{/if}
|
|
186
221
|
<section class="blurb-text">
|
|
187
222
|
<h2>{pageMeta.title}</h2>
|
|
188
223
|
<p>Published: {pageMeta.datePublished ?? "N/A"} | Last updated: {pageMeta.lastUpdated ?? "N/A"}</p>
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
{#each pageMeta.tags as tagValue, idx (idx)}
|
|
193
|
-
<span class="badge tag-container">{tagValue}</span>
|
|
194
|
-
{/each}
|
|
195
|
-
{:else}
|
|
196
|
-
None
|
|
224
|
+
|
|
225
|
+
{#if pageMeta.tags.includes('food-review')}
|
|
226
|
+
<p>{ratingCache.get(pageMeta.relativeLink)}</p>
|
|
197
227
|
{/if}
|
|
228
|
+
<p class="blurb-description">{pageMeta.description ?? ""}</p>
|
|
229
|
+
<div>
|
|
230
|
+
Tags:
|
|
231
|
+
{#if (pageMeta.tags && pageMeta.tags.length !== 0)}
|
|
232
|
+
{#each pageMeta.tags as tagValue, idx (idx)}
|
|
233
|
+
<span class="badge tag-container">{tagValue}</span>
|
|
234
|
+
{/each}
|
|
235
|
+
{:else}
|
|
236
|
+
None
|
|
237
|
+
{/if}
|
|
238
|
+
</div>
|
|
198
239
|
</section>
|
|
199
|
-
</
|
|
240
|
+
</FourPartCard>
|
|
200
241
|
</a>
|
|
201
242
|
{/each}
|
|
202
243
|
|
|
@@ -224,7 +265,6 @@
|
|
|
224
265
|
max-height: 20rem;
|
|
225
266
|
width: 100%;
|
|
226
267
|
flex-basis: 100%;
|
|
227
|
-
border-radius: var(--theme-rounded-container) var(--theme-rounded-container) 0 0;
|
|
228
268
|
}
|
|
229
269
|
|
|
230
270
|
:global(.navigation-element.pinya-card) {
|
|
@@ -242,21 +282,51 @@
|
|
|
242
282
|
}
|
|
243
283
|
}
|
|
244
284
|
|
|
245
|
-
:global
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
285
|
+
:global {
|
|
286
|
+
.navigation-element.pinya-card:not(.pinya-four-part-card), .navigation-element .flex-wrapper {
|
|
287
|
+
/* todo: migration */
|
|
288
|
+
/*@apply btn card card-hover bg-surface-100 dark:bg-surface-900;*/
|
|
289
|
+
container-type: inline-size;
|
|
290
|
+
display: flex;
|
|
291
|
+
justify-content: stretch;
|
|
292
|
+
align-items: stretch;
|
|
293
|
+
padding: 0;
|
|
294
|
+
flex-wrap: wrap;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.navigation-element.pinya-four-part-card {
|
|
298
|
+
.w-full {
|
|
299
|
+
width: unset;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.mb-6 {
|
|
303
|
+
margin-bottom: unset;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.flex-wrapper > .card-content {
|
|
307
|
+
flex: 99 1 32em;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.flex-wrapper > .card-header-cover {
|
|
311
|
+
flex: 1 1 12lh;
|
|
312
|
+
max-height: 12lh;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.pinya-card-image {
|
|
316
|
+
border-radius: var(--radius-xl);
|
|
317
|
+
max-height: unset;
|
|
318
|
+
max-width: unset;
|
|
319
|
+
height: 100%;
|
|
320
|
+
width: 100%;
|
|
321
|
+
object-fit: cover;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
253
324
|
}
|
|
254
325
|
|
|
255
326
|
img {
|
|
256
327
|
height: 20em;
|
|
257
328
|
object-fit: cover;
|
|
258
329
|
padding: var(--theme-border-base);
|
|
259
|
-
border-radius: var(--theme-rounded-container) 0 0 var(--theme-rounded-container);
|
|
260
330
|
}
|
|
261
331
|
|
|
262
332
|
.navigation-component {
|
|
@@ -272,10 +342,13 @@
|
|
|
272
342
|
}
|
|
273
343
|
|
|
274
344
|
.blurb-text {
|
|
275
|
-
padding:
|
|
345
|
+
padding-top: 1lh;
|
|
346
|
+
padding-bottom: 1lh;
|
|
276
347
|
grow: 1;
|
|
277
348
|
white-space: initial;
|
|
278
349
|
min-width: 0;
|
|
350
|
+
display: flex;
|
|
351
|
+
flex-direction: column;
|
|
279
352
|
}
|
|
280
353
|
|
|
281
354
|
.navigation-wrapper {
|
|
@@ -323,7 +396,13 @@
|
|
|
323
396
|
text-align: start;
|
|
324
397
|
}
|
|
325
398
|
|
|
326
|
-
.
|
|
327
|
-
|
|
399
|
+
.blurb-description {
|
|
400
|
+
flex-shrink: 1;
|
|
401
|
+
display: -webkit-box;
|
|
402
|
+
-webkit-box-orient: vertical;
|
|
403
|
+
-webkit-line-clamp: 3; /* Number of lines to show */
|
|
404
|
+
line-clamp: 3; /* Number of lines to show */
|
|
405
|
+
overflow: hidden;
|
|
406
|
+
text-overflow: ellipsis; /* Optional, but good practice */
|
|
328
407
|
}
|
|
329
408
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationMenu.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/NavigationMenu/NavigationMenu.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NavigationMenu.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/NavigationMenu/NavigationMenu.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAK1E,OAAO,EAKL,KAAK,sBAAsB,EAC3B,MAAM,yCAAyC,CAAC;AAKjD,UAAU,KAAK;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,GAAG,sBAAsB,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AA4NF,QAAA,MAAM,cAAc,oGAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import type { ParsnipOverall } from "../../../modules/parsnip/ParsnipOverall";
|
|
2
|
+
export interface FoodReviewJson {
|
|
3
|
+
datePublished: string;
|
|
4
|
+
reviewRating: {
|
|
5
|
+
ratingValue: number;
|
|
6
|
+
};
|
|
7
|
+
itemReviewed: {
|
|
8
|
+
url: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
2
11
|
export interface PageMeta {
|
|
3
12
|
datePublished?: string;
|
|
4
13
|
description?: string;
|
|
@@ -46,6 +55,7 @@ export interface PageMeta {
|
|
|
46
55
|
* all pages with the same priority will be sorted based on date, description, title, then relative link
|
|
47
56
|
*/
|
|
48
57
|
priority: number;
|
|
58
|
+
foodReviewJson: FoodReviewJson;
|
|
49
59
|
}
|
|
50
60
|
export interface SimplePageMeta {
|
|
51
61
|
datePublished?: string;
|
|
@@ -83,6 +93,7 @@ export interface SimplePageMeta {
|
|
|
83
93
|
* title defaults to the directory name if it's an empty string.
|
|
84
94
|
*/
|
|
85
95
|
title: string;
|
|
96
|
+
foodReviewJson?: FoodReviewJson;
|
|
86
97
|
}
|
|
87
98
|
/**
|
|
88
99
|
* todo: doc
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageMeta.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/NavigationMenu/PageMeta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,MAAM,WAAW,QAAQ;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,QAAQ,EAAE,CAAC;IAExB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PageMeta.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/modules/NavigationMenu/PageMeta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,MAAM,WAAW,cAAc;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,EAAE;QACb,GAAG,EAAE,MAAM,CAAA;KACX,CAAC;CACF;AAED,MAAM,WAAW,QAAQ;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,QAAQ,EAAE,CAAC;IAExB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,cAAc,CAAC;CAChC;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAY,QAAQ,EAAE,EAAE,OAAO,QAAQ,KAAG,OAiB5E,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC;AAE5E,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChD,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,YAAY,sBAAsB,KAAG,QAAQ,EAoG3D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM;IACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB,KAAG,QAAQ,EA8CX,CAAC;AAKF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,sBA6BnC,CAAC"}
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
let initialDialogState = false;
|
|
32
32
|
|
|
33
|
-
setIgnoreOverlayOverride(true);
|
|
33
|
+
setIgnoreOverlayOverride({ value: true });
|
|
34
34
|
|
|
35
35
|
onMount(() => {
|
|
36
36
|
initialDialogState = $enableUniversalOverlaySvelte4;
|
|
@@ -49,13 +49,13 @@
|
|
|
49
49
|
|
|
50
50
|
{#if shouldFillWholePage}
|
|
51
51
|
<div class="whole-page">
|
|
52
|
-
<BlogTemplateInner
|
|
52
|
+
<BlogTemplateInner {pageMeta}>
|
|
53
53
|
{@render children?.()}
|
|
54
54
|
</BlogTemplateInner>
|
|
55
55
|
</div>
|
|
56
56
|
{:else}
|
|
57
57
|
<PinyaCard {includeDataNoSnippet} widthClass="blog-template">
|
|
58
|
-
<BlogTemplateInner
|
|
58
|
+
<BlogTemplateInner {pageMeta}>
|
|
59
59
|
{@render children?.()}
|
|
60
60
|
</BlogTemplateInner>
|
|
61
61
|
</PinyaCard>
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { localizeHref } from "../../../external/paraglide/runtime.js";
|
|
5
5
|
import type { SimplePageMeta } from "../../modules/NavigationMenu/index";
|
|
6
6
|
import { getWebBaseUrl } from "../../../util/env-getter";
|
|
7
|
+
import { renderStar } from "../../../util/util";
|
|
7
8
|
import { SvelteURLSearchParams } from "svelte/reactivity";
|
|
8
9
|
|
|
9
10
|
interface Props {
|
|
@@ -19,6 +20,9 @@
|
|
|
19
20
|
query.append("tags", tag);
|
|
20
21
|
return `${localizeHref(getWebBaseUrl())}?${query.toString()}`;
|
|
21
22
|
});
|
|
23
|
+
|
|
24
|
+
// todo: improve graphics lol
|
|
25
|
+
let ratingsRenderer = $derived(renderStar(pageMeta.foodReviewJson?.reviewRating.ratingValue ?? 1));
|
|
22
26
|
</script>
|
|
23
27
|
|
|
24
28
|
<article>
|
|
@@ -26,20 +30,34 @@
|
|
|
26
30
|
{#if pageMeta.title}
|
|
27
31
|
<h1>{pageMeta.title}</h1>
|
|
28
32
|
{/if}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
<div id="hgroup-wrapper">
|
|
34
|
+
{#if pageMeta.datePublished}
|
|
35
|
+
<p>Published: {pageMeta.datePublished}</p>
|
|
36
|
+
{/if}
|
|
37
|
+
{#if pageMeta.lastUpdated}
|
|
38
|
+
<p>Last updated: {pageMeta.lastUpdated}</p>
|
|
39
|
+
{/if}
|
|
40
|
+
{#if pageMeta.foodReviewJson}
|
|
41
|
+
<p>
|
|
42
|
+
Ratings: {ratingsRenderer}
|
|
43
|
+
</p>
|
|
44
|
+
{/if}
|
|
45
|
+
{#if pageMeta.foodReviewJson?.itemReviewed.url}
|
|
46
|
+
<p>
|
|
47
|
+
<a href={pageMeta.foodReviewJson.itemReviewed.url}
|
|
48
|
+
rel="external"
|
|
49
|
+
target="_blank">{pageMeta.foodReviewJson?.itemReviewed.url}</a>
|
|
50
|
+
</p>
|
|
51
|
+
{/if}
|
|
52
|
+
{#if pageMeta.tags.length > 0}
|
|
53
|
+
<section id="article-tags" class="w-full">
|
|
54
|
+
Tags:
|
|
55
|
+
{#each pageMeta.tags as tag, index (index)}
|
|
56
|
+
<a class="badge tag-link" href={getTagQueryHref(tag)}>{tag}</a>
|
|
57
|
+
{/each}
|
|
58
|
+
</section>
|
|
59
|
+
{/if}
|
|
60
|
+
</div>
|
|
43
61
|
</hgroup>
|
|
44
62
|
|
|
45
63
|
<div class="article-content">
|
|
@@ -56,6 +74,14 @@
|
|
|
56
74
|
margin-inline-end: 0.5em;
|
|
57
75
|
}
|
|
58
76
|
|
|
77
|
+
#article-tags {
|
|
78
|
+
flex-grow: 1;
|
|
79
|
+
width: 100%;
|
|
80
|
+
flex-basis: 100%;
|
|
81
|
+
|
|
82
|
+
line-height: 1.3lh;
|
|
83
|
+
}
|
|
84
|
+
|
|
59
85
|
#article-tags a.badge {
|
|
60
86
|
text-decoration: none;
|
|
61
87
|
}
|
|
@@ -79,4 +105,15 @@
|
|
|
79
105
|
outline: none;
|
|
80
106
|
filter: brightness(110%);
|
|
81
107
|
}
|
|
108
|
+
|
|
109
|
+
#hgroup-wrapper {
|
|
110
|
+
margin-top: 0.5lh;
|
|
111
|
+
display: flex;
|
|
112
|
+
flex-wrap: wrap;
|
|
113
|
+
justify-content: space-between;
|
|
114
|
+
|
|
115
|
+
& > *:not(.w-full) {
|
|
116
|
+
flex-basis: max(16em, 40%);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
82
119
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlogTemplateInner.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/templates/blog_template/BlogTemplateInner.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"BlogTemplateInner.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/ui/templates/blog_template/BlogTemplateInner.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAM1E,UAAU,KAAK;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,QAAQ,EAAE,OAAO,CAAC;CACpC;AAkEF,QAAA,MAAM,iBAAiB,2CAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
|
package/dist/util/util.d.ts
CHANGED
package/dist/util/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/lib/util/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QAAO,MAIrC,CAAC;AAIF,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,KAAG,CAAC,MAAM,MAAM,CAO5D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,CAAC,MAAM,IAAI,CAI5D,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,iCAAiC,GAAI,MAAM,uBAAuB,KAAG,CAAC,MAAM,IAAI,CAM5F,CAAC;AAEF,MAAM,WAAW,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM,EAQtE,CAAA"}
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/lib/util/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QAAO,MAIrC,CAAC;AAIF,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,KAAG,CAAC,MAAM,MAAM,CAO5D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,CAAC,MAAM,IAAI,CAI5D,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,iCAAiC,GAAI,MAAM,uBAAuB,KAAG,CAAC,MAAM,IAAI,CAM5F,CAAC;AAEF,MAAM,WAAW,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM,EAQtE,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,WAgBxC,CAAA"}
|
package/dist/util/util.js
CHANGED
|
@@ -34,3 +34,21 @@ export const getQueryTerms = (modules) => {
|
|
|
34
34
|
}
|
|
35
35
|
return [...queryTerms].sort();
|
|
36
36
|
};
|
|
37
|
+
export const renderStar = (rating) => {
|
|
38
|
+
let stars = "";
|
|
39
|
+
for (let i = 1; i <= 10; i++) {
|
|
40
|
+
if (rating >= i) {
|
|
41
|
+
stars += "★";
|
|
42
|
+
}
|
|
43
|
+
else if (Math.abs(i - rating) < 1) {
|
|
44
|
+
stars += "O";
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
stars += "☆";
|
|
48
|
+
}
|
|
49
|
+
if (i === 5) {
|
|
50
|
+
stars += `| ${rating}/10 |`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return stars;
|
|
54
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@turnipxenon/pineapple",
|
|
3
3
|
"description": "personal package for base styling for other personal projects",
|
|
4
|
-
"version": "5.3.0
|
|
4
|
+
"version": "5.3.0",
|
|
5
5
|
"devDependencies": {
|
|
6
6
|
"@commitlint/cli": "^19.8.1",
|
|
7
7
|
"@commitlint/config-conventional": "^19.8.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example_message.d.ts","sourceRoot":"","sources":["../../../../src/lib/external/paraglide/messages/example_message.js"],"names":[],"mappings":"AA4BO,wCALG;IAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,YAClC;IAAE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAAE,GAC7B,MAAM,CAYjB"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
import { getLocale, trackMessageCall, experimentalMiddlewareLocaleSplitting, isServer } from '../runtime.js';
|
|
3
|
-
|
|
4
|
-
const en_example_message = /** @type {(inputs: { username: NonNullable<unknown> }) => string} */ (i) => {
|
|
5
|
-
return `Hello world ${i.username}`
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
const fr_example_message = /** @type {(inputs: { username: NonNullable<unknown> }) => string} */ (i) => {
|
|
9
|
-
return `Bonjour ${i.username}`
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
const tl_example_message = /** @type {(inputs: { username: NonNullable<unknown> }) => string} */ (i) => {
|
|
13
|
-
return `Kamusta ${i.username}`
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
18
|
-
*
|
|
19
|
-
* - Changing this function will be over-written by the next build.
|
|
20
|
-
*
|
|
21
|
-
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
22
|
-
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
23
|
-
*
|
|
24
|
-
* @param {{ username: NonNullable<unknown> }} inputs
|
|
25
|
-
* @param {{ locale?: "en" | "fr" | "tl" }} options
|
|
26
|
-
* @returns {string}
|
|
27
|
-
*/
|
|
28
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
29
|
-
export const example_message = (inputs, options = {}) => {
|
|
30
|
-
if (experimentalMiddlewareLocaleSplitting && isServer === false) {
|
|
31
|
-
return /** @type {any} */ (globalThis).__paraglide_ssr.example_message(inputs)
|
|
32
|
-
}
|
|
33
|
-
const locale = options.locale ?? getLocale()
|
|
34
|
-
trackMessageCall("example_message", locale)
|
|
35
|
-
if (locale === "en") return en_example_message(inputs)
|
|
36
|
-
if (locale === "fr") return fr_example_message(inputs)
|
|
37
|
-
return tl_example_message(inputs)
|
|
38
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../src/lib/external/paraglide/messages/settings.js"],"names":[],"mappings":"AA2BO,kCALG,EAAE,YACF;IAAE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAAE,GAC7B,MAAM,CAYjB"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
import { getLocale, trackMessageCall, experimentalMiddlewareLocaleSplitting, isServer } from '../runtime.js';
|
|
3
|
-
|
|
4
|
-
const en_settings = /** @type {(inputs: {}) => string} */ () => {
|
|
5
|
-
return `Settings`
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
const fr_settings = /** @type {(inputs: {}) => string} */ () => {
|
|
9
|
-
return `Paramètres`
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
/** @type {(inputs: {}) => string} */
|
|
13
|
-
const tl_settings = en_settings;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* This function has been compiled by [Paraglide JS](https://inlang.com/m/gerre34r).
|
|
17
|
-
*
|
|
18
|
-
* - Changing this function will be over-written by the next build.
|
|
19
|
-
*
|
|
20
|
-
* - If you want to change the translations, you can either edit the source files e.g. `en.json`, or
|
|
21
|
-
* use another inlang app like [Fink](https://inlang.com/m/tdozzpar) or the [VSCode extension Sherlock](https://inlang.com/m/r7kp499g).
|
|
22
|
-
*
|
|
23
|
-
* @param {{}} inputs
|
|
24
|
-
* @param {{ locale?: "en" | "fr" | "tl" }} options
|
|
25
|
-
* @returns {string}
|
|
26
|
-
*/
|
|
27
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
28
|
-
export const settings = (inputs = {}, options = {}) => {
|
|
29
|
-
if (experimentalMiddlewareLocaleSplitting && isServer === false) {
|
|
30
|
-
return /** @type {any} */ (globalThis).__paraglide_ssr.settings(inputs)
|
|
31
|
-
}
|
|
32
|
-
const locale = options.locale ?? getLocale()
|
|
33
|
-
trackMessageCall("settings", locale)
|
|
34
|
-
if (locale === "en") return en_settings(inputs)
|
|
35
|
-
if (locale === "fr") return fr_settings(inputs)
|
|
36
|
-
return tl_settings(inputs)
|
|
37
|
-
};
|