diff --git a/src/lib/api/knowledgepanels.ts b/src/lib/api/knowledgepanels.ts index 0a8468614..c592866c6 100644 --- a/src/lib/api/knowledgepanels.ts +++ b/src/lib/api/knowledgepanels.ts @@ -1,20 +1,24 @@ +export type KnowledgePanelTitle = { + title: string; + subtitle?: string; + grade: 'a' | 'b' | 'c' | 'd' | 'e' | 'unknown'; + icon_url: string; + icon_color_from_evaluation: string; + icon_size: string; + type: string; +}; + +export type KnowledgePanelSize = 'small'; + export type KnowledgePanel = { type: 'card' | 'inline'; expanded: boolean; expand_for: string; - title_element: { - title: string; - subtitle?: string; - grade: 'a' | 'b' | 'c' | 'd' | 'e' | 'unknown'; - icon_url: string; - icon_color_from_evaluation: string; - icon_size: string; - type: string; - }; + title_element: KnowledgePanelTitle; elements: KnowledgeElement[]; topics: string[]; level: string; - size?: 'small'; + size?: KnowledgePanelSize; }; export type KnowledgeElement = diff --git a/src/lib/const.ts b/src/lib/const.ts index 436fb6061..076550c95 100644 --- a/src/lib/const.ts +++ b/src/lib/const.ts @@ -1,10 +1,9 @@ export const STATIC_HOST = 'https://static.openfoodfacts.org'; - -export const TAXONOMY_URL = (taxo: string) => `${STATIC_HOST}/data/taxonomies/${taxo}.json`; - export const API_HOST = 'https://world.openfoodfacts.org'; - -export const PRODUCT_URL = (barcode: string) => `${API_HOST}/api/v3/product/${barcode}.json`; export const SEARCH_URL = `${API_HOST}/api/v2/search`; export const USER_AGENT = `Open Food Facts Explorer (${import.meta.env.PACKAGE_VERSION})`; + +export const KP_ATTRIBUTE_IMG = (img: string) => `${STATIC_HOST}/images/attributes/dist/${img}`; +export const TAXONOMY_URL = (taxo: string) => `${STATIC_HOST}/data/taxonomies/${taxo}.json`; +export const PRODUCT_URL = (barcode: string) => `${API_HOST}/api/v3/product/${barcode}.json`; diff --git a/src/lib/greenscore/GreenScore.svelte b/src/lib/greenscore/GreenScore.svelte index 656e60f3f..e8151bd45 100644 --- a/src/lib/greenscore/GreenScore.svelte +++ b/src/lib/greenscore/GreenScore.svelte @@ -1,21 +1,18 @@ -Nutriscore +Green-Score diff --git a/src/lib/knowledgepanels/Element.svelte b/src/lib/knowledgepanels/Element.svelte index 96cffd458..04e658a15 100644 --- a/src/lib/knowledgepanels/Element.svelte +++ b/src/lib/knowledgepanels/Element.svelte @@ -1,5 +1,5 @@
@@ -28,7 +32,7 @@ - {#each element.table_element.columns as column} {/each} @@ -37,7 +41,7 @@ {#each element.table_element.rows as row} - {#each row.values as cell} {/each} diff --git a/src/lib/knowledgepanels/Elements.svelte b/src/lib/knowledgepanels/Elements.svelte deleted file mode 100644 index c6047a460..000000000 --- a/src/lib/knowledgepanels/Elements.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -{#each elements as element, i} - {#if i > 0} -
- {/if} - -{/each} diff --git a/src/lib/knowledgepanels/Map.svelte b/src/lib/knowledgepanels/Map.svelte index 382943c45..3bbc5ceba 100644 --- a/src/lib/knowledgepanels/Map.svelte +++ b/src/lib/knowledgepanels/Map.svelte @@ -2,9 +2,12 @@ import type { KnowledgeMapElement } from '$lib/api'; import { onMount } from 'svelte'; - export let element: KnowledgeMapElement; + let { element }: { element: KnowledgeMapElement } = $props(); const MAX_INITIAL_ZOOM = 3; + const MAX_ZOOM = 19; + const TILES_BASE_URL = 'https://tile.openstreetmap.org/{z}/{x}/{y}.png'; + const ATTRIBUTION = '© OpenStreetMap'; onMount(async () => { const { default: L } = await import('leaflet'); @@ -15,11 +18,8 @@ ); map.setZoom(Math.min(map.getZoom(), MAX_INITIAL_ZOOM)); + L.tileLayer(TILES_BASE_URL, { maxZoom: MAX_ZOOM, attribution: ATTRIBUTION }).addTo(map); - L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { - maxZoom: 19, - attribution: '© OpenStreetMap' - }).addTo(map); for (const pointer of element.map_element.pointers) { const marker = L.marker([pointer.geo.lat, pointer.geo.lng]); marker.addTo(map); @@ -27,4 +27,4 @@ }); -
+
diff --git a/src/lib/knowledgepanels/Panel.svelte b/src/lib/knowledgepanels/Panel.svelte index 177b8cdc4..65869f028 100644 --- a/src/lib/knowledgepanels/Panel.svelte +++ b/src/lib/knowledgepanels/Panel.svelte @@ -1,19 +1,70 @@ +{#snippet elementList(elements: KnowledgeElement[])} + {#each elements as element, i} + {#if i > 0} +
+ {/if} + + {/each} +{/snippet} + +{#snippet detailsElement(title: KnowledgePanelTitle, elements: KnowledgeElement[])} +
+ + {#if title != null} + {#if title.icon_url != null} + {#if title.type === 'grade'} + {title.title} + {:else} + {title.title} + {/if} + {/if} + +
+
{title.title}
+ {#if title.subtitle != null} +

{title.subtitle}

+ {/if} +
+ {/if} +
+ {#if panel.elements != null} + {@render elementList(panel.elements)} + {/if} +
+{/snippet} +
{#if panel == null}
Panel is null
@@ -26,55 +77,16 @@ {/if}
- + {@render elementList(panel.elements)} {:else if panel.type === 'inline'} {#if panel.elements != null} -
- +
+ {@render elementList(panel.elements)}
{/if} {:else} -
- - {#if panel.title_element != null} - {#if panel.title_element.icon_url != null} - {#if panel.title_element.type === 'grade'} - {panel.title_element.title} - {:else} - {panel.title_element.title} - {/if} - {/if} - -
-
{panel.title_element.title}
- {#if panel.title_element.subtitle != null} -

{panel.title_element.subtitle}

- {/if} -
- {/if} -
- {#if panel.elements != null} -
- -
- {/if} -
+ {@render detailsElement(panel.title_element, panel.elements)} {/if} {#if dev} diff --git a/src/lib/knowledgepanels/PanelGroup.svelte b/src/lib/knowledgepanels/PanelGroup.svelte index 3f59d4779..3a5ef9ac3 100644 --- a/src/lib/knowledgepanels/PanelGroup.svelte +++ b/src/lib/knowledgepanels/PanelGroup.svelte @@ -3,25 +3,29 @@ import ImageButton from '$lib/ui/ImageButton.svelte'; import Panel from './Panel.svelte'; - export let element: KnowledgePanelGroupElement; - export let allPanels: Record; + let { + element, + allPanels + }: { + element: KnowledgePanelGroupElement; + allPanels: Record; + } = $props(); + + let groupEl = $derived(element.panel_group_element);
-

{element.panel_group_element.title}

- {#each element.panel_group_element.panel_ids as id} +

{groupEl.title}

+ {#each groupEl.panel_ids as id} {@const panel = allPanels[id]} {/each}
- {#if element.panel_group_element.image != null} + {#if groupEl.image != null}
- +
{/if}
diff --git a/src/lib/knowledgepanels/Panels.svelte b/src/lib/knowledgepanels/Panels.svelte index ae3591f4a..8b69e5f83 100644 --- a/src/lib/knowledgepanels/Panels.svelte +++ b/src/lib/knowledgepanels/Panels.svelte @@ -1,10 +1,8 @@
@@ -24,7 +24,7 @@
-
+
{#each panelsArray as [panelKey, panel]} {#if panel.type === 'card'} @@ -39,6 +39,6 @@ {#each panelsArray as [id, panel]} {#if panel.type === 'card'} - + {/if} {/each} diff --git a/src/lib/knowledgepanels/TextElement.svelte b/src/lib/knowledgepanels/TextElement.svelte index 946092916..e1151c8ad 100644 --- a/src/lib/knowledgepanels/TextElement.svelte +++ b/src/lib/knowledgepanels/TextElement.svelte @@ -1,27 +1,46 @@ -{#if element.text_element.type === 'warning'} +{#if type === 'warning'} Warning -{:else if element.text_element.type === 'notes'} +{:else if type === 'notes'} Notes -{:else if element.text_element.type === 'summary'} +{:else if type === 'summary'} Summary {/if} -
- - {@html element.text_element.html} -
+ +{#if text_el.edit_field_type == 'ingredients_text'} +
+ + {@html text_el.html} +
+{:else} +
+ + {@html text_el.html} +
+{/if} -{#if element.text_element.source_url} -
- {element.text_element.source_text} ({element.text_element.source_language}) +{#if text_el.source_url} + + {text_el.source_text} ({text_el.source_language}) {/if} diff --git a/src/lib/nova/Nova.svelte b/src/lib/nova/Nova.svelte index d3abd1556..7fc7ec63b 100644 --- a/src/lib/nova/Nova.svelte +++ b/src/lib/nova/Nova.svelte @@ -1,21 +1,19 @@ - Nutriscore + Nova Score diff --git a/src/lib/nova/nova-group-1.svg b/src/lib/nova/nova-group-1.svg deleted file mode 100644 index f0ea33c5a..000000000 --- a/src/lib/nova/nova-group-1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nova/nova-group-2.svg b/src/lib/nova/nova-group-2.svg deleted file mode 100644 index 1ce1c5635..000000000 --- a/src/lib/nova/nova-group-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nova/nova-group-3.svg b/src/lib/nova/nova-group-3.svg deleted file mode 100644 index d03afa587..000000000 --- a/src/lib/nova/nova-group-3.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nova/nova-group-4.svg b/src/lib/nova/nova-group-4.svg deleted file mode 100644 index 152d2c45c..000000000 --- a/src/lib/nova/nova-group-4.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nova/nova-group-unknown.svg b/src/lib/nova/nova-group-unknown.svg deleted file mode 100644 index 899522e17..000000000 --- a/src/lib/nova/nova-group-unknown.svg +++ /dev/null @@ -1 +0,0 @@ -? \ No newline at end of file diff --git a/src/lib/nutriscore/NutriScore.svelte b/src/lib/nutriscore/NutriScore.svelte index 0f5d965c7..dd75e63ae 100644 --- a/src/lib/nutriscore/NutriScore.svelte +++ b/src/lib/nutriscore/NutriScore.svelte @@ -1,23 +1,22 @@ - Nutriscore + Nutri-Score diff --git a/src/lib/nutriscore/nutriscore-a.svg b/src/lib/nutriscore/nutriscore-a.svg deleted file mode 100644 index 74a532217..000000000 --- a/src/lib/nutriscore/nutriscore-a.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nutriscore/nutriscore-b.svg b/src/lib/nutriscore/nutriscore-b.svg deleted file mode 100644 index 7a1b442fc..000000000 --- a/src/lib/nutriscore/nutriscore-b.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nutriscore/nutriscore-c.svg b/src/lib/nutriscore/nutriscore-c.svg deleted file mode 100644 index 9055465e1..000000000 --- a/src/lib/nutriscore/nutriscore-c.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nutriscore/nutriscore-d.svg b/src/lib/nutriscore/nutriscore-d.svg deleted file mode 100644 index aec6f55cc..000000000 --- a/src/lib/nutriscore/nutriscore-d.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nutriscore/nutriscore-e.svg b/src/lib/nutriscore/nutriscore-e.svg deleted file mode 100644 index 123402edf..000000000 --- a/src/lib/nutriscore/nutriscore-e.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/nutriscore/nutriscore-unknown.svg b/src/lib/nutriscore/nutriscore-unknown.svg deleted file mode 100644 index 62b84f137..000000000 --- a/src/lib/nutriscore/nutriscore-unknown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/ui/Debug.svelte b/src/lib/ui/Debug.svelte index 361eda412..748867cee 100644 --- a/src/lib/ui/Debug.svelte +++ b/src/lib/ui/Debug.svelte @@ -1,6 +1,6 @@
diff --git a/src/lib/ui/ImageButton.svelte b/src/lib/ui/ImageButton.svelte index 53f4368bd..9489c27e5 100644 --- a/src/lib/ui/ImageButton.svelte +++ b/src/lib/ui/ImageButton.svelte @@ -1,16 +1,15 @@ -
+ {column.text}
+ {cell.text}