From 60332776e1a864b652e3f0bf22cba729de6849a8 Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Sun, 9 Nov 2025 22:11:24 +0100 Subject: [PATCH 1/9] Merging func extracter picker component created --- .../DevelopmentPaneSidebarListOfFilters.tsx | 282 +++++++++--------- .../ListOfFilters/FilterSelect.tsx | 97 ++++++ .../modify/hooks/useQueryFiltersSeeds.ts | 22 +- .../FilterModifications.tsx | 43 +-- .../MergeModificationButton.tsx | 66 ++++ .../MergeMofificationButton.tsx | 85 ------ .../stores/filtersModificationStore.ts | 222 ++++++++------ .../utils/get-merged-filter-data.ts | 54 ++++ .../features/tracking/stores/trackingStore.ts | 2 +- src/topic/Heraldry/stores/cursorStore.ts | 2 +- src/topic/Heraldry/stores/unitsPaneStore.ts | 42 +-- 11 files changed, 544 insertions(+), 373 deletions(-) create mode 100644 src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSelect.tsx create mode 100644 src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx delete mode 100644 src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeMofificationButton.tsx create mode 100644 src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts diff --git a/src/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSidebarListOfFilters.tsx b/src/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSidebarListOfFilters.tsx index 5d4b96067..590337d6e 100644 --- a/src/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSidebarListOfFilters.tsx +++ b/src/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSidebarListOfFilters.tsx @@ -1,31 +1,43 @@ -import { memo, useState, useCallback, useMemo, Dispatch, SetStateAction } from 'react'; -import { useTranslation } from 'react-i18next'; - -import IconCopy from '@/components/Icons/IconCopy'; -import IconEraser from '@/components/Icons/IconEraser'; -import IconSelected from '@/components/Icons/IconSelected'; -import IconSelectNew from '@/components/Icons/IconSelectNew'; -import IconAnimal from '@/components/Icons/IconAnimal'; -import IconCrown from '@/components/Icons/IconCrown'; - -import Space from '@/components/UI/Space'; -import ButtonText from '@/components/UI/ButtonText'; - -import useQueryFiltersSeeds from '@/topic/Heraldry/features/modify/hooks/useQueryFiltersSeeds'; - -import { copyText } from '@/utils/text'; - -import { MarkerParamsWithResult } from '@/topic/Heraldry/types'; - -import FilterModifications from '@/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/FilterModifications'; -import { useFilterModificationStore, selectShortcuts, resetModifications } from '@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore'; - -import DevelopmentPaneSnippet from './DevelopmentPaneSnippet'; +import { + memo, + useState, + useCallback, + useMemo, + Dispatch, + SetStateAction, +} from "react"; +import { useTranslation } from "react-i18next"; + +import IconCopy from "@/components/Icons/IconCopy"; +import IconEraser from "@/components/Icons/IconEraser"; +import IconSelected from "@/components/Icons/IconSelected"; +import IconSelectNew from "@/components/Icons/IconSelectNew"; +import IconAnimal from "@/components/Icons/IconAnimal"; +import IconCrown from "@/components/Icons/IconCrown"; + +import Space from "@/components/UI/Space"; +import ButtonText from "@/components/UI/ButtonText"; + +import useQueryFiltersSeeds from "@/topic/Heraldry/features/modify/hooks/useQueryFiltersSeeds"; + +import { copyText } from "@/utils/text"; + +import { MarkerParamsWithResult } from "@/topic/Heraldry/types"; + +import FilterModifications from "@/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/FilterModifications"; +import { + useFilterModificationStore, + selectShortcuts, + resetModifications, +} from "@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore"; + +import DevelopmentPaneSnippet from "./DevelopmentPaneSnippet"; +import FilterSelect from "./ListOfFilters/FilterSelect"; type Props = { - country: string, - setDraftFilter: Dispatch>, - onUse: () => void, + country: string; + setDraftFilter: Dispatch>; + onUse: () => void; }; const DevelopmentPaneSidebarListOfFilters = ({ @@ -33,56 +45,61 @@ const DevelopmentPaneSidebarListOfFilters = ({ setDraftFilter, onUse, }: Props) => { - const shortcuts = useFilterModificationStore(state => selectShortcuts(state, 100)); - const [selected, setSelected] = useState<{ type: 'type' | 'animal' | 'item', name: string } | undefined>(); + const shortcuts = useFilterModificationStore((state) => + selectShortcuts(state, 100) + ); + const [selected, setSelected] = useState< + { type: "type" | "animal" | "item"; name: string } | undefined + >(); const { t } = useTranslation(); - const handleDraftUpdate = useCallback((filter: MarkerParamsWithResult) => { - setDraftFilter(filter); - onUse(); - }, [onUse, setDraftFilter]) - - const { - isLoading, - isError, - error, - data, - } = useQueryFiltersSeeds({ country }); - - const handleChange = useCallback((event: React.ChangeEvent) => { - if (!data) { - return; - } + const handleDraftUpdate = useCallback( + (filter: MarkerParamsWithResult) => { + setDraftFilter(filter); + onUse(); + }, + [onUse, setDraftFilter] + ); - const value = (event.target.value || ''); - const [type, name] = value.split('-'); + const { isLoading, isError, error, data } = useQueryFiltersSeeds({ country }); - if (['type', 'animal', 'item'].includes(type)) { - setSelected({ - type: type as 'type' | 'animal' | 'item', - name, - }); + const handleChange = useCallback( + (event: React.ChangeEvent) => { + if (!data) { + return; + } - return; - } + const value = event.target.value || ""; + const [type, name] = value.split("-"); + + if (["type", "animal", "item"].includes(type)) { + setSelected({ + type: type as "type" | "animal" | "item", + name, + }); - setSelected(undefined); - }, [data]); + return; + } + + setSelected(undefined); + }, + [data] + ); const selectedFilter = useMemo(() => { - if (data && selected?.type === 'type') { + if (data && selected?.type === "type") { const filter = data.types.find(({ name }) => selected?.name === name); return filter; - } + } - if (data && selected?.type === 'animal') { + if (data && selected?.type === "animal") { const filter = data.animals.find(({ name }) => selected?.name === name); return filter; - } - - if (data && selected?.type === 'item') { + } + + if (data && selected?.type === "item") { const filter = data.items.find(({ name }) => selected?.name === name); return filter; @@ -92,7 +109,7 @@ const DevelopmentPaneSidebarListOfFilters = ({ }, [handleChange, selected]); if (isError) { - console.log('error', error); + console.log("error", error); } return ( @@ -101,13 +118,10 @@ const DevelopmentPaneSidebarListOfFilters = ({

- - App filters - + App filters

- You can read about the filters - {' '} + You can read about the filters{" "} here - {'. '} + {". "}

- {shortcuts.length > 0 &&
- - - {t('heraldry.list.clear')} - - {shortcuts.map(({ name, type, total }) => setSelected({ name, type })} - isActive={selected?.name === name && selected?.type === type} - isDisabled={!data} - > - {type === 'animal' ? : } - {t(`heraldry.${type}.${name}`)} ({total}) - )} -
} - +
+ )} +
- {selectedFilter && copyText(`${JSON.stringify(selectedFilter, null, 4)},`)} - > - {t('main.copy')} - - } + {selectedFilter && ( + + copyText(`${JSON.stringify(selectedFilter, null, 4)},`) + } + > + {t("main.copy")} + + + )} selectedFilter ? handleDraftUpdate(selectedFilter) : {}} + onClick={() => + selectedFilter ? handleDraftUpdate(selectedFilter) : {} + } wrapperClassName="ml-auto" isActive={Boolean(selectedFilter)} isDisabled={!selectedFilter} @@ -195,22 +181,28 @@ const DevelopmentPaneSidebarListOfFilters = ({
- {selectedFilter && } - {selectedFilter && selected && ['animal', 'item'].includes(selected.type) && } + {selectedFilter && ( + + )} + {selectedFilter && + selected && + ["animal", "item"].includes(selected.type) && ( + + )} ); -} +}; export default memo(DevelopmentPaneSidebarListOfFilters); diff --git a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSelect.tsx b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSelect.tsx new file mode 100644 index 000000000..c16ce58a9 --- /dev/null +++ b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSelect.tsx @@ -0,0 +1,97 @@ +import { memo, useCallback } from "react"; +import { useTranslation } from "react-i18next"; + +import useQueryFiltersSeeds from "@/topic/Heraldry/features/modify/hooks/useQueryFiltersSeeds"; + +type Props = { + country: string; + setSelected: ( + selected: + | { + type: "type" | "animal" | "item"; + name: string; + } + | undefined + ) => void; +}; + +const FilterSelect = ({ country, setSelected }: Props) => { + const { t } = useTranslation(); + const { isLoading, data } = useQueryFiltersSeeds({ country }); + + const handleChange = useCallback( + (event: React.ChangeEvent) => { + if (!data) { + setSelected(undefined); + + return; + } + + const value = event.target.value || ""; + const [type, name] = value.split("-"); + + if (["type", "animal", "item"].includes(type)) { + setSelected({ + type: type as "type" | "animal" | "item", + name, + }); + + return; + } + + setSelected(undefined); + }, + [data] + ); + + return ( + + ); +}; + +export default memo(FilterSelect); diff --git a/src/topic/Heraldry/features/modify/hooks/useQueryFiltersSeeds.ts b/src/topic/Heraldry/features/modify/hooks/useQueryFiltersSeeds.ts index 7ceedf7ab..1cfee2111 100644 --- a/src/topic/Heraldry/features/modify/hooks/useQueryFiltersSeeds.ts +++ b/src/topic/Heraldry/features/modify/hooks/useQueryFiltersSeeds.ts @@ -1,12 +1,14 @@ -import { useQuery } from '@tanstack/react-query'; -import { MarkerParams } from '@/topic/Heraldry/types'; +import { useQuery } from "@tanstack/react-query"; +import { MarkerParams } from "@/topic/Heraldry/types"; -type FetchParmas = { - country: string, -} +type FetchParams = { + country: string; +}; -const fetchData = async ({ country }: FetchParmas) => { - const response = await fetch(`/maps/data/heraldry/${country}/filters.json`).then((response) => response.json()); +const fetchData = async ({ country }: FetchParams) => { + const response = await fetch( + `/maps/data/heraldry/${country}/filters.json` + ).then((response) => response.json()); const types = (response.types || []) as MarkerParams[]; const animals = (response.animals || []) as MarkerParams[]; @@ -19,12 +21,12 @@ const fetchData = async ({ country }: FetchParmas) => { }; }; -export default function useQueryFiltersSeeds({ country }: FetchParmas) { +export default function useQueryFiltersSeeds({ country }: FetchParams) { const response = useQuery({ queryFn: () => fetchData({ country }), - queryKey: ['filter', country], + queryKey: ["filter", country], staleTime: 5 * 60 * 1000, }); return response; -}; +} diff --git a/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/FilterModifications.tsx b/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/FilterModifications.tsx index 24968d79b..8ad537ea8 100644 --- a/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/FilterModifications.tsx +++ b/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/FilterModifications.tsx @@ -1,26 +1,31 @@ -import { MarkerParams } from '@/topic/Heraldry/types'; +import { MarkerParams } from "@/topic/Heraldry/types"; +import { useFilterModificationStore } from "@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore"; -import { useFilterModificationStore } from '@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore'; +import DevelopmentPaneSnippet from "@/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSnippet"; -import DevelopmentPaneSnippet from '@/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSnippet'; - -import MergeMofificationButton from './MergeMofificationButton'; +import MergeModificationButton from "./MergeModificationButton"; type Props = { - className?: string, - snippetClassName?: string, - type: 'animal' | 'item', - name: string, - filter: MarkerParams, - setDraftFilter: (v: MarkerParams) => void, -} - -const FilterModifications = ({ className, snippetClassName, type, name, filter, setDraftFilter }: Props) => { - const { - include = [], - exclude = [], - } = useFilterModificationStore(state => state[type][name] || {}); + className?: string; + snippetClassName?: string; + type: "animal" | "item"; + name: string; + filter: MarkerParams; + setDraftFilter: (v: MarkerParams) => void; +}; + +const FilterModifications = ({ + className, + snippetClassName, + type, + name, + filter, + setDraftFilter, +}: Props) => { + const { include = [], exclude = [] } = useFilterModificationStore( + (state) => state[type][name] || {} + ); if (include.length === 0 && exclude.length === 0) { return null; @@ -30,7 +35,7 @@ const FilterModifications = ({ className, snippetClassName, type, name, filter,
Modifications
- void; +}; + +const MergeModificationButton = ({ + filter: initFilter, + include, + exclude, + setDraftFilter, +}: Props) => { + const { t } = useTranslation(); + + const handleClick = () => { + const mergedFilter = getMergedFilterData({ + initFilter, + include, + exclude, + }); + + setDraftFilter(mergedFilter); + }; + + const handleCopyFiler = () => { + const mergedFilter = getMergedFilterData({ + initFilter, + include, + exclude, + }); + + copyText(`${JSON.stringify(mergedFilter, null, 4)},`); + }; + + return ( + <> + + {t("main.copy")} + + + + Use + + + + ); +}; + +export default MergeModificationButton; diff --git a/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeMofificationButton.tsx b/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeMofificationButton.tsx deleted file mode 100644 index cd4f8a5e3..000000000 --- a/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeMofificationButton.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { MarkerParams, ComplexManualMarker } from '@/topic/Heraldry/types'; -import { useTranslation } from 'react-i18next'; - -import { copyText } from '@/utils/text'; - -import IconCopy from '@/components/Icons/IconCopy'; -import IconSelectNew from '@/components/Icons/IconSelectNew'; - - -import ButtonText from '@/components/UI/ButtonText'; - -type Props = { - filter: MarkerParams, - include: ComplexManualMarker[], - exclude: ComplexManualMarker[], - setDraftFilter: (v: MarkerParams) => void, -} - -const MergeMofificationButton = ({ filter: initFliter, include, exclude, setDraftFilter }: Props) => { - const { t } = useTranslation(); - - const mergeData = () => { - const hashesIncluded = (initFliter.include || []).map((ruleToCheck) => typeof ruleToCheck === 'string' ? '' : ruleToCheck.imageHash).filter(Boolean) - const hashesExcluded = (initFliter.exclude || []).map((ruleToCheck) => typeof ruleToCheck === 'string' ? '' : ruleToCheck.imageHash).filter(Boolean) - - const hashesToRemove = [...include, ...exclude].map(({ imageHash }) => imageHash); - const titlesToRemove = [...include, ...exclude].map(({ note }) => note); - - const rulesToInclude = include.filter(({ imageHash }) => !hashesExcluded.includes(imageHash)); - const rulesToExclude = exclude.filter(({ imageHash }) => !hashesIncluded.includes(imageHash)); - - const includeWithRemoved = (initFliter.include || []).filter((ruleToCheck) => - typeof ruleToCheck === 'string' - ? !titlesToRemove.includes(ruleToCheck) - : !hashesToRemove.includes(ruleToCheck.imageHash) - ); - - const excludeWithRemoved = (initFliter.exclude || []).filter((ruleToCheck) => - typeof ruleToCheck === 'string' - ? !titlesToRemove.includes(ruleToCheck) - : !hashesToRemove.includes(ruleToCheck.imageHash) - ); - - return { - ...initFliter, - include: [...includeWithRemoved, ...rulesToInclude], - exclude: [...excludeWithRemoved, ...rulesToExclude], - } - } - - const handleClick = () => { - const mergedFilter = mergeData(); - - setDraftFilter(mergedFilter); - } - - const handleCopyFiler = () => { - const mergedFilter = mergeData(); - - copyText(`${JSON.stringify(mergedFilter, null, 4)},`) - } - - return ( - <> - - {t('main.copy')} - - - - Use - - - - ); -}; - -export default MergeMofificationButton; diff --git a/src/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore.ts b/src/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore.ts index acd930f6f..dcd0d6956 100644 --- a/src/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore.ts +++ b/src/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore.ts @@ -1,124 +1,162 @@ -import { create } from 'zustand'; -import { devtools, persist } from 'zustand/middleware'; -import { CoatOfArmsMapData, ComplexManualMarker, MarkerType } from '@/topic/Heraldry/types'; +import { create } from "zustand"; +import { devtools, persist } from "zustand/middleware"; +import { + CoatOfArmsMapData, + ComplexManualMarker, + MarkerType, +} from "@/topic/Heraldry/types"; type FiltersModificationStoreState = { animal: { [name: string]: { - include?: ComplexManualMarker[], - exclude?: ComplexManualMarker[], - } - }, + include?: ComplexManualMarker[]; + exclude?: ComplexManualMarker[]; + }; + }; item: { [name: string]: { - include?: ComplexManualMarker[], - exclude?: ComplexManualMarker[], - } - }, -} + include?: ComplexManualMarker[]; + exclude?: ComplexManualMarker[]; + }; + }; +}; const emptyState: FiltersModificationStoreState = { animal: {}, item: {}, }; -export const useFilterModificationStore = create()( - devtools( - persist( - () => (emptyState as FiltersModificationStoreState), - { name: 'filtersModificationStore' }, +export const useFilterModificationStore = + create()( + devtools( + persist(() => emptyState as FiltersModificationStoreState, { + name: "filtersModificationStore", + }), + { name: "filtersModificationStore" } ) - ) -) - -export const resetModifications = () => useFilterModificationStore.setState(emptyState); - -const getListModifier = (action: 'reset' | 'include' | 'exclude') => (unit: CoatOfArmsMapData, markerType: MarkerType, item: string) => { - const imageHashToChange = unit.imageHash; - - if (!imageHashToChange) { - console.error('Unit without image hash'); - - return; - } - - const ruleToAdd: ComplexManualMarker = { imageHash: imageHashToChange, note: unit.title }; - - useFilterModificationStore.setState((state) => { - const filter = state[markerType][item]; + ); - let include = filter?.include || []; - let exclude = filter?.exclude || []; +export const resetModifications = () => + useFilterModificationStore.setState(emptyState); - // Removed from both to deal with duplicates - const includeWithRemoved = include.filter(({ imageHash }) => imageHash !== imageHashToChange); - const excludeWithRemoved = exclude.filter(({ imageHash }) => imageHash !== imageHashToChange); - - let newInclude = includeWithRemoved; - let newExclude = excludeWithRemoved; +const getListModifier = + (action: "reset" | "include" | "exclude") => + (unit: CoatOfArmsMapData, markerType: MarkerType, item: string) => { + const imageHashToChange = unit.imageHash; - if (action === 'include') { - newInclude = [...newInclude, ruleToAdd]; - } + if (!imageHashToChange) { + console.error("Unit without image hash"); - if (action === 'exclude') { - newExclude = [...newExclude, ruleToAdd]; + return; } - const newFilter = { - include: newInclude, - exclude: newExclude, - }; - - // Backup - const country = document.documentElement.getAttribute('country'); - localStorage.setItem(`${country}_maps_${markerType}_${item}`, JSON.stringify(newFilter)); - - return { - ...state, - [markerType]: { - ...state[markerType], - [item]: newFilter, - }, + const ruleToAdd: ComplexManualMarker = { + imageHash: imageHashToChange, + note: unit.title, }; - }); -}; -export const removeFromIncludeAndExcludeInMarker = getListModifier('reset'); + useFilterModificationStore.setState((state) => { + const filter = state[markerType][item]; + + let include = filter?.include || []; + let exclude = filter?.exclude || []; + + // Removed from both to deal with duplicates + const includeWithRemoved = include.filter( + ({ imageHash }) => imageHash !== imageHashToChange + ); + const excludeWithRemoved = exclude.filter( + ({ imageHash }) => imageHash !== imageHashToChange + ); + + let newInclude = includeWithRemoved; + let newExclude = excludeWithRemoved; + + if (action === "include") { + newInclude = [...newInclude, ruleToAdd]; + } + + if (action === "exclude") { + newExclude = [...newExclude, ruleToAdd]; + } + + const newFilter = { + include: newInclude, + exclude: newExclude, + }; + + // Backup + const country = document.documentElement.getAttribute("country"); + localStorage.setItem( + `${country}_maps_${markerType}_${item}`, + JSON.stringify(newFilter) + ); + + return { + ...state, + [markerType]: { + ...state[markerType], + [item]: newFilter, + }, + }; + }); + }; + +export const removeFromIncludeAndExcludeInMarker = getListModifier("reset"); + +export const excludeUnitFromMarker = getListModifier("exclude"); + +export const includeUnitInMarker = getListModifier("include"); + +const getListForUnit = + (action: "include" | "exclude") => + (unit: CoatOfArmsMapData, markerType: MarkerType) => + (state: FiltersModificationStoreState) => { + const imageHashToChange = unit.imageHash; + + if (!imageHashToChange) { + console.error("Unit without image hash"); + + return []; + } -export const excludeUnitFromMarker = getListModifier('exclude'); + const markerTypeList = state[markerType]; -export const includeUnitInMarker = getListModifier('include'); + const list = Object.entries(markerTypeList) + .filter(([_item, rules]) => + (rules[action] || []).some( + ({ imageHash }) => imageHash === imageHashToChange + ) + ) + .map(([item]) => item); -const getListForUnit = (action: 'include' | 'exclude') => (unit: CoatOfArmsMapData, markerType: MarkerType) => (state: FiltersModificationStoreState) => { - const imageHashToChange = unit.imageHash; + return list; + }; - if (!imageHashToChange) { - console.error('Unit without image hash'); +export const selectUnitExcludeModifictions = getListForUnit("exclude"); - return []; - } +export const selectUnitIncludeModifictions = getListForUnit("include"); - const markerTypeList = state[markerType]; +type Shortcut = { name: string; type: "animal" | "item"; total: number }; - const list = Object.entries(markerTypeList).filter( - ([_item, rules]) => (rules[action] || []).some(({ imageHash }) => imageHash === imageHashToChange) - ).map( - ([item]) => item +export const selectShortcuts = ( + state: FiltersModificationStoreState, + max: number = 15 +): Shortcut[] => { + const animal: Shortcut[] = Object.entries(state.animal).map( + ([name, { include = [] } = {}]) => ({ + name, + type: "animal", + total: include.length, + }) + ); + const item: Shortcut[] = Object.entries(state.item).map( + ([name, { include = [] } = {}]) => ({ + name, + type: "item", + total: include.length, + }) ); - - return list; -} - -export const selectUnitExcludeModifictions = getListForUnit('exclude'); - -export const selectUnitIncludeModifictions = getListForUnit('include'); - -type Shortcut = { name: string, type: 'animal' | 'item', total: number }; - -export const selectShortcuts = (state: FiltersModificationStoreState, max: number = 15): Shortcut[] => { - const animal: Shortcut[] = Object.entries(state.animal).map(([name, { include = [] } = {}]) => ({ name, type: 'animal', total: include.length })); - const item: Shortcut[] = Object.entries(state.item).map(([name, { include = [] } = {}]) => ({ name, type: 'item', total: include.length })); return [...animal, ...item].sort((a, b) => b.total - a.total).slice(0, max); }; diff --git a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts new file mode 100644 index 000000000..33c935c0f --- /dev/null +++ b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts @@ -0,0 +1,54 @@ +import { ComplexManualMarker, MarkerParams } from "@/topic/Heraldry/types"; + +type Params = { + initFilter: MarkerParams; + include: ComplexManualMarker[]; + exclude: ComplexManualMarker[]; +}; + +export const getMergedFilterData = ({ + initFilter, + include, + exclude, +}: Params): MarkerParams => { + const hashesIncluded = (initFilter.include || []) + .map((ruleToCheck) => + typeof ruleToCheck === "string" ? "" : ruleToCheck.imageHash + ) + .filter(Boolean); + const hashesExcluded = (initFilter.exclude || []) + .map((ruleToCheck) => + typeof ruleToCheck === "string" ? "" : ruleToCheck.imageHash + ) + .filter(Boolean); + + const hashesToRemove = [...include, ...exclude].map( + ({ imageHash }) => imageHash + ); + const titlesToRemove = [...include, ...exclude].map(({ note }) => note); + + const rulesToInclude = include.filter( + ({ imageHash }) => !hashesExcluded.includes(imageHash) + ); + const rulesToExclude = exclude.filter( + ({ imageHash }) => !hashesIncluded.includes(imageHash) + ); + + const includeWithRemoved = (initFilter.include || []).filter((ruleToCheck) => + typeof ruleToCheck === "string" + ? !titlesToRemove.includes(ruleToCheck) + : !hashesToRemove.includes(ruleToCheck.imageHash) + ); + + const excludeWithRemoved = (initFilter.exclude || []).filter((ruleToCheck) => + typeof ruleToCheck === "string" + ? !titlesToRemove.includes(ruleToCheck) + : !hashesToRemove.includes(ruleToCheck.imageHash) + ); + + return { + ...initFilter, + include: [...includeWithRemoved, ...rulesToInclude], + exclude: [...excludeWithRemoved, ...rulesToExclude], + }; +}; diff --git a/src/topic/Heraldry/features/tracking/stores/trackingStore.ts b/src/topic/Heraldry/features/tracking/stores/trackingStore.ts index bc42dc6be..75dfcd8ed 100644 --- a/src/topic/Heraldry/features/tracking/stores/trackingStore.ts +++ b/src/topic/Heraldry/features/tracking/stores/trackingStore.ts @@ -32,7 +32,7 @@ export const useTrackingStore = create()( wasPopupClosed: initial.wasPopupClosed || emptyState.wasPopupClosed, didAgreeToGA: initial.didAgreeToGA || emptyState.didAgreeToGA, } as TrackingStoreState), - { name: 'trackinStore' }, + { name: 'trackingStore' }, ) ) diff --git a/src/topic/Heraldry/stores/cursorStore.ts b/src/topic/Heraldry/stores/cursorStore.ts index 1104e47a6..ca2350cd6 100644 --- a/src/topic/Heraldry/stores/cursorStore.ts +++ b/src/topic/Heraldry/stores/cursorStore.ts @@ -21,7 +21,7 @@ export const useCursorStore = create()( idToShow: '', lastClick: undefined, } as FiltersDevelopmentStoreState), - { name: 'filterDevelopmentStore' }, + { name: 'cursorStore' }, ) ) ) diff --git a/src/topic/Heraldry/stores/unitsPaneStore.ts b/src/topic/Heraldry/stores/unitsPaneStore.ts index 6b124ca9e..f851c9f00 100644 --- a/src/topic/Heraldry/stores/unitsPaneStore.ts +++ b/src/topic/Heraldry/stores/unitsPaneStore.ts @@ -1,23 +1,23 @@ -import { create } from 'zustand'; -import { devtools } from 'zustand/middleware' - -import { CoatOfArmsMapData } from '@/topic/Heraldry/types'; +import { create } from "zustand"; +import { devtools } from "zustand/middleware"; +import { CoatOfArmsMapData } from "@/topic/Heraldry/types"; type UnitPaneStoreState = { - searchPhrase: string, - selected: CoatOfArmsMapData[], - details?: CoatOfArmsMapData, -} + searchPhrase: string; + selected: CoatOfArmsMapData[]; + details?: CoatOfArmsMapData; +}; export const useUnitsPaneStore = create()( devtools( - () => ({ - searchPhrase: '', - selected: [], - details: undefined, - } as UnitPaneStoreState), - { name: 'filterDevelopmentStore' }, + () => + ({ + searchPhrase: "", + selected: [], + details: undefined, + } as UnitPaneStoreState), + { name: "unitsPaneStore" } ) ); @@ -42,16 +42,18 @@ export const toggleSelected = (unit: CoatOfArmsMapData) => { return { ...state, - selected: isSelected ? state.selected.filter(({ id }) => id !== unit.id) : [...state.selected, unit], - } + selected: isSelected + ? state.selected.filter(({ id }) => id !== unit.id) + : [...state.selected, unit], + }; }); }; export const setSelected = (units: CoatOfArmsMapData[]) => { useUnitsPaneStore.setState((state) => ({ - ...state, - selected: units, + ...state, + selected: units, })); -} +}; -export default useUnitsPaneStore; \ No newline at end of file +export default useUnitsPaneStore; From 504d790d5b2362ecb7eb3f17fdf2c504fbedeec0 Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Sun, 9 Nov 2025 23:42:25 +0100 Subject: [PATCH 2/9] Filters seeds global update --- .../DevelopmentPaneSidebarListOfFilters.tsx | 53 +++------- .../ListOfFilters/FilterSeeds.tsx | 96 +++++++++++++++++++ .../ListOfFilters/ShortcutsSelect.tsx | 55 +++++++++++ .../FiltersPaneSubPanelSettings.tsx | 4 +- .../AddOrRemoveMarkersAddShortcuts.tsx | 6 +- .../RemoveMarkers/RemoveMarkers.tsx | 6 +- .../RemoveModifications.tsx | 12 +-- .../stores/filtersModificationStore.ts | 4 +- .../stores/filtersDevelopmentStore.ts | 2 +- 9 files changed, 179 insertions(+), 59 deletions(-) create mode 100644 src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx create mode 100644 src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/ShortcutsSelect.tsx diff --git a/src/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSidebarListOfFilters.tsx b/src/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSidebarListOfFilters.tsx index 590337d6e..8ad234bab 100644 --- a/src/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSidebarListOfFilters.tsx +++ b/src/topic/Heraldry/components/Panes/DevelopmentPane/DevelopmentPaneSidebarListOfFilters.tsx @@ -9,11 +9,8 @@ import { import { useTranslation } from "react-i18next"; import IconCopy from "@/components/Icons/IconCopy"; -import IconEraser from "@/components/Icons/IconEraser"; import IconSelected from "@/components/Icons/IconSelected"; import IconSelectNew from "@/components/Icons/IconSelectNew"; -import IconAnimal from "@/components/Icons/IconAnimal"; -import IconCrown from "@/components/Icons/IconCrown"; import Space from "@/components/UI/Space"; import ButtonText from "@/components/UI/ButtonText"; @@ -25,14 +22,11 @@ import { copyText } from "@/utils/text"; import { MarkerParamsWithResult } from "@/topic/Heraldry/types"; import FilterModifications from "@/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/FilterModifications"; -import { - useFilterModificationStore, - selectShortcuts, - resetModifications, -} from "@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore"; import DevelopmentPaneSnippet from "./DevelopmentPaneSnippet"; import FilterSelect from "./ListOfFilters/FilterSelect"; +import ShortcutsSelect from "./ListOfFilters/ShortcutsSelect"; +import FilterSeeds from "./ListOfFilters/FilterSeeds"; type Props = { country: string; @@ -40,17 +34,16 @@ type Props = { onUse: () => void; }; +export type SelectState = + | { type: "type" | "animal" | "item"; name: string } + | undefined; + const DevelopmentPaneSidebarListOfFilters = ({ country, setDraftFilter, onUse, }: Props) => { - const shortcuts = useFilterModificationStore((state) => - selectShortcuts(state, 100) - ); - const [selected, setSelected] = useState< - { type: "type" | "animal" | "item"; name: string } | undefined - >(); + const [selected, setSelected] = useState(); const { t } = useTranslation(); const handleDraftUpdate = useCallback( @@ -61,7 +54,7 @@ const DevelopmentPaneSidebarListOfFilters = ({ [onUse, setDraftFilter] ); - const { isLoading, isError, error, data } = useQueryFiltersSeeds({ country }); + const { isError, error, data } = useQueryFiltersSeeds({ country }); const handleChange = useCallback( (event: React.ChangeEvent) => { @@ -125,38 +118,13 @@ const DevelopmentPaneSidebarListOfFilters = ({ here {". "}

- {shortcuts.length > 0 && ( -
- - - {t("heraldry.list.clear")} - - {shortcuts.map(({ name, type, total }) => ( - setSelected({ name, type })} - isActive={selected?.name === name && selected?.type === type} - isDisabled={!data} - > - {type === "animal" ? ( - - ) : ( - - )} - - {t(`heraldry.${type}.${name}`)} ({total}) - - - ))} -
- )} +
{selectedFilter && ( @@ -198,6 +166,7 @@ const DevelopmentPaneSidebarListOfFilters = ({ setDraftFilter={handleDraftUpdate} /> )} +
diff --git a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx new file mode 100644 index 000000000..45dfd3b9b --- /dev/null +++ b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx @@ -0,0 +1,96 @@ +import { memo } from "react"; + +import IconCopy from "@/components/Icons/IconCopy"; +import IconSelected from "@/components/Icons/IconSelected"; +import { + useFilterModificationStore, + selectShortcuts, +} from "@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore"; +import ButtonText from "@/components/UI/ButtonText"; +import { copyText } from "@/utils/text"; +import useQueryFiltersSeeds from "@/topic/Heraldry/features/modify/hooks/useQueryFiltersSeeds"; +import { MarkerParams } from "@/topic/Heraldry/types"; +import { getMergedFilterData } from "@/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data"; + +type Props = { + country: string; +}; + +const FilterSeeds = ({ country }: Props) => { + const shortcuts = useFilterModificationStore((state) => + selectShortcuts(state, 500) + ); + const { data } = useQueryFiltersSeeds({ country }); + + const handleClickCopy = () => { + if (!data) { + return; + } + + const modifications = useFilterModificationStore.getState(); + + const newData: { + types: MarkerParams[]; + animals: MarkerParams[]; + items: MarkerParams[]; + } = JSON.parse(JSON.stringify(data)); + + shortcuts.forEach(({ type, name }) => { + let typeKey: "animals" | "items" | undefined; + if (type === "animal") { + typeKey = "animals"; + } else if (type === "item") { + typeKey = "items"; + } + + if (typeKey) { + const { include = [], exclude = [] } = modifications[type][name] || {}; + + if (newData[typeKey].some((filter) => filter.name === name)) { + newData[typeKey].map((filter) => + filter.name === name + ? getMergedFilterData({ + initFilter: filter, + include, + exclude, + }) + : filter + ); + } else { + newData[typeKey].push({ + name, + phrases: [], + include, + exclude, + }); + } + } + }); + + copyText(`${JSON.stringify(newData, null, 4)},`); + }; + + if (shortcuts.length === 0) { + return null; + } + + return ( +
+

+ + Filters seeds +

+ + Copy seed + + +
+ ); +}; + +export default memo(FilterSeeds); diff --git a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/ShortcutsSelect.tsx b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/ShortcutsSelect.tsx new file mode 100644 index 000000000..4db86c8c9 --- /dev/null +++ b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/ShortcutsSelect.tsx @@ -0,0 +1,55 @@ +import { memo } from "react"; +import { useTranslation } from "react-i18next"; + +import IconEraser from "@/components/Icons/IconEraser"; +import IconAnimal from "@/components/Icons/IconAnimal"; +import IconCrown from "@/components/Icons/IconCrown"; + +import ButtonText from "@/components/UI/ButtonText"; +import { + useFilterModificationStore, + selectShortcuts, + resetModifications, +} from "@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore"; + +import { SelectState } from "../DevelopmentPaneSidebarListOfFilters"; + +type Props = { + selected: SelectState, + setSelected: (selected: SelectState) => void; +}; + +const ShortcutsSelect = ({ selected, setSelected }: Props) => { + const { t } = useTranslation(); + const shortcuts = useFilterModificationStore((state) => + selectShortcuts(state, 100) + ); + + if (shortcuts.length === 0) { + return null; + } + + return ( +
+ + + {t("heraldry.list.clear")} + + {shortcuts.map(({ name, type, total }) => ( + setSelected({ name, type })} + isActive={selected?.name === name && selected?.type === type} + > + {type === "animal" ? : } + + {t(`heraldry.${type}.${name}`)} ({total}) + + + ))} +
+ ); +}; + +export default memo(ShortcutsSelect); diff --git a/src/topic/Heraldry/components/Panes/FiltersPane/FiltersPaneSubPanelSettings.tsx b/src/topic/Heraldry/components/Panes/FiltersPane/FiltersPaneSubPanelSettings.tsx index a59ba6ec3..afa3bc872 100644 --- a/src/topic/Heraldry/components/Panes/FiltersPane/FiltersPaneSubPanelSettings.tsx +++ b/src/topic/Heraldry/components/Panes/FiltersPane/FiltersPaneSubPanelSettings.tsx @@ -16,7 +16,7 @@ import ButtonIcon from '@/components/UI/ButtonIcon'; import useFiltersStore, { toggleFilterOperator, toggleShouldReverseFilters, toggleShouldHideMissingImages } from '@/topic/Heraldry/stores/filtersStore'; import { useFiltersDevelopmentStore, - toggleFilterDevlopmentMode, + toggleFilterDevelopmentMode, } from '@/topic/Heraldry/stores/filtersDevelopmentStore'; type Props = { @@ -69,7 +69,7 @@ const FiltersPaneSubPanelColors = ({ diff --git a/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/AddMarkers/AddOrRemoveMarkersAddShortcuts.tsx b/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/AddMarkers/AddOrRemoveMarkersAddShortcuts.tsx index 43b83bd8a..5b39ecac0 100644 --- a/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/AddMarkers/AddOrRemoveMarkersAddShortcuts.tsx +++ b/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/AddMarkers/AddOrRemoveMarkersAddShortcuts.tsx @@ -5,7 +5,7 @@ import { CoatOfArmsMapData } from '@/topic/Heraldry/types'; import { useFilterModificationStore, includeUnitInMarker, - selectUnitIncludeModifictions, + selectUnitIncludeModifications, selectShortcuts, } from '@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore'; import useGetUnitMarkersFromCache from '@/topic/Heraldry/features/modify/hooks/useGetUnitMarkersFromCache'; @@ -20,8 +20,8 @@ type Props = { } const AddOrRemoveMarkersSection = ({ unit }: Props) => { - const includeAnimal = useFilterModificationStore(selectUnitIncludeModifictions(unit, 'animal')); - const includeItem = useFilterModificationStore(selectUnitIncludeModifictions(unit, 'item')); + const includeAnimal = useFilterModificationStore(selectUnitIncludeModifications(unit, 'animal')); + const includeItem = useFilterModificationStore(selectUnitIncludeModifications(unit, 'item')); const { animals, items, diff --git a/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/RemoveMarkers/RemoveMarkers.tsx b/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/RemoveMarkers/RemoveMarkers.tsx index 56eaa2c00..7fe6b8873 100644 --- a/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/RemoveMarkers/RemoveMarkers.tsx +++ b/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/RemoveMarkers/RemoveMarkers.tsx @@ -12,7 +12,7 @@ import IconCrown from '@/components/Icons/IconCrown'; import ButtonText from '@/components/UI/ButtonText'; -import { useFilterModificationStore, excludeUnitFromMarker, selectUnitExcludeModifictions } from '@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore'; +import { useFilterModificationStore, excludeUnitFromMarker, selectUnitExcludeModifications } from '@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore'; import useGetUnitMarkersFromCache from '@/topic/Heraldry/features/modify/hooks/useGetUnitMarkersFromCache'; @@ -22,8 +22,8 @@ type Props = { } const RemoveMarkers = ({ unit }: Props) => { - const excludedAnimal = useFilterModificationStore(selectUnitExcludeModifictions(unit, 'animal')); - const excludeItem = useFilterModificationStore(selectUnitExcludeModifictions(unit, 'item')); + const excludedAnimal = useFilterModificationStore(selectUnitExcludeModifications(unit, 'animal')); + const excludeItem = useFilterModificationStore(selectUnitExcludeModifications(unit, 'item')); const { t } = useTranslation(); diff --git a/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/RemoveModifications/RemoveModifications.tsx b/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/RemoveModifications/RemoveModifications.tsx index aca9fe441..fbee50810 100644 --- a/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/RemoveModifications/RemoveModifications.tsx +++ b/src/topic/Heraldry/features/modifyMarkers/components/AddOrRemoveMarkers/RemoveModifications/RemoveModifications.tsx @@ -12,8 +12,8 @@ import ButtonText from '@/components/UI/ButtonText'; import { useFilterModificationStore, - selectUnitExcludeModifictions, - selectUnitIncludeModifictions, + selectUnitExcludeModifications, + selectUnitIncludeModifications, removeFromIncludeAndExcludeInMarker, } from '@/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore'; @@ -24,10 +24,10 @@ type Props = { const buttonClassName = 'hover:!bg-[#ff00004f]'; const RemoveModifications = ({ unit }: Props) => { - const includeAnimal = useFilterModificationStore(selectUnitIncludeModifictions(unit, 'animal')); - const includeItem = useFilterModificationStore(selectUnitIncludeModifictions(unit, 'item')); - const excludedAnimal = useFilterModificationStore(selectUnitExcludeModifictions(unit, 'animal')); - const excludeItem = useFilterModificationStore(selectUnitExcludeModifictions(unit, 'item')); + const includeAnimal = useFilterModificationStore(selectUnitIncludeModifications(unit, 'animal')); + const includeItem = useFilterModificationStore(selectUnitIncludeModifications(unit, 'item')); + const excludedAnimal = useFilterModificationStore(selectUnitExcludeModifications(unit, 'animal')); + const excludeItem = useFilterModificationStore(selectUnitExcludeModifications(unit, 'item')); const { t } = useTranslation(); diff --git a/src/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore.ts b/src/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore.ts index dcd0d6956..dde3de58a 100644 --- a/src/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore.ts +++ b/src/topic/Heraldry/features/modifyMarkers/stores/filtersModificationStore.ts @@ -133,9 +133,9 @@ const getListForUnit = return list; }; -export const selectUnitExcludeModifictions = getListForUnit("exclude"); +export const selectUnitExcludeModifications = getListForUnit("exclude"); -export const selectUnitIncludeModifictions = getListForUnit("include"); +export const selectUnitIncludeModifications = getListForUnit("include"); type Shortcut = { name: string; type: "animal" | "item"; total: number }; diff --git a/src/topic/Heraldry/stores/filtersDevelopmentStore.ts b/src/topic/Heraldry/stores/filtersDevelopmentStore.ts index d4ba4612a..8e443b8e1 100644 --- a/src/topic/Heraldry/stores/filtersDevelopmentStore.ts +++ b/src/topic/Heraldry/stores/filtersDevelopmentStore.ts @@ -34,7 +34,7 @@ export const useFiltersDevelopmentStore = create() ) ) -export const toggleFilterDevlopmentMode = () => { +export const toggleFilterDevelopmentMode = () => { useFiltersDevelopmentStore.setState((state) => ({ ...state, isModeActive: !state.isModeActive, From c9bba25fd601fd028935aa683c36f58515d2f935 Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Sun, 9 Nov 2025 23:53:24 +0100 Subject: [PATCH 3/9] Sorting includes and excludes --- public/data/heraldry/dk/filters.json | 1753 +++++++++-------- .../MergeModificationButton.tsx | 2 +- .../utils/get-merged-filter-data.ts | 27 +- 3 files changed, 902 insertions(+), 880 deletions(-) diff --git a/public/data/heraldry/dk/filters.json b/public/data/heraldry/dk/filters.json index 075a3bbbb..ef9f039d2 100644 --- a/public/data/heraldry/dk/filters.json +++ b/public/data/heraldry/dk/filters.json @@ -1,877 +1,878 @@ { - "animals": [ - { - "name": "shell", - "include": [ - { - "imageHash": "39088620", - "note": "Ballerup Kommune" - }, - { - "imageHash": "4c4656f2", - "note": "Århus Amt" - } - ], - "exclude": [] - }, - { - "name": "bird", - "include": [ - { - "imageHash": "58871dee", - "note": "Vordingborg Kommune" - }, - { - "imageHash": "9a5aa65", - "note": "Lolland Kommune" - }, - { - "imageHash": "751f40fb", - "note": "Gladsaxe Kommune" - }, - { - "imageHash": "6cb530e8", - "note": "Morsø Kommune" - }, - { - "imageHash": "4586f70f", - "note": "Jammerbugt Kommune" - }, - { - "imageHash": "2d948bc5", - "note": "Herning Kommune" - }, - { - "imageHash": "7c98f409", - "note": "Præstø Amt" - }, - { - "imageHash": "38f544cd", - "note": "Kolding Kommune" - }, - { - "imageHash": "9e69e7e", - "note": "Viborg Amt" - }, - { - "imageHash": "6cdfabd7", - "note": "Viborg Amt" - }, - { - "imageHash": "2682e547", - "note": "Furesø Kommune" - }, - { - "imageHash": "34ebfeb2", - "note": "Frederiksberg Kommune" - }, - { - "imageHash": "2f3d7b84", - "note": "Frederiksberg Kommune" - } - ], - "exclude": [] - }, - { - "name": "swan", - "include": [ - { - "imageHash": "62b1f2e4", - "note": "Fredensborg Kommune" - }, - { - "imageHash": "8bad573", - "note": "Assens" - } - ], - "exclude": [] - }, - { - "name": "fish", - "include": [ - { - "imageHash": "211be114", - "note": "Skive Kommune" - }, - { - "imageHash": "509dec85", - "note": "Ringkøbing-Skjern Kommune" - }, - { - "imageHash": "4069bdc6", - "note": "Aabenraa Kommune" - }, - { - "imageHash": "58e0c633", - "note": "Middelfart Kommune" - } - ], - "exclude": [] - }, - { - "name": "bullBison", - "include": [ - { - "imageHash": "7c3484cd", - "note": "Rødovre Kommune" - }, - { - "imageHash": "3cc1f647", - "note": "Aalborg Amt" - } - ] - }, - { - "name": "eagle", - "include": [ - { - "imageHash": "7688f5", - "note": "Roskilde Kommune" - } - ] - }, - { - "name": "dragon", - "include": [ - { - "imageHash": "1224f24", - "note": "Bornholms Amt" - }, - { - "imageHash": "3d7bdaa4", - "note": "Bornholms Amt" - }, - { - "imageHash": "1224f24", - "note": "Bornholms Regionskommune" - }, - { - "imageHash": "78d2236c", - "note": "Storstrøms Amt" - }, - { - "imageHash": "270457c0", - "note": "Storstrøms Amt" - } - ] - }, - { - "name": "rooster", - "include": [ - { - "imageHash": "76b1987f", - "note": "Albertslund Kommune" - } - ] - }, - { - "name": "goose", - "include": [ - { - "imageHash": "23a65f72", - "note": "Vallensbæk Kommune" - }, - { - "imageHash": "270457c0", - "note": "Storstrøms Amt" - } - ], - "exclude": [] - }, - { - "name": "seahorse", - "include": [ - { - "imageHash": "5bf9d8c2", - "note": "Fanø Kommune" - } - ] - }, - { - "name": "horse", - "include": [ - { - "imageHash": "8118c8e", - "note": "Holstebro Kommune" - }, - { - "imageHash": "29ae0449", - "note": "Horsens Kommune" - }, - { - "imageHash": "601fd73d", - "note": "Odsherred Kommune" - }, - { - "imageHash": "1ce895d0", - "note": "Faxe Kommune" - } - ] - }, - { - "name": "snake", - "include": [ - { - "imageHash": "3d64fac", - "note": "Vestsjællands Amt" - } - ] - }, - { - "name": "deer", - "include": [ - { - "imageHash": "3d77dd27", - "note": "Hørsholm Kommune" - }, - { - "imageHash": "71b422c3", - "note": "Herlev Kommune" - }, - { - "imageHash": "4c4656f2", - "note": "Århus Amt" - }, - { - "imageHash": "1a3f1035", - "note": "Ringkjøbing Amt" - }, - { - "imageHash": "29072363", - "note": "Vestjylland" - } - ] - }, - { - "name": "lion", - "include": [ - { - "imageHash": "7a183462", - "note": "Nordjyllands Amt" - }, - { - "imageHash": "3fce7b8", - "note": "Nordjyllands Amt" - }, - { - "imageHash": "7e50ced", - "note": "Varde Kommune" - }, - { - "imageHash": "53b98035", - "note": "Ribe Amt" - }, - { - "imageHash": "24c21728", - "note": "Ribe Amt" - }, - { - "imageHash": "14172d38", - "note": "Fredericia Kommune" - }, - { - "imageHash": "76bb1e9a", - "note": "Sønderjyllands Amt" - } - ] - } - ], - "items": [ - { - "name": "bucket", - "include": [ - { - "imageHash": "33b5236c", - "note": "Brøndby Kommune" - } - ] - }, - { - "name": "key", - "include": [ - { - "imageHash": "10d934a", - "note": "Næstved Kommune" - } - ] - }, - { - "name": "horn", - "include": [ - { - "imageHash": "61f1f6d7", - "note": "Ishøj Kommune" - } - ] - }, - { - "name": "heart", - "include": [ - { - "imageHash": "3fce7b8", - "note": "Nordjyllands Amt" - } - ] - }, - { - "name": "crown", - "include": [ - { - "imageHash": "51a02953", - "note": "Brønderslev Kommune" - }, - { - "imageHash": "5e94e0b5", - "note": "Hjørring Kommune" - }, - { - "imageHash": "193fe82b", - "note": "Thisted Kommune" - }, - { - "imageHash": "9e69e7e", - "note": "Viborg Amt" - }, - { - "imageHash": "24c21728", - "note": "Ribe Amt" - }, - { - "imageHash": "53b98035", - "note": "Ribe Amt" - }, - { - "imageHash": "7d9d60a", - "note": "Odense Amt" - }, - { - "imageHash": "10d934a", - "note": "Næstved Kommune" - }, - { - "imageHash": "614319fc", - "note": "Stevns Kommune" - }, - { - "imageHash": "35196927", - "note": "Orø Sogn" - }, - { - "imageHash": "3d77dd27", - "note": "Hørsholm Kommune" - }, - { - "imageHash": "199cd45d", - "note": "Frederiksborg Amt" - }, - { - "imageHash": "3d71891c", - "note": "Frederiksborg Amt" - }, - { - "imageHash": "7350ee6f", - "note": "Hillerød Kommune" - }, - { - "imageHash": "62b1f2e4", - "note": "Fredensborg Kommune" - }, - { - "imageHash": "2fd11556", - "note": "Halsnæs Kommune" - }, - { - "imageHash": "3a195ca0", - "note": "Aabenraa Amt" - }, - { - "imageHash": "2f3d7b84", - "note": "Frederiksberg Kommune" - }, - { - "imageHash": "34ebfeb2", - "note": "Frederiksberg Kommune" - }, - { - "imageHash": "43c81e43", - "note": "Københavns Amt" - }, - { - "imageHash": "d3b7ac1", - "note": "Københavns Amt" - }, - { - "imageHash": "7bda85f5", - "note": "Odense Kommune" - }, - { - "imageHash": "7ba136af", - "note": "Nyborg Kommune" - }, - { - "imageHash": "411943cf", - "note": "Køge Kommune" - }, - { - "imageHash": "6e6e7e17", - "note": "Ringsted Kommune" - }, - { - "imageHash": "14172d38", - "note": "Fredericia Kommune" - } - ], - "exclude": [] - }, - { - "name": "bell", - "include": [ - { - "imageHash": "3cc227ab", - "note": "Tårnby Kommune" - }, - { - "imageHash": "bfe2931", - "note": "Gentofte Kommune" - } - ] - }, - { - "name": "windmill", - "include": [ - { - "imageHash": "4ba3758e", - "note": "Sønderjyllands Amt" - } - ] - }, - { - "name": "hammer", - "include": [ - { - "imageHash": "2d948bc5", - "note": "Herning Kommune" - } - ] - }, - { - "name": "cross", - "include": [ - { - "imageHash": "46c24827", - "note": "Lemvig Kommune" - }, - { - "imageHash": "4b17de3c", - "note": "Vejle Amt" - }, - { - "imageHash": "2cc8ed4c", - "note": "Vejle Amt" - }, - { - "imageHash": "411943cf", - "note": "Køge Kommune" - }, - { - "imageHash": "61f1f6d7", - "note": "Ishøj Kommune" - }, - { - "imageHash": "2b8c3f7c", - "note": "Kalundborg Kommune" - }, - { - "imageHash": "7bda85f5", - "note": "Odense Kommune" - }, - { - "imageHash": "7ba136af", - "note": "Nyborg Kommune" - }, - { - "imageHash": "f5b97da", - "note": "Faaborg-Midtfyn Kommune" - } - ], - "exclude": [] - }, - { - "name": "walls", - "include": [ - { - "imageHash": "33c1d1d1", - "note": "Aalborg Kommune" - }, - { - "imageHash": "3fce7b8", - "note": "Nordjyllands Amt" - }, - { - "imageHash": "7150f9fa", - "note": "Viborg Kommune" - }, - { - "imageHash": "46c24827", - "note": "Lemvig Kommune" - }, - { - "imageHash": "72e61a54", - "note": "Silkeborg Kommune" - }, - { - "imageHash": "5b70756f", - "note": "Skanderborg Kommune" - }, - { - "imageHash": "6112eeb8", - "note": "Aarhus Kommune" - }, - { - "imageHash": "7bda85f5", - "note": "Odense Kommune" - }, - { - "imageHash": "7ba136af", - "note": "Nyborg Kommune" - }, - { - "imageHash": "f5b97da", - "note": "Faaborg-Midtfyn Kommune" - }, - { - "imageHash": "6d4df606", - "note": "Sønderborg Kommune" - }, - { - "imageHash": "626e1dfc", - "note": "Hvidovre Kommune" - }, - { - "imageHash": "512f1faf", - "note": "Københavns Kommune" - }, - { - "imageHash": "2f3d7b84", - "note": "Frederiksberg Kommune" - }, - { - "imageHash": "34ebfeb2", - "note": "Frederiksberg Kommune" - }, - { - "imageHash": "7cebe545", - "note": "Høje-Taastrup Kommune" - }, - { - "imageHash": "7688f5", - "note": "Roskilde Kommune" - }, - { - "imageHash": "3cc227ab", - "note": "Tårnby Kommune" - }, - { - "imageHash": "24c21728", - "note": "Ribe Amt" - }, - { - "imageHash": "53b98035", - "note": "Ribe Amt" - }, - { - "imageHash": "411943cf", - "note": "Køge Kommune" - }, - { - "imageHash": "2b8c3f7c", - "note": "Kalundborg Kommune" - }, - { - "imageHash": "7c98f409", - "note": "Præstø Amt" - }, - { - "imageHash": "2d948bc5", - "note": "Herning Kommune" - }, - { - "imageHash": "3bac3ee7", - "note": "Svendborg Kommune" - } - ], - "exclude": [] - }, - { - "name": "sword", - "include": [ - { - "imageHash": "5e94e0b5", - "note": "Hjørring Kommune" - }, - { - "imageHash": "6112eeb8", - "note": "Aarhus Kommune" - }, - { - "imageHash": "14172d38", - "note": "Fredericia Kommune" - }, - { - "imageHash": "3a195ca0", - "note": "Aabenraa Amt" - }, - { - "imageHash": "512f1faf", - "note": "Københavns Kommune" - } - ], - "exclude": [] - }, - { - "name": "earOfGrain", - "include": [ - { - "imageHash": "4ba3758e", - "note": "Sønderjyllands Amt" - } - ] - }, - { - "name": "wheel", - "include": [ - { - "imageHash": "5e94e0b5", - "note": "Hjørring Kommune" - }, - { - "imageHash": "601fd73d", - "note": "Odsherred Kommune" - } - ] - }, - { - "name": "anchor", - "include": [ - { - "imageHash": "19f0dc00", - "note": "Struer Kommune" - }, - { - "imageHash": "7a7c344e", - "note": "Esbjerg Kommune" - }, - { - "imageHash": "373eded5", - "note": "Dragør Kommune" - }, - { - "imageHash": "62b2b5ae", - "note": "Århus Amt" - }, - { - "imageHash": "6112eeb8", - "note": "Aarhus Kommune" - }, - { - "imageHash": "adbd40e", - "note": "Århus Amt" - } - ], - "exclude": [] - }, - { - "name": "axeSaw", - "include": [ - { - "imageHash": "4b17de3c", - "note": "Vejle Amt" - }, - { - "imageHash": "2cc8ed4c", - "note": "Vejle Amt" - } - ] - }, - { - "name": "lily", - "include": [ - { - "imageHash": "7bda85f5", - "note": "Odense Kommune" - }, - { - "imageHash": "330dd8b", - "note": "Glostrup Kommune" - } - ], - "exclude": [] - }, - { - "name": "boat", - "include": [ - { - "imageHash": "760ace11", - "note": "Thisted" - }, - { - "imageHash": "693dd7e0", - "note": "Tønder Kommune" - }, - { - "imageHash": "6ecc09d", - "note": "Odense Amt" - }, - { - "imageHash": "625c65ba", - "note": "Nordfyns Kommune" - }, - { - "imageHash": "35196927", - "note": "Orø Sogn" - }, - { - "imageHash": "1b11a187", - "note": "Helsingør Kommune" - }, - { - "imageHash": "177b2e59", - "note": "Guldborgsund Kommune" - }, - { - "imageHash": "58d2c656", - "note": "Frederikssund Kommune" - } - ], - "exclude": [] - }, - { - "name": "flower", - "include": [ - { - "imageHash": "38f544cd", - "note": "Kolding Kommune" - }, - { - "imageHash": "fb21f2", - "note": "Assens Kommune" - }, - { - "imageHash": "2fd11556", - "note": "Halsnæs Kommune" - }, - { - "imageHash": "758fc42f", - "note": "Roskilde Amt" - }, - { - "imageHash": "76cbd795", - "note": "Roskilde Amt" - }, - { - "imageHash": "7688f5", - "note": "Roskilde Kommune" - }, - { - "imageHash": "6e6e7e17", - "note": "Ringsted Kommune" - }, - { - "imageHash": "7d9d60a", - "note": "Odense Amt" - }, - { - "imageHash": "487ebffc", - "note": "Langeland Kommune" - } - ], - "exclude": [] - }, - { - "name": "tree", - "include": [ - { - "imageHash": "7a803ebf", - "note": "Odder Kommune" - }, - { - "imageHash": "29ae0449", - "note": "Horsens Kommune" - }, - { - "imageHash": "6a1ba53c", - "note": "Vejle Kommune" - }, - { - "imageHash": "1d5d540a", - "note": "Fyns Amt" - }, - { - "imageHash": "8bad573", - "note": "Assens" - }, - { - "imageHash": "5160cca", - "note": "Ærø Kommune" - }, - { - "imageHash": "1409da95", - "note": "Egedal Kommune" - }, - { - "imageHash": "4457e8bc", - "note": "Holbæk Kommune" - }, - { - "imageHash": "34ebfeb2", - "note": "Frederiksberg Kommune" - }, - { - "imageHash": "2f3d7b84", - "note": "Frederiksberg Kommune" - }, - { - "imageHash": "762ab259", - "note": "Rudersdal Kommune" - }, - { - "imageHash": "199cd45d", - "note": "Frederiksborg Amt" - }, - { - "imageHash": "3d71891c", - "note": "Frederiksborg Amt" - }, - { - "imageHash": "bfe2931", - "note": "Gentofte Kommune" - }, - { - "imageHash": "7a7c344e", - "note": "Esbjerg Kommune" - }, - { - "imageHash": "6cb530e8", - "note": "Morsø Kommune" - }, - { - "imageHash": "62b2b5ae", - "note": "Århus Amt" - }, - { - "imageHash": "43c81e43", - "note": "Københavns Amt" - }, - { - "imageHash": "d3b7ac1", - "note": "Københavns Amt" - }, - { - "imageHash": "7a183462", - "note": "Nordjyllands Amt" - } - ], - "exclude": [] - } - ] -} + "types": [], + "animals": [ + { + "name": "bullBison", + "include": [ + { + "imageHash": "7c3484cd", + "note": "Rødovre Kommune" + }, + { + "imageHash": "3cc1f647", + "note": "Aalborg Amt" + } + ] + }, + { + "name": "goose", + "include": [ + { + "imageHash": "23a65f72", + "note": "Vallensbæk Kommune" + }, + { + "imageHash": "270457c0", + "note": "Storstrøms Amt" + } + ], + "exclude": [] + }, + { + "name": "deer", + "include": [ + { + "imageHash": "3d77dd27", + "note": "Hørsholm Kommune" + }, + { + "imageHash": "71b422c3", + "note": "Herlev Kommune" + }, + { + "imageHash": "4c4656f2", + "note": "Århus Amt" + }, + { + "imageHash": "1a3f1035", + "note": "Ringkjøbing Amt" + }, + { + "imageHash": "29072363", + "note": "Vestjylland" + } + ] + }, + { + "name": "rooster", + "include": [ + { + "imageHash": "76b1987f", + "note": "Albertslund Kommune" + } + ] + }, + { + "name": "seahorse", + "include": [ + { + "imageHash": "5bf9d8c2", + "note": "Fanø Kommune" + } + ] + }, + { + "name": "horse", + "include": [ + { + "imageHash": "8118c8e", + "note": "Holstebro Kommune" + }, + { + "imageHash": "29ae0449", + "note": "Horsens Kommune" + }, + { + "imageHash": "601fd73d", + "note": "Odsherred Kommune" + }, + { + "imageHash": "1ce895d0", + "note": "Faxe Kommune" + } + ] + }, + { + "name": "lion", + "include": [ + { + "imageHash": "7a183462", + "note": "Nordjyllands Amt" + }, + { + "imageHash": "3fce7b8", + "note": "Nordjyllands Amt" + }, + { + "imageHash": "7e50ced", + "note": "Varde Kommune" + }, + { + "imageHash": "53b98035", + "note": "Ribe Amt" + }, + { + "imageHash": "24c21728", + "note": "Ribe Amt" + }, + { + "imageHash": "14172d38", + "note": "Fredericia Kommune" + }, + { + "imageHash": "76bb1e9a", + "note": "Sønderjyllands Amt" + } + ] + }, + { + "name": "swan", + "include": [ + { + "imageHash": "62b1f2e4", + "note": "Fredensborg Kommune" + }, + { + "imageHash": "8bad573", + "note": "Assens" + } + ], + "exclude": [] + }, + { + "name": "shell", + "include": [ + { + "imageHash": "39088620", + "note": "Ballerup Kommune" + }, + { + "imageHash": "4c4656f2", + "note": "Århus Amt" + } + ], + "exclude": [] + }, + { + "name": "eagle", + "include": [ + { + "imageHash": "7688f5", + "note": "Roskilde Kommune" + } + ] + }, + { + "name": "bird", + "include": [ + { + "imageHash": "58871dee", + "note": "Vordingborg Kommune" + }, + { + "imageHash": "9a5aa65", + "note": "Lolland Kommune" + }, + { + "imageHash": "751f40fb", + "note": "Gladsaxe Kommune" + }, + { + "imageHash": "6cb530e8", + "note": "Morsø Kommune" + }, + { + "imageHash": "4586f70f", + "note": "Jammerbugt Kommune" + }, + { + "imageHash": "2d948bc5", + "note": "Herning Kommune" + }, + { + "imageHash": "7c98f409", + "note": "Præstø Amt" + }, + { + "imageHash": "38f544cd", + "note": "Kolding Kommune" + }, + { + "imageHash": "9e69e7e", + "note": "Viborg Amt" + }, + { + "imageHash": "6cdfabd7", + "note": "Viborg Amt" + }, + { + "imageHash": "2682e547", + "note": "Furesø Kommune" + }, + { + "imageHash": "34ebfeb2", + "note": "Frederiksberg Kommune" + }, + { + "imageHash": "2f3d7b84", + "note": "Frederiksberg Kommune" + } + ], + "exclude": [] + }, + { + "name": "fish", + "include": [ + { + "imageHash": "211be114", + "note": "Skive Kommune" + }, + { + "imageHash": "509dec85", + "note": "Ringkøbing-Skjern Kommune" + }, + { + "imageHash": "4069bdc6", + "note": "Aabenraa Kommune" + }, + { + "imageHash": "58e0c633", + "note": "Middelfart Kommune" + } + ], + "exclude": [] + }, + { + "name": "dragon", + "include": [ + { + "imageHash": "1224f24", + "note": "Bornholms Amt" + }, + { + "imageHash": "3d7bdaa4", + "note": "Bornholms Amt" + }, + { + "imageHash": "1224f24", + "note": "Bornholms Regionskommune" + }, + { + "imageHash": "78d2236c", + "note": "Storstrøms Amt" + }, + { + "imageHash": "270457c0", + "note": "Storstrøms Amt" + } + ] + }, + { + "name": "snake", + "include": [ + { + "imageHash": "3d64fac", + "note": "Vestsjællands Amt" + } + ] + } + ], + "items": [ + { + "name": "tree", + "include": [ + { + "imageHash": "7a803ebf", + "note": "Odder Kommune" + }, + { + "imageHash": "29ae0449", + "note": "Horsens Kommune" + }, + { + "imageHash": "6a1ba53c", + "note": "Vejle Kommune" + }, + { + "imageHash": "1d5d540a", + "note": "Fyns Amt" + }, + { + "imageHash": "8bad573", + "note": "Assens" + }, + { + "imageHash": "5160cca", + "note": "Ærø Kommune" + }, + { + "imageHash": "1409da95", + "note": "Egedal Kommune" + }, + { + "imageHash": "4457e8bc", + "note": "Holbæk Kommune" + }, + { + "imageHash": "34ebfeb2", + "note": "Frederiksberg Kommune" + }, + { + "imageHash": "2f3d7b84", + "note": "Frederiksberg Kommune" + }, + { + "imageHash": "762ab259", + "note": "Rudersdal Kommune" + }, + { + "imageHash": "199cd45d", + "note": "Frederiksborg Amt" + }, + { + "imageHash": "3d71891c", + "note": "Frederiksborg Amt" + }, + { + "imageHash": "bfe2931", + "note": "Gentofte Kommune" + }, + { + "imageHash": "7a7c344e", + "note": "Esbjerg Kommune" + }, + { + "imageHash": "6cb530e8", + "note": "Morsø Kommune" + }, + { + "imageHash": "62b2b5ae", + "note": "Århus Amt" + }, + { + "imageHash": "43c81e43", + "note": "Københavns Amt" + }, + { + "imageHash": "d3b7ac1", + "note": "Københavns Amt" + }, + { + "imageHash": "7a183462", + "note": "Nordjyllands Amt" + } + ], + "exclude": [] + }, + { + "name": "bell", + "include": [ + { + "imageHash": "3cc227ab", + "note": "Tårnby Kommune" + }, + { + "imageHash": "bfe2931", + "note": "Gentofte Kommune" + } + ] + }, + { + "name": "key", + "include": [ + { + "imageHash": "10d934a", + "note": "Næstved Kommune" + } + ] + }, + { + "name": "earOfGrain", + "include": [ + { + "imageHash": "4ba3758e", + "note": "Sønderjyllands Amt" + } + ] + }, + { + "name": "wheel", + "include": [ + { + "imageHash": "5e94e0b5", + "note": "Hjørring Kommune" + }, + { + "imageHash": "601fd73d", + "note": "Odsherred Kommune" + } + ] + }, + { + "name": "crown", + "include": [ + { + "imageHash": "51a02953", + "note": "Brønderslev Kommune" + }, + { + "imageHash": "5e94e0b5", + "note": "Hjørring Kommune" + }, + { + "imageHash": "193fe82b", + "note": "Thisted Kommune" + }, + { + "imageHash": "9e69e7e", + "note": "Viborg Amt" + }, + { + "imageHash": "24c21728", + "note": "Ribe Amt" + }, + { + "imageHash": "53b98035", + "note": "Ribe Amt" + }, + { + "imageHash": "7d9d60a", + "note": "Odense Amt" + }, + { + "imageHash": "10d934a", + "note": "Næstved Kommune" + }, + { + "imageHash": "614319fc", + "note": "Stevns Kommune" + }, + { + "imageHash": "35196927", + "note": "Orø Sogn" + }, + { + "imageHash": "3d77dd27", + "note": "Hørsholm Kommune" + }, + { + "imageHash": "199cd45d", + "note": "Frederiksborg Amt" + }, + { + "imageHash": "3d71891c", + "note": "Frederiksborg Amt" + }, + { + "imageHash": "7350ee6f", + "note": "Hillerød Kommune" + }, + { + "imageHash": "62b1f2e4", + "note": "Fredensborg Kommune" + }, + { + "imageHash": "2fd11556", + "note": "Halsnæs Kommune" + }, + { + "imageHash": "3a195ca0", + "note": "Aabenraa Amt" + }, + { + "imageHash": "2f3d7b84", + "note": "Frederiksberg Kommune" + }, + { + "imageHash": "34ebfeb2", + "note": "Frederiksberg Kommune" + }, + { + "imageHash": "43c81e43", + "note": "Københavns Amt" + }, + { + "imageHash": "d3b7ac1", + "note": "Københavns Amt" + }, + { + "imageHash": "7bda85f5", + "note": "Odense Kommune" + }, + { + "imageHash": "7ba136af", + "note": "Nyborg Kommune" + }, + { + "imageHash": "411943cf", + "note": "Køge Kommune" + }, + { + "imageHash": "6e6e7e17", + "note": "Ringsted Kommune" + }, + { + "imageHash": "14172d38", + "note": "Fredericia Kommune" + } + ], + "exclude": [] + }, + { + "name": "anchor", + "include": [ + { + "imageHash": "19f0dc00", + "note": "Struer Kommune" + }, + { + "imageHash": "7a7c344e", + "note": "Esbjerg Kommune" + }, + { + "imageHash": "373eded5", + "note": "Dragør Kommune" + }, + { + "imageHash": "62b2b5ae", + "note": "Århus Amt" + }, + { + "imageHash": "6112eeb8", + "note": "Aarhus Kommune" + }, + { + "imageHash": "adbd40e", + "note": "Århus Amt" + } + ], + "exclude": [] + }, + { + "name": "cross", + "include": [ + { + "imageHash": "46c24827", + "note": "Lemvig Kommune" + }, + { + "imageHash": "4b17de3c", + "note": "Vejle Amt" + }, + { + "imageHash": "2cc8ed4c", + "note": "Vejle Amt" + }, + { + "imageHash": "411943cf", + "note": "Køge Kommune" + }, + { + "imageHash": "61f1f6d7", + "note": "Ishøj Kommune" + }, + { + "imageHash": "2b8c3f7c", + "note": "Kalundborg Kommune" + }, + { + "imageHash": "7bda85f5", + "note": "Odense Kommune" + }, + { + "imageHash": "7ba136af", + "note": "Nyborg Kommune" + }, + { + "imageHash": "f5b97da", + "note": "Faaborg-Midtfyn Kommune" + } + ], + "exclude": [] + }, + { + "name": "flower", + "include": [ + { + "imageHash": "38f544cd", + "note": "Kolding Kommune" + }, + { + "imageHash": "fb21f2", + "note": "Assens Kommune" + }, + { + "imageHash": "2fd11556", + "note": "Halsnæs Kommune" + }, + { + "imageHash": "758fc42f", + "note": "Roskilde Amt" + }, + { + "imageHash": "76cbd795", + "note": "Roskilde Amt" + }, + { + "imageHash": "7688f5", + "note": "Roskilde Kommune" + }, + { + "imageHash": "6e6e7e17", + "note": "Ringsted Kommune" + }, + { + "imageHash": "7d9d60a", + "note": "Odense Amt" + }, + { + "imageHash": "487ebffc", + "note": "Langeland Kommune" + } + ], + "exclude": [] + }, + { + "name": "lily", + "include": [ + { + "imageHash": "7bda85f5", + "note": "Odense Kommune" + }, + { + "imageHash": "330dd8b", + "note": "Glostrup Kommune" + } + ], + "exclude": [] + }, + { + "name": "boat", + "include": [ + { + "imageHash": "760ace11", + "note": "Thisted" + }, + { + "imageHash": "693dd7e0", + "note": "Tønder Kommune" + }, + { + "imageHash": "6ecc09d", + "note": "Odense Amt" + }, + { + "imageHash": "625c65ba", + "note": "Nordfyns Kommune" + }, + { + "imageHash": "35196927", + "note": "Orø Sogn" + }, + { + "imageHash": "1b11a187", + "note": "Helsingør Kommune" + }, + { + "imageHash": "177b2e59", + "note": "Guldborgsund Kommune" + }, + { + "imageHash": "58d2c656", + "note": "Frederikssund Kommune" + } + ], + "exclude": [] + }, + { + "name": "sword", + "include": [ + { + "imageHash": "5e94e0b5", + "note": "Hjørring Kommune" + }, + { + "imageHash": "6112eeb8", + "note": "Aarhus Kommune" + }, + { + "imageHash": "14172d38", + "note": "Fredericia Kommune" + }, + { + "imageHash": "3a195ca0", + "note": "Aabenraa Amt" + }, + { + "imageHash": "512f1faf", + "note": "Københavns Kommune" + } + ], + "exclude": [] + }, + { + "name": "hammer", + "include": [ + { + "imageHash": "2d948bc5", + "note": "Herning Kommune" + } + ] + }, + { + "name": "horn", + "include": [ + { + "imageHash": "61f1f6d7", + "note": "Ishøj Kommune" + } + ] + }, + { + "name": "heart", + "include": [ + { + "imageHash": "3fce7b8", + "note": "Nordjyllands Amt" + } + ] + }, + { + "name": "axeSaw", + "include": [ + { + "imageHash": "4b17de3c", + "note": "Vejle Amt" + }, + { + "imageHash": "2cc8ed4c", + "note": "Vejle Amt" + } + ] + }, + { + "name": "bucket", + "include": [ + { + "imageHash": "33b5236c", + "note": "Brøndby Kommune" + } + ] + }, + { + "name": "windmill", + "include": [ + { + "imageHash": "4ba3758e", + "note": "Sønderjyllands Amt" + } + ] + }, + { + "name": "walls", + "include": [ + { + "imageHash": "33c1d1d1", + "note": "Aalborg Kommune" + }, + { + "imageHash": "3fce7b8", + "note": "Nordjyllands Amt" + }, + { + "imageHash": "7150f9fa", + "note": "Viborg Kommune" + }, + { + "imageHash": "46c24827", + "note": "Lemvig Kommune" + }, + { + "imageHash": "72e61a54", + "note": "Silkeborg Kommune" + }, + { + "imageHash": "5b70756f", + "note": "Skanderborg Kommune" + }, + { + "imageHash": "6112eeb8", + "note": "Aarhus Kommune" + }, + { + "imageHash": "7bda85f5", + "note": "Odense Kommune" + }, + { + "imageHash": "7ba136af", + "note": "Nyborg Kommune" + }, + { + "imageHash": "f5b97da", + "note": "Faaborg-Midtfyn Kommune" + }, + { + "imageHash": "6d4df606", + "note": "Sønderborg Kommune" + }, + { + "imageHash": "626e1dfc", + "note": "Hvidovre Kommune" + }, + { + "imageHash": "512f1faf", + "note": "Københavns Kommune" + }, + { + "imageHash": "2f3d7b84", + "note": "Frederiksberg Kommune" + }, + { + "imageHash": "34ebfeb2", + "note": "Frederiksberg Kommune" + }, + { + "imageHash": "7cebe545", + "note": "Høje-Taastrup Kommune" + }, + { + "imageHash": "7688f5", + "note": "Roskilde Kommune" + }, + { + "imageHash": "3cc227ab", + "note": "Tårnby Kommune" + }, + { + "imageHash": "24c21728", + "note": "Ribe Amt" + }, + { + "imageHash": "53b98035", + "note": "Ribe Amt" + }, + { + "imageHash": "411943cf", + "note": "Køge Kommune" + }, + { + "imageHash": "2b8c3f7c", + "note": "Kalundborg Kommune" + }, + { + "imageHash": "7c98f409", + "note": "Præstø Amt" + }, + { + "imageHash": "2d948bc5", + "note": "Herning Kommune" + }, + { + "imageHash": "3bac3ee7", + "note": "Svendborg Kommune" + } + ], + "exclude": [] + } + ] +} \ No newline at end of file diff --git a/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx b/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx index e1120bf97..923057580 100644 --- a/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx +++ b/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx @@ -41,7 +41,7 @@ const MergeModificationButton = ({ exclude, }); - copyText(`${JSON.stringify(mergedFilter, null, 4)},`); + copyText(`${JSON.stringify(mergedFilter, null, 4)}`); }; return ( diff --git a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts index 33c935c0f..95bff6161 100644 --- a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts +++ b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts @@ -1,4 +1,8 @@ -import { ComplexManualMarker, MarkerParams } from "@/topic/Heraldry/types"; +import { + ComplexManualMarker, + ManualMarker, + MarkerParams, +} from "@/topic/Heraldry/types"; type Params = { initFilter: MarkerParams; @@ -6,6 +10,23 @@ type Params = { exclude: ComplexManualMarker[]; }; +const sortRules = (a?: ManualMarker, b?: ManualMarker) => { + if (typeof a === "string" && typeof b === "string") { + return b.localeCompare(a); + } + + if ( + typeof (a as ComplexManualMarker)?.imageHash === "string" && + typeof (b as ComplexManualMarker)?.imageHash === "string" + ) { + return (b as ComplexManualMarker).imageHash.localeCompare( + (a as ComplexManualMarker).imageHash + ); + } + + return 0; +}; + export const getMergedFilterData = ({ initFilter, include, @@ -48,7 +69,7 @@ export const getMergedFilterData = ({ return { ...initFilter, - include: [...includeWithRemoved, ...rulesToInclude], - exclude: [...excludeWithRemoved, ...rulesToExclude], + include: [...includeWithRemoved, ...rulesToInclude].sort(sortRules), + exclude: [...excludeWithRemoved, ...rulesToExclude].sort(sortRules), }; }; From a88d1a51ebf87cd59a9c95178a292342608e6f04 Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Mon, 10 Nov 2025 20:02:59 +0100 Subject: [PATCH 4/9] caniuse bump --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1a4e0b2a7..8178e974e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1403,9 +1403,9 @@ camelcase@^4.1.0: integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== caniuse-lite@^1.0.30001646: - version "1.0.30001651" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" - integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== + version "1.0.30001754" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz" + integrity sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg== chalk@^2.4.2: version "2.4.2" From 8ec7bcab0d702edc5ae8085ea6caa5f553f1e818 Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Mon, 10 Nov 2025 20:11:46 +0100 Subject: [PATCH 5/9] Sorting improvments --- public/data/heraldry/nl/filters.json | 707 +++++--- .../nl/formerGemeente-details-data.json | 1592 ++++++++--------- .../heraldry/nl/gemeente-details-data.json | 796 ++++----- .../heraldry/nl/province-details-data.json | 46 +- .../ListOfFilters/FilterSeeds.tsx | 6 +- .../MergeModificationButton.tsx | 2 +- .../utils/get-merged-filter-data.ts | 6 +- .../Heraldry/utils/markers/getMarkers.ts | 6 +- 8 files changed, 1702 insertions(+), 1459 deletions(-) diff --git a/public/data/heraldry/nl/filters.json b/public/data/heraldry/nl/filters.json index e6f86e1d9..d974647e0 100644 --- a/public/data/heraldry/nl/filters.json +++ b/public/data/heraldry/nl/filters.json @@ -1,16 +1,124 @@ { + "types": [], "animals": [ { - "name": "lion", - "phrases": ["halfleeuw", "leeuw", "leeuwen", "leeuwenkoppen"] + "name": "ram", + "phrases": [ + "lammetje", + "lam", + "ram", + "schaap", + "schapen", + "schaapskop", + "ramskoppen" + ] }, { - "name": "leopard", - "phrases": ["luipaarden"] + "name": "stork", + "phrases": [ + "ooievaar", + "ooievaars" + ] }, { - "name": "otter", - "phrases": ["otter"] + "name": "stork", + "phrases": [ + "lepelaar" + ] + }, + { + "name": "beaver", + "phrases": [ + "bever", + "bevers" + ] + }, + { + "name": "bullBison", + "phrases": [ + "halfstier", + "os", + "stier", + "stiertje", + "vaarskalf", + "waterbuffel", + "wisent", + "koe", + "koeien", + "ossenkop" + ] + }, + { + "name": "centaur", + "phrases": [ + "centaur", + "centauren" + ] + }, + { + "name": "crab", + "phrases": [ + "krabben" + ] + }, + { + "name": "heron", + "phrases": [ + "reiger", + "reigers" + ] + }, + { + "name": "boar", + "phrases": [ + "everzwijn", + "everzwijnen", + "zwijn", + "zwijnen", + "zwijnskoppen" + ] + }, + { + "name": "goose", + "phrases": [ + "gans", + "ganzen" + ] + }, + { + "name": "pigeon", + "phrases": [ + "duif", + "duiven" + ] + }, + { + "name": "griffin", + "phrases": [ + "griffioen", + "halffgriffioen" + ] + }, + { + "name": "hawk", + "phrases": [ + "havik", + "haviken" + ] + }, + { + "name": "lizard", + "phrases": [ + "hagedis", + "hagedissen" + ] + }, + { + "name": "unicorn", + "phrases": [ + "eenhoorn", + "eenhoorns" + ] }, { "name": "deer", @@ -27,122 +135,189 @@ ] }, { - "name": "cat", - "phrases": ["kat"] + "name": "duck", + "phrases": [ + "eend", + "eenden" + ] }, { - "name": "horse", - "phrases": ["paard", "paarden", "zeepaarden"] + "name": "rooster", + "phrases": [ + "haan", + "hanen" + ] }, { - "name": "unusualHybrid", - "phrases": ["zeepaarden"] + "name": "horse", + "phrases": [ + "paard", + "paarden", + "zeepaarden" + ] }, { - "name": "griffin", - "phrases": ["griffioen", "halffgriffioen"] + "name": "cat", + "phrases": [ + "kat" + ] }, { - "name": "rabbit", - "phrases": ["haas", "konijn", "konijnen"] + "name": "goat", + "phrases": [ + "geit", + "geiten", + "bok" + ] }, { "name": "raven", - "phrases": ["raaf", "raven"] - }, - { - "name": "eagle", - "phrases": ["adelaar", "adelaars", "arend", "arenden", "adelaarspoot"] - }, - { - "name": "falcon", - "phrases": ["valk", "valken"] - }, - { - "name": "heron", - "phrases": ["reiger", "reigers"] + "phrases": [ + "raaf", + "raven" + ] }, { - "name": "crane", - "phrases": ["kraanvogel", "kraanvogels"] + "name": "raven", + "phrases": [ + "kraai", + "kraaien" + ] }, { - "name": "raven", - "phrases": ["kraai", "kraaien"] + "name": "leopard", + "phrases": [ + "luipaarden" + ] }, { - "name": "hawk", - "phrases": ["havik", "haviken"] + "name": "lion", + "phrases": [ + "halfleeuw", + "leeuw", + "leeuwen", + "leeuwenkoppen" + ] }, { - "name": "owl", - "phrases": ["uil", "uilen"] + "name": "fox", + "phrases": [ + "vos", + "vossen" + ] }, { - "name": "vulture", - "phrases": ["gier", "gieren"] + "name": "swan", + "phrases": [ + "zwaan", + "zwaanen" + ] }, { - "name": "pelican", - "phrases": ["pelikaan", "pelikaanen"] + "name": "salmon", + "phrases": [ + "zalmen", + "zalm" + ] }, { - "name": "stork", - "phrases": ["ooievaar", "ooievaars"] + "name": "moose", + "phrases": [ + "eland", + "elanden" + ] }, { - "name": "duck", - "phrases": ["eend", "eenden"] + "name": "mole", + "phrases": [ + "mol" + ] }, { - "name": "goose", - "phrases": ["gans", "ganzen"] + "name": "butterfly", + "phrases": [ + "vlinder" + ] }, { - "name": "pigeon", - "phrases": ["duif", "duiven"] + "name": "shell", + "phrases": [ + "jacobsschelpen", + "st.jacobsschelpen", + "schelp", + "schelpen", + "schelpje", + "schelpjes", + "zeehorens" + ] }, { - "name": "swan", - "phrases": ["zwaan", "zwaanen"] + "name": "bear", + "phrases": [ + "beer", + "beren", + "berenklaauwen" + ] }, { - "name": "rooster", - "phrases": ["haan", "hanen"] + "name": "bat", + "phrases": [ + "vleermuis", + "vleermuizen" + ] }, { - "name": "snake", - "phrases": ["slang", "slangen"] + "name": "unusualHybrid", + "phrases": [ + "zeepaarden" + ] }, { - "name": "bat", - "phrases": ["vleermuis", "vleermuizen"] + "name": "eagle", + "phrases": [ + "adelaar", + "adelaars", + "arend", + "arenden", + "adelaarspoot" + ] }, { - "name": "boar", + "name": "donkey", "phrases": [ - "everzwijn", - "everzwijnen", - "zwijn", - "zwijnen", - "zwijnskoppen" + "ezel", + "ezels" ] }, { - "name": "whale", - "phrases": ["walvis"] + "name": "parrot", + "phrases": [ + "papegaaien", + "papegaaijen" + ] }, { - "name": "mole", - "phrases": ["mol"] + "name": "pelican", + "phrases": [ + "pelikaan", + "pelikaanen" + ] }, { - "name": "stork", - "phrases": ["lepelaar"] + "name": "dog", + "phrases": [ + "hond", + "honden", + "hondenkoppen", + "hazewindhonden", + "brakkenkoppen" + ] }, { - "name": "crab", - "phrases": ["krabben"] + "name": "bee", + "phrases": [ + "bijen" + ] }, { "name": "bird", @@ -157,32 +332,12 @@ ] }, { - "name": "moose", - "phrases": ["eland", "elanden"] - }, - { - "name": "bullBison", + "name": "crayfish", "phrases": [ - "halfstier", - "os", - "stier", - "stiertje", - "vaarskalf", - "waterbuffel", - "wisent", - "koe", - "koeien", - "ossenkop" + "kreeft", + "kreeften" ] }, - { - "name": "dragon", - "phrases": ["draak", "draken"] - }, - { - "name": "parrot", - "phrases": ["papegaaien", "papegaaijen"] - }, { "name": "fish", "phrases": [ @@ -205,148 +360,224 @@ ] }, { - "name": "bee", - "phrases": ["bijen"] + "name": "vulture", + "phrases": [ + "gier", + "gieren" + ] }, { - "name": "mermaid", - "phrases": ["zeemeermin", "zeemeerminnen"] + "name": "dragon", + "phrases": [ + "draak", + "draken" + ] }, { - "name": "fox", - "phrases": ["vos", "vossen"] + "name": "falcon", + "phrases": [ + "valk", + "valken" + ] }, { - "name": "lizard", - "phrases": ["hagedis", "hagedissen"] + "name": "owl", + "phrases": [ + "uil", + "uilen" + ] }, { - "name": "salmon", - "phrases": ["zalmen", "zalm"] + "name": "mermaid", + "phrases": [ + "zeemeermin", + "zeemeerminnen" + ] }, { - "name": "dog", + "name": "snake", "phrases": [ - "hond", - "honden", - "hondenkoppen", - "hazewindhonden", - "brakkenkoppen" + "slang", + "slangen" ] }, { - "name": "crayfish", - "phrases": ["kreeft", "kreeften"] + "name": "whale", + "phrases": [ + "walvis" + ] }, { - "name": "unicorn", - "phrases": ["eenhoorn", "eenhoorns"] + "name": "squirrel", + "phrases": [ + "eekhoorn", + "eekhoorns" + ] }, { - "name": "goat", - "phrases": ["geit", "geiten", "bok"] + "name": "wolf", + "phrases": [ + "halfwolf", + "wolf", + "wolven" + ] }, { - "name": "ram", + "name": "otter", "phrases": [ - "lammetje", - "lam", - "ram", - "schaap", - "schapen", - "schaapskop", - "ramskoppen" + "otter" ] }, { - "name": "wolf", - "phrases": ["halfwolf", "wolf", "wolven"] + "name": "rabbit", + "phrases": [ + "haas", + "konijn", + "konijnen" + ] }, { - "name": "squirrel", - "phrases": ["eekhoorn", "eekhoorns"] + "name": "crane", + "phrases": [ + "kraanvogel", + "kraanvogels" + ] + } + ], + "items": [ + { + "name": "angel", + "phrases": [ + "aartsengel", + "engel", + "engelen" + ] }, { - "name": "donkey", - "phrases": ["ezel", "ezels"] + "name": "jewelry", + "phrases": [ + "oorbel", + "ring", + "ringen" + ] }, { - "name": "centaur", - "phrases": ["centaur", "centauren"] + "name": "hops", + "phrases": [ + "hop", + "hopachtig" + ] }, { - "name": "bear", - "phrases": ["beer", "beren", "berenklaauwen"] + "name": "tree", + "phrases": [ + "boom", + "boomen" + ] }, { - "name": "beaver", - "phrases": ["bever", "bevers"] + "name": "bell", + "phrases": [ + "klok", + "klokjes" + ] }, { - "name": "butterfly", - "phrases": ["vlinder"] + "name": "apple", + "phrases": [ + "appel", + "appelboom", + "appels", + "appeltje" + ] }, { - "name": "shell", + "name": "pickaxe", "phrases": [ - "jacobsschelpen", - "st.jacobsschelpen", - "schelp", - "schelpen", - "schelpje", - "schelpjes", - "zeehorens" + "houweel", + "houweels", + "mijnwapen", + "pikhouweel", + "pikhouweels" ] - } - ], - "items": [ + }, { - "name": "hops", - "phrases": ["hop", "hopachtig"] + "name": "key", + "phrases": [ + "sleutel", + "sleutels" + ] }, { - "name": "grape", - "phrases": ["druif", "druivenrank", "druivenranken"] + "name": "earOfGrain", + "phrases": [ + "aar", + "aren", + "schoof" + ] }, { - "name": "windmill", - "phrases": ["windmolen", "windmolens", "molen", "molens", "wipmolen"] + "name": "wheel", + "phrases": [ + "wiel", + "wielen" + ] }, { - "name": "horseshoe", - "phrases": ["hoefijzer", "hoefijzers"] + "name": "crown", + "phrases": [ + "kronen", + "kroon" + ] }, { - "name": "key", - "phrases": ["sleutel", "sleutels"] + "name": "anchor", + "phrases": [ + "scheepsanker", + "anker" + ] }, { - "name": "arrow", - "phrases": ["pijl", "pijlen"] + "name": "cross", + "phrases": [ + "kruis", + "kruisen" + ] }, { - "name": "heart", - "phrases": ["hart", "harten"] + "name": "flower", + "phrases": [ + "bloem", + "bloemen", + "tulp", + "tulpen" + ] }, { - "name": "earOfGrain", - "phrases": ["aar", "aren", "schoof"] + "name": "lily", + "phrases": [ + "lelie", + "lelies", + "lelietje" + ] }, { - "name": "axeSaw", + "name": "boat", "phrases": [ - "bijl", - "bijlen", - "bijltje", - "hakbijl", - "hakbijlen", - "slagersmes", - "slagersmessen" + "boot", + "boten", + "schepen", + "schip" ] }, { - "name": "apple", - "phrases": ["appel", "appelboom", "appels", "appeltje"] + "name": "sword", + "phrases": [ + "zwaard", + "zwaarden", + "degen", + "gevest" + ] }, { "name": "hammer", @@ -361,82 +592,98 @@ ] }, { - "name": "pickaxe", + "name": "crozier", "phrases": [ - "houweel", - "houweels", - "mijnwapen", - "pikhouweel", - "pikhouweels" + "bisschopsstaf", + "herdersstaf", + "herdersstaffen" ] }, { - "name": "tree", - "phrases": ["boom", "boomen"] - }, - { - "name": "lily", - "phrases": ["lelie", "lelies", "lelietje"] - }, - { - "name": "rose", - "phrases": ["roos", "rozen"] - }, - { - "name": "flower", - "phrases": ["bloem", "bloemen", "tulp", "tulpen"] - }, - { - "name": "walls", - "phrases": ["bakstenen", "kaseel", "muur", "poort", "poorten", "toren"] - }, - { - "name": "boat", - "phrases": ["boot", "boten", "schepen", "schip"] - }, - { - "name": "cross", - "phrases": ["kruis", "kruisen"] - }, - { - "name": "jewelry", - "phrases": ["oorbel", "ring", "ringen"] + "name": "horseshoe", + "phrases": [ + "hoefijzer", + "hoefijzers" + ] }, { - "name": "angel", - "phrases": ["aartsengel", "engel", "engelen"] + "name": "saint", + "phrases": [ + "heilige" + ] }, { - "name": "crozier", - "phrases": ["bisschopsstaf", "herdersstaf", "herdersstaffen"] + "name": "horn", + "phrases": [ + "hoorn", + "hoorns", + "trompet", + "trompetten", + "waldhoorn", + "waldhoorns" + ] }, { - "name": "wheel", - "phrases": ["wiel", "wielen"] + "name": "rose", + "phrases": [ + "roos", + "rozen" + ] }, { - "name": "crown", - "phrases": ["kronen", "kroon"] + "name": "heart", + "phrases": [ + "hart", + "harten" + ] }, { - "name": "horn", - "phrases": ["hoorn", "hoorns", "trompet", "trompetten", "waldhoorn", "waldhoorns"] + "name": "arrow", + "phrases": [ + "pijl", + "pijlen" + ] }, { - "name": "bell", - "phrases": ["klok", "klokjes"] + "name": "axeSaw", + "phrases": [ + "bijl", + "bijlen", + "bijltje", + "hakbijl", + "hakbijlen", + "slagersmes", + "slagersmessen" + ] }, { - "name": "saint", - "phrases": ["heilige"] + "name": "windmill", + "phrases": [ + "windmolen", + "windmolens", + "molen", + "molens", + "wipmolen" + ] }, { - "name": "sword", - "phrases": ["zwaard", "zwaarden", "degen", "gevest"] + "name": "walls", + "phrases": [ + "bakstenen", + "kaseel", + "muur", + "poort", + "poorten", + "toren" + ] }, { - "name": "anchor", - "phrases": ["scheepsanker", "anker"] + "name": "grape", + "phrases": [ + "druif", + "druivenrank", + "druivenranken" + ] } ] -} +} \ No newline at end of file diff --git a/public/data/heraldry/nl/formerGemeente-details-data.json b/public/data/heraldry/nl/formerGemeente-details-data.json index 1877508ba..fb788e69c 100644 --- a/public/data/heraldry/nl/formerGemeente-details-data.json +++ b/public/data/heraldry/nl/formerGemeente-details-data.json @@ -16,9 +16,9 @@ }, "markers": { "items": [ - "key", "cross", - "crown" + "crown", + "key" ] } }, @@ -39,14 +39,14 @@ }, "markers": { "animals": [ - "falcon", "bear", - "bird" + "bird", + "falcon" ], "items": [ "axeSaw", - "hammer", - "crown" + "crown", + "hammer" ] } }, @@ -86,8 +86,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -131,9 +131,9 @@ }, "markers": { "items": [ - "heart", "cross", - "crown" + "crown", + "heart" ] } }, @@ -153,8 +153,8 @@ }, "markers": { "animals": [ - "raven", - "bird" + "bird", + "raven" ], "items": [ "crown" @@ -224,10 +224,10 @@ }, "markers": { "items": [ - "key", "arrow", "cross", - "crown" + "crown", + "key" ] } }, @@ -313,9 +313,9 @@ }, "markers": { "animals": [ + "bird", "eagle", - "ram", - "bird" + "ram" ], "items": [ "cross", @@ -400,9 +400,9 @@ }, "markers": { "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -422,9 +422,9 @@ }, "markers": { "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -444,8 +444,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -492,8 +492,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -515,13 +515,13 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "jewelry", + "anchor", "crown", - "anchor" + "jewelry" ] } }, @@ -541,8 +541,8 @@ }, "markers": { "items": [ - "heart", - "crown" + "crown", + "heart" ] } }, @@ -562,10 +562,10 @@ }, "markers": { "animals": [ - "horse", + "bird", "falcon", - "snake", - "bird" + "horse", + "snake" ], "items": [ "crown" @@ -634,8 +634,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -658,8 +658,8 @@ }, "markers": { "items": [ - "jewelry", - "crown" + "crown", + "jewelry" ] } }, @@ -680,8 +680,8 @@ }, "markers": { "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -701,8 +701,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -739,9 +739,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -764,8 +764,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -784,8 +784,8 @@ }, "markers": { "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -864,9 +864,9 @@ }, "markers": { "items": [ - "walls", + "bell", "crown", - "bell" + "walls" ] } }, @@ -885,10 +885,10 @@ }, "markers": { "items": [ - "rose", - "crown", "bell", - "flower" + "crown", + "flower", + "rose" ] } }, @@ -911,8 +911,8 @@ "rabbit" ], "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -935,8 +935,8 @@ "rabbit" ], "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -1000,9 +1000,9 @@ }, "markers": { "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -1024,8 +1024,8 @@ "shell" ], "items": [ - "earOfGrain", "crown", + "earOfGrain", "horn", "musicalInstrument" ] @@ -1050,8 +1050,8 @@ "deer" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -1172,13 +1172,13 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -1197,8 +1197,8 @@ }, "markers": { "animals": [ - "unicorn", - "shell" + "shell", + "unicorn" ], "items": [ "horn", @@ -1255,8 +1255,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -1275,12 +1275,12 @@ }, "markers": { "items": [ - "lily", - "wheel", "crown", + "flower", + "lily", "saint", "sword", - "flower" + "wheel" ] } }, @@ -1325,9 +1325,9 @@ }, "markers": { "items": [ + "crown", "key", - "walls", - "crown" + "walls" ] } }, @@ -1346,9 +1346,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown", @@ -1389,9 +1389,9 @@ }, "markers": { "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -1451,14 +1451,14 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "lily", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -1479,14 +1479,14 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "lily", "boat", "crown", - "flower" + "flower", + "lily" ] } }, @@ -1523,9 +1523,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "parrot", - "bird" + "parrot" ], "items": [ "crown" @@ -1633,8 +1633,8 @@ "dog" ], "items": [ - "jewelry", - "crown" + "crown", + "jewelry" ] } }, @@ -1676,8 +1676,8 @@ }, "markers": { "items": [ - "tree", - "cross" + "cross", + "tree" ] } }, @@ -1736,8 +1736,8 @@ }, "markers": { "animals": [ - "lion", "fish", + "lion", "salmon" ], "items": [ @@ -1773,8 +1773,8 @@ }, "markers": { "animals": [ - "horse", - "bullBison" + "bullBison", + "horse" ] } }, @@ -1881,8 +1881,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -2012,9 +2012,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -2037,8 +2037,8 @@ }, "markers": { "animals": [ - "parrot", - "bird" + "bird", + "parrot" ] } }, @@ -2075,9 +2075,9 @@ "horse" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -2097,13 +2097,13 @@ }, "markers": { "animals": [ + "bird", "goose", - "swan", - "bird" + "swan" ], "items": [ - "jewelry", - "crown" + "crown", + "jewelry" ] } }, @@ -2149,8 +2149,8 @@ "lion" ], "items": [ - "tree", - "cross" + "cross", + "tree" ] } }, @@ -2218,12 +2218,12 @@ }, "markers": { "animals": [ - "rooster", - "bird" + "bird", + "rooster" ], "items": [ - "walls", - "boat" + "boat", + "walls" ] } }, @@ -2275,14 +2275,14 @@ }, "markers": { "animals": [ + "bird", "lion", - "parrot", - "bird" + "parrot" ], "items": [ - "walls", "cross", - "crown" + "crown", + "walls" ] } }, @@ -2314,8 +2314,8 @@ }, "markers": { "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -2392,12 +2392,12 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ - "walls", - "saint" + "saint", + "walls" ] } }, @@ -2488,9 +2488,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "swan", - "bird" + "swan" ], "items": [ "crown" @@ -2533,9 +2533,9 @@ }, "markers": { "animals": [ - "swan", + "bird", "bullBison", - "bird" + "swan" ], "items": [ "tree" @@ -2561,8 +2561,8 @@ "lion" ], "items": [ - "walls", - "cross" + "cross", + "walls" ] } }, @@ -2603,12 +2603,12 @@ }, "markers": { "animals": [ - "lion", - "bird" + "bird", + "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -2627,8 +2627,8 @@ }, "markers": { "items": [ - "windmill", - "crown" + "crown", + "windmill" ] } }, @@ -2651,10 +2651,10 @@ "lion" ], "items": [ - "lily", "cross", "crown", - "flower" + "flower", + "lily" ] } }, @@ -2717,8 +2717,8 @@ }, "markers": { "animals": [ - "lion", "fish", + "lion", "salmon" ], "items": [ @@ -2844,13 +2844,13 @@ }, "markers": { "animals": [ + "bird", "lion", - "parrot", - "bird" + "parrot" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -2868,8 +2868,8 @@ }, "markers": { "animals": [ - "parrot", - "bird" + "bird", + "parrot" ] } }, @@ -2961,8 +2961,8 @@ }, "markers": { "items": [ - "rose", - "flower" + "flower", + "rose" ] } }, @@ -3144,8 +3144,8 @@ }, "markers": { "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -3186,10 +3186,10 @@ }, "markers": { "items": [ - "tree", "crown", "horn", - "musicalInstrument" + "musicalInstrument", + "tree" ] } }, @@ -3250,8 +3250,8 @@ }, "markers": { "animals": [ - "lion", - "dragon" + "dragon", + "lion" ], "items": [ "crown" @@ -3274,13 +3274,13 @@ }, "markers": { "animals": [ - "lion", - "griffin" + "griffin", + "lion" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -3301,8 +3301,8 @@ }, "markers": { "animals": [ - "pelican", - "bird" + "bird", + "pelican" ], "items": [ "cross", @@ -3404,10 +3404,10 @@ }, "markers": { "items": [ - "lily", - "walls", "crown", - "flower" + "flower", + "lily", + "walls" ] } }, @@ -3465,8 +3465,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -3489,11 +3489,11 @@ "lion" ], "items": [ - "rose", - "walls", - "horn", "flower", - "musicalInstrument" + "horn", + "musicalInstrument", + "rose", + "walls" ] } }, @@ -3516,11 +3516,11 @@ "mermaid" ], "items": [ - "lily", "cross", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -3540,9 +3540,9 @@ }, "markers": { "items": [ - "walls", "crown", - "saint" + "saint", + "walls" ] } }, @@ -3563,9 +3563,9 @@ }, "markers": { "items": [ - "walls", "boat", - "crown" + "crown", + "walls" ] } }, @@ -3607,8 +3607,8 @@ "griffin" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -3629,8 +3629,8 @@ }, "markers": { "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -3651,12 +3651,12 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "crown", - "bell" + "bell", + "crown" ] } }, @@ -3679,9 +3679,9 @@ "mermaid" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -3700,8 +3700,8 @@ }, "markers": { "items": [ - "hammer", - "crown" + "crown", + "hammer" ] } }, @@ -3742,8 +3742,8 @@ }, "markers": { "items": [ - "crown", - "bell" + "bell", + "crown" ] } }, @@ -3807,8 +3807,8 @@ }, "markers": { "animals": [ - "horse", - "dragon" + "dragon", + "horse" ], "items": [ "crown" @@ -3849,12 +3849,12 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "key", "crown", + "key", "saint", "sword" ] @@ -3897,12 +3897,12 @@ }, "markers": { "animals": [ - "lion", - "bird" + "bird", + "lion" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -3926,9 +3926,9 @@ "bird" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -3993,8 +3993,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -4017,9 +4017,9 @@ }, "markers": { "items": [ + "bell", "boat", - "crown", - "bell" + "crown" ] } }, @@ -4060,9 +4060,9 @@ }, "markers": { "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -4082,8 +4082,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "saint", @@ -4107,8 +4107,8 @@ }, "markers": { "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -4129,13 +4129,13 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "walls", "cross", - "crown" + "crown", + "walls" ] } }, @@ -4156,8 +4156,8 @@ }, "markers": { "items": [ - "jewelry", - "crown" + "crown", + "jewelry" ] } }, @@ -4198,8 +4198,8 @@ "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -4233,9 +4233,9 @@ "bear" ], "items": [ - "walls", "crown", - "sword" + "sword", + "walls" ] } }, @@ -4259,9 +4259,9 @@ "dragon" ], "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -4280,8 +4280,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "sword" @@ -4304,8 +4304,8 @@ }, "markers": { "animals": [ - "goose", - "bird" + "bird", + "goose" ], "items": [ "crown" @@ -4329,9 +4329,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -4354,9 +4354,9 @@ }, "markers": { "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -4566,12 +4566,12 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "walls", - "bell" + "bell", + "walls" ] } }, @@ -4592,8 +4592,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -4612,13 +4612,13 @@ }, "markers": { "animals": [ - "lion", - "griffin" + "griffin", + "lion" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -4755,8 +4755,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "cross", @@ -4785,8 +4785,8 @@ "lion" ], "items": [ - "cross", - "bell" + "bell", + "cross" ] } }, @@ -4826,8 +4826,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "key", @@ -4977,9 +4977,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "pigeon", - "bird" + "pigeon" ], "items": [ "crown", @@ -5067,17 +5067,17 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "snake", - "bird" + "lion", + "snake" ], "items": [ "arrow", - "rose", - "flower", "cross", "crown", + "flower", + "rose", "sword" ] } @@ -5207,8 +5207,8 @@ }, "markers": { "items": [ - "walls", - "cross" + "cross", + "walls" ] } }, @@ -5251,16 +5251,16 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ + "crown", + "flower", "key", "lily", - "crown", - "saint", - "flower" + "saint" ] } }, @@ -5304,8 +5304,8 @@ "items": [ "crown", "horn", - "saint", - "musicalInstrument" + "musicalInstrument", + "saint" ] } }, @@ -5344,8 +5344,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "key", @@ -5394,11 +5394,11 @@ "dragon" ], "items": [ - "lily", "angel", + "flower", + "lily", "saint", - "sword", - "flower" + "sword" ] } }, @@ -5417,11 +5417,11 @@ }, "markers": { "items": [ - "rose", "crown", - "horn", "flower", - "musicalInstrument" + "horn", + "musicalInstrument", + "rose" ] } }, @@ -5498,8 +5498,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "saint", @@ -5521,8 +5521,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "saint" @@ -5546,8 +5546,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "saint", @@ -5612,15 +5612,15 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "pigeon", - "bird" + "lion", + "pigeon" ], "items": [ "cross", - "crozier", - "crown" + "crown", + "crozier" ] } }, @@ -5638,8 +5638,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -5660,8 +5660,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "sword" @@ -5709,9 +5709,9 @@ }, "markers": { "animals": [ + "bird", "deer", - "eagle", - "bird" + "eagle" ], "items": [ "cross", @@ -5738,9 +5738,9 @@ "deer" ], "items": [ + "flower", "lily", - "saint", - "flower" + "saint" ] } }, @@ -5860,8 +5860,8 @@ }, "markers": { "items": [ - "saint", - "anchor" + "anchor", + "saint" ] } }, @@ -5903,8 +5903,8 @@ }, "markers": { "items": [ - "walls", - "cross" + "cross", + "walls" ] } }, @@ -5942,9 +5942,9 @@ }, "markers": { "items": [ - "walls", "horn", - "musicalInstrument" + "musicalInstrument", + "walls" ] } }, @@ -5966,8 +5966,8 @@ "items": [ "crozier", "horn", - "saint", - "musicalInstrument" + "musicalInstrument", + "saint" ] } }, @@ -6007,8 +6007,8 @@ }, "markers": { "animals": [ - "lion", - "bird" + "bird", + "lion" ] } }, @@ -6028,9 +6028,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -6053,8 +6053,8 @@ }, "markers": { "animals": [ - "falcon", - "bird" + "bird", + "falcon" ], "items": [ "key", @@ -6213,9 +6213,9 @@ "lion" ], "items": [ - "heart", + "crown", "flower", - "crown" + "heart" ] } }, @@ -6253,9 +6253,9 @@ }, "markers": { "items": [ - "key", "crown", "horn", + "key", "musicalInstrument" ] } @@ -6320,14 +6320,14 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "pigeon", - "bird" + "lion", + "pigeon" ], "items": [ - "crozier", - "crown" + "crown", + "crozier" ] } }, @@ -6348,9 +6348,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "falcon", - "bird" + "lion" ], "items": [ "crown" @@ -6396,9 +6396,9 @@ "markers": { "items": [ "arrow", - "tree", "crown", - "saint" + "saint", + "tree" ] } }, @@ -6417,8 +6417,8 @@ "markers": { "items": [ "axeSaw", - "crozier", - "crown" + "crown", + "crozier" ] } }, @@ -6437,14 +6437,14 @@ }, "markers": { "animals": [ - "lion", - "dog" + "dog", + "lion" ], "items": [ - "key", - "heart", + "crown", "flower", - "crown" + "heart", + "key" ] } }, @@ -6464,8 +6464,8 @@ "markers": { "items": [ "key", - "walls", - "saint" + "saint", + "walls" ] } }, @@ -6485,8 +6485,8 @@ }, "markers": { "items": [ - "crozier", - "crown" + "crown", + "crozier" ] } }, @@ -6529,14 +6529,14 @@ }, "markers": { "animals": [ + "bird", "eagle", - "pigeon", - "bird" + "pigeon" ], "items": [ "cross", - "crozier", "crown", + "crozier", "saint" ] } @@ -6596,12 +6596,12 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "walls", - "saint" + "saint", + "walls" ] } }, @@ -6622,14 +6622,14 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", "falcon", - "bird" + "lion" ], "items": [ - "rose", - "flower" + "flower", + "rose" ] } }, @@ -6673,10 +6673,10 @@ }, "markers": { "animals": [ - "lion", - "horse", + "bird", "eagle", - "bird" + "horse", + "lion" ], "items": [ "saint", @@ -6700,16 +6700,16 @@ }, "markers": { "animals": [ - "eagle", + "bird", "dragon", - "bird" + "eagle" ], "items": [ - "arrow", - "walls", "angel", + "arrow", "saint", - "sword" + "sword", + "walls" ] } }, @@ -6795,9 +6795,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "falcon", - "bird" + "lion" ], "items": [ "crown" @@ -6823,9 +6823,9 @@ "lion" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -6885,14 +6885,14 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "lily", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -6961,8 +6961,8 @@ "lion" ], "items": [ - "wheel", - "crown" + "crown", + "wheel" ] } }, @@ -7065,8 +7065,8 @@ }, "markers": { "animals": [ - "salmon", - "fish" + "fish", + "salmon" ] } }, @@ -7105,8 +7105,8 @@ }, "markers": { "animals": [ - "salmon", - "fish" + "fish", + "salmon" ] } }, @@ -7160,8 +7160,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "sword" @@ -7340,8 +7340,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "horn", @@ -7364,10 +7364,10 @@ }, "markers": { "animals": [ - "lion", - "raven", "bird", - "goat" + "goat", + "lion", + "raven" ], "items": [ "crown" @@ -7588,8 +7588,8 @@ }, "markers": { "items": [ - "cross", "angel", + "cross", "horn", "musicalInstrument" ] @@ -7714,10 +7714,10 @@ "lion" ], "items": [ - "lily", - "walls", "crown", - "flower" + "flower", + "lily", + "walls" ] } }, @@ -7741,8 +7741,8 @@ ], "items": [ "cross", - "wheel", - "crown" + "crown", + "wheel" ] } }, @@ -7761,8 +7761,8 @@ }, "markers": { "animals": [ - "salmon", - "fish" + "fish", + "salmon" ] } }, @@ -7821,12 +7821,12 @@ }, "markers": { "animals": [ - "lion", - "dragon" + "dragon", + "lion" ], "items": [ - "key", "crozier", + "key", "saint" ] } @@ -7920,10 +7920,10 @@ }, "markers": { "items": [ - "rose", "crown", - "saint", - "flower" + "flower", + "rose", + "saint" ] } }, @@ -7959,8 +7959,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "cross", @@ -8016,8 +8016,8 @@ }, "markers": { "animals": [ - "salmon", - "fish" + "fish", + "salmon" ] } }, @@ -8038,8 +8038,8 @@ }, "markers": { "animals": [ - "lion", - "bullBison" + "bullBison", + "lion" ], "items": [ "cross" @@ -8065,8 +8065,8 @@ "bird" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -8110,8 +8110,8 @@ "ram" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -8132,8 +8132,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "sword" @@ -8264,9 +8264,9 @@ }, "markers": { "items": [ - "tree", "horn", - "musicalInstrument" + "musicalInstrument", + "tree" ] } }, @@ -8442,8 +8442,8 @@ }, "markers": { "items": [ - "flower", - "crown" + "crown", + "flower" ] } }, @@ -8462,9 +8462,9 @@ }, "markers": { "items": [ - "tree", "horn", - "musicalInstrument" + "musicalInstrument", + "tree" ] } }, @@ -8520,13 +8520,13 @@ }, "markers": { "animals": [ - "eagle", + "bird", "dragon", - "bird" + "eagle" ], "items": [ - "key", - "cross" + "cross", + "key" ] } }, @@ -8557,9 +8557,9 @@ }, "markers": { "items": [ - "walls", "cross", - "crown" + "crown", + "walls" ] } }, @@ -8579,8 +8579,8 @@ }, "markers": { "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -8598,8 +8598,8 @@ }, "markers": { "animals": [ - "crane", - "bird" + "bird", + "crane" ] } }, @@ -8617,8 +8617,8 @@ }, "markers": { "items": [ - "rose", - "flower" + "flower", + "rose" ] } }, @@ -8788,8 +8788,8 @@ }, "markers": { "animals": [ - "lion", - "bullBison" + "bullBison", + "lion" ], "items": [ "cross" @@ -8811,8 +8811,8 @@ }, "markers": { "animals": [ - "lion", - "fox" + "fox", + "lion" ] } }, @@ -8871,9 +8871,9 @@ "lion" ], "items": [ - "rose", "cross", - "flower" + "flower", + "rose" ] } }, @@ -8890,8 +8890,8 @@ }, "markers": { "animals": [ - "rooster", - "bird" + "bird", + "rooster" ], "items": [ "walls" @@ -8969,8 +8969,8 @@ }, "markers": { "animals": [ - "lion", - "fish" + "fish", + "lion" ] } }, @@ -9037,8 +9037,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ] } }, @@ -9166,8 +9166,8 @@ }, "markers": { "animals": [ - "raven", - "bird" + "bird", + "raven" ], "items": [ "angel", @@ -9244,9 +9244,9 @@ "lion" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -9263,8 +9263,8 @@ }, "markers": { "animals": [ - "salmon", - "fish" + "fish", + "salmon" ] } }, @@ -9286,10 +9286,10 @@ "lion" ], "items": [ - "rose", "crown", - "saint", - "flower" + "flower", + "rose", + "saint" ] } }, @@ -9324,8 +9324,8 @@ }, "markers": { "animals": [ - "lion", - "bird" + "bird", + "lion" ] } }, @@ -9342,8 +9342,8 @@ }, "markers": { "animals": [ - "raven", - "bird" + "bird", + "raven" ], "items": [ "crown" @@ -9367,8 +9367,8 @@ }, "markers": { "items": [ - "key", "crown", + "key", "saint" ] } @@ -9411,8 +9411,8 @@ }, "markers": { "items": [ - "cross", "angel", + "cross", "crown", "sword" ] @@ -9445,8 +9445,8 @@ }, "markers": { "animals": [ - "crane", - "bird" + "bird", + "crane" ] } }, @@ -9619,15 +9619,15 @@ }, "markers": { "animals": [ - "lion", - "horse", + "bird", "eagle", - "bird" + "horse", + "lion" ], "items": [ + "flower", "lily", - "sword", - "flower" + "sword" ] } }, @@ -9718,9 +9718,9 @@ }, "markers": { "items": [ + "flower", "rose", - "saint", - "flower" + "saint" ] } }, @@ -9859,11 +9859,11 @@ }, "markers": { "items": [ - "crozier", "crown", + "crozier", "horn", - "saint", - "musicalInstrument" + "musicalInstrument", + "saint" ] } }, @@ -9881,8 +9881,8 @@ }, "markers": { "animals": [ - "raven", - "bird" + "bird", + "raven" ] } }, @@ -9901,10 +9901,10 @@ }, "markers": { "animals": [ + "bird", "duck", "fish", - "salmon", - "bird" + "salmon" ], "items": [ "crown" @@ -9928,10 +9928,10 @@ "shell" ], "items": [ + "flower", "key", "lily", - "saint", - "flower" + "saint" ] } }, @@ -10017,8 +10017,8 @@ "salmon" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -10079,9 +10079,9 @@ }, "markers": { "items": [ - "tree", "horn", - "musicalInstrument" + "musicalInstrument", + "tree" ] } }, @@ -10147,8 +10147,8 @@ }, "markers": { "animals": [ - "stork", - "bird" + "bird", + "stork" ] } }, @@ -10169,9 +10169,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ] } }, @@ -10192,8 +10192,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ] } }, @@ -10233,9 +10233,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "swan", - "bird" + "swan" ], "items": [ "cross", @@ -10259,8 +10259,8 @@ }, "markers": { "animals": [ - "lion", - "bullBison" + "bullBison", + "lion" ] } }, @@ -10279,8 +10279,8 @@ }, "markers": { "items": [ - "hammer", - "cross" + "cross", + "hammer" ] } }, @@ -10345,8 +10345,8 @@ }, "markers": { "animals": [ - "horse", - "dragon" + "dragon", + "horse" ], "items": [ "saint" @@ -10367,8 +10367,8 @@ }, "markers": { "animals": [ - "heron", - "bird" + "bird", + "heron" ], "items": [ "horn", @@ -10391,8 +10391,8 @@ }, "markers": { "animals": [ - "raven", - "bird" + "bird", + "raven" ], "items": [ "tree" @@ -10435,8 +10435,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ "arrow" @@ -10479,8 +10479,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ "arrow" @@ -10631,8 +10631,8 @@ }, "markers": { "animals": [ - "whale", - "fish" + "fish", + "whale" ], "items": [ "crown" @@ -10655,16 +10655,16 @@ }, "markers": { "animals": [ + "bird", + "fish", + "goose", "heron", "pelican", - "stork", - "goose", - "fish", - "bird" + "stork" ], "items": [ - "horseshoe", - "crown" + "crown", + "horseshoe" ] } }, @@ -10701,8 +10701,8 @@ }, "markers": { "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -10811,12 +10811,12 @@ }, "markers": { "animals": [ - "heron", - "bird" + "bird", + "heron" ], "items": [ - "earOfGrain", - "crown" + "crown", + "earOfGrain" ] } }, @@ -10873,9 +10873,9 @@ }, "markers": { "animals": [ + "bird", "eagle", - "pelican", - "bird" + "pelican" ], "items": [ "tree" @@ -10896,9 +10896,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "stork", - "bird" + "stork" ], "items": [ "crown" @@ -10919,8 +10919,8 @@ }, "markers": { "animals": [ - "stork", - "bird" + "bird", + "stork" ] } }, @@ -10938,8 +10938,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ] } }, @@ -11012,9 +11012,9 @@ }, "markers": { "animals": [ - "pelican", + "bird", "fish", - "bird" + "pelican" ], "items": [ "horseshoe" @@ -11056,13 +11056,13 @@ }, "markers": { "animals": [ - "lion", - "bird" + "bird", + "lion" ], "items": [ - "tree", "boat", - "crown" + "crown", + "tree" ] } }, @@ -11161,9 +11161,9 @@ "bullBison" ], "items": [ - "walls", "horn", - "musicalInstrument" + "musicalInstrument", + "walls" ] } }, @@ -11204,10 +11204,10 @@ }, "markers": { "animals": [ - "griffin", - "swan", + "bird", "bullBison", - "bird" + "griffin", + "swan" ], "items": [ "horn", @@ -11249,8 +11249,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -11355,8 +11355,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ "crown" @@ -11413,8 +11413,8 @@ "bird" ], "items": [ - "tree", - "angel" + "angel", + "tree" ] } }, @@ -11452,9 +11452,9 @@ }, "markers": { "animals": [ - "falcon", + "bird", "bullBison", - "bird" + "falcon" ], "items": [ "horn", @@ -11522,8 +11522,8 @@ }, "markers": { "animals": [ - "goose", - "bird" + "bird", + "goose" ] } }, @@ -11561,8 +11561,8 @@ }, "markers": { "items": [ - "rose", - "flower" + "flower", + "rose" ] } }, @@ -11595,8 +11595,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ "arrow", @@ -11641,8 +11641,8 @@ }, "markers": { "animals": [ - "raven", - "bird" + "bird", + "raven" ], "items": [ "tree" @@ -11664,8 +11664,8 @@ }, "markers": { "animals": [ - "lion", - "bird" + "bird", + "lion" ], "items": [ "tree" @@ -11689,13 +11689,13 @@ }, "markers": { "animals": [ - "lion", - "fish" + "fish", + "lion" ], "items": [ - "windmill", "cross", - "crown" + "crown", + "windmill" ] } }, @@ -11715,12 +11715,12 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -11967,8 +11967,8 @@ }, "markers": { "animals": [ - "lion", - "bear" + "bear", + "lion" ] } }, @@ -11989,8 +11989,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ] } }, @@ -12008,12 +12008,12 @@ }, "markers": { "animals": [ - "raven", - "bird" + "bird", + "raven" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -12031,9 +12031,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "swan", - "bird" + "swan" ], "items": [ "crown" @@ -12118,8 +12118,8 @@ }, "markers": { "animals": [ - "heron", - "bird" + "bird", + "heron" ], "items": [ "crown" @@ -12164,11 +12164,11 @@ }, "markers": { "animals": [ - "lion", - "horse", - "goose", + "bird", "dragon", - "bird" + "goose", + "horse", + "lion" ], "items": [ "crown", @@ -12229,9 +12229,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "goose", - "bird" + "lion" ] } }, @@ -12254,10 +12254,10 @@ "mermaid" ], "items": [ - "lily", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -12297,8 +12297,8 @@ }, "markers": { "animals": [ - "snake", - "ram" + "ram", + "snake" ], "items": [ "crown" @@ -12320,8 +12320,8 @@ }, "markers": { "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -12374,8 +12374,8 @@ "lion" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -12433,9 +12433,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "rooster", - "bird" + "rooster" ], "items": [ "boat", @@ -12504,9 +12504,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "swan", - "bird" + "swan" ], "items": [ "crown" @@ -12566,9 +12566,9 @@ }, "markers": { "animals": [ + "bird", "heron", - "stork", - "bird" + "stork" ], "items": [ "horn", @@ -12624,8 +12624,8 @@ }, "markers": { "animals": [ - "pelican", - "bird" + "bird", + "pelican" ], "items": [ "crown" @@ -12646,9 +12646,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ] } }, @@ -12681,8 +12681,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ], "items": [ "cross", @@ -12705,8 +12705,8 @@ }, "markers": { "items": [ - "boat", - "anchor" + "anchor", + "boat" ] } }, @@ -12762,9 +12762,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ] } }, @@ -12828,8 +12828,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown", @@ -12857,10 +12857,10 @@ "salmon" ], "items": [ - "lily", "boat", "crown", - "flower" + "flower", + "lily" ] } }, @@ -12897,10 +12897,10 @@ }, "markers": { "items": [ - "rose", - "flower", "cross", - "crown" + "crown", + "flower", + "rose" ] } }, @@ -12998,8 +12998,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ], "items": [ "saint" @@ -13021,8 +13021,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ "crown" @@ -13087,9 +13087,9 @@ }, "markers": { "animals": [ + "bird", "crane", - "swan", - "bird" + "swan" ], "items": [ "boat" @@ -13167,11 +13167,11 @@ }, "markers": { "items": [ + "crown", + "flower", "heart", "lily", - "crown", - "saint", - "flower" + "saint" ] } }, @@ -13273,8 +13273,8 @@ }, "markers": { "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -13312,9 +13312,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown", @@ -13400,8 +13400,8 @@ ], "items": [ "cross", - "jewelry", - "crown" + "crown", + "jewelry" ] } }, @@ -13449,9 +13449,9 @@ }, "markers": { "items": [ - "walls", "cross", - "crown" + "crown", + "walls" ] } }, @@ -13468,8 +13468,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ], "items": [ "tree" @@ -13492,8 +13492,8 @@ }, "markers": { "animals": [ - "pelican", - "bird" + "bird", + "pelican" ], "items": [ "crown" @@ -13564,8 +13564,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -13604,8 +13604,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -13734,9 +13734,9 @@ }, "markers": { "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -13802,8 +13802,8 @@ "lion" ], "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -13826,9 +13826,9 @@ "lion" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -13918,10 +13918,10 @@ }, "markers": { "items": [ - "lily", "cross", "crown", - "flower" + "flower", + "lily" ] } }, @@ -14019,8 +14019,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -14149,9 +14149,9 @@ "lion" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -14222,8 +14222,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -14387,8 +14387,8 @@ }, "markers": { "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -14519,12 +14519,12 @@ }, "markers": { "animals": [ - "horse", - "dragon" + "dragon", + "horse" ], "items": [ - "cross", "bell", + "cross", "sword" ] } @@ -14556,8 +14556,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ] } }, @@ -14623,8 +14623,8 @@ }, "markers": { "items": [ - "hammer", - "crown" + "crown", + "hammer" ] } }, @@ -14721,8 +14721,8 @@ }, "markers": { "items": [ - "hammer", - "crown" + "crown", + "hammer" ] } }, @@ -14759,9 +14759,9 @@ "lion" ], "items": [ - "walls", "cross", - "crown" + "crown", + "walls" ] } }, @@ -14782,12 +14782,12 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -14811,9 +14811,9 @@ "shell" ], "items": [ - "key", "cross", "crown", + "key", "saint" ] } @@ -14854,9 +14854,9 @@ }, "markers": { "animals": [ - "pigeon", "bat", - "bird" + "bird", + "pigeon" ], "items": [ "tree" @@ -15003,8 +15003,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -15026,9 +15026,9 @@ }, "markers": { "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -15063,9 +15063,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -15119,8 +15119,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -15264,8 +15264,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ] } }, @@ -15282,8 +15282,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ] } }, @@ -15300,8 +15300,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ] } }, @@ -15386,8 +15386,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -15476,8 +15476,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -15532,9 +15532,9 @@ }, "markers": { "animals": [ + "bird", "heron", - "rooster", - "bird" + "rooster" ] } }, @@ -15611,8 +15611,8 @@ ], "items": [ "apple", - "tree", - "crown" + "crown", + "tree" ] } }, @@ -15702,8 +15702,8 @@ "boar" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -15786,8 +15786,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -15804,8 +15804,8 @@ }, "markers": { "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -15941,10 +15941,10 @@ }, "markers": { "items": [ - "lily", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -15977,8 +15977,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ], "items": [ "crown" @@ -16077,8 +16077,8 @@ }, "markers": { "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -16157,10 +16157,10 @@ }, "markers": { "items": [ - "walls", "cross", "crown", - "sword" + "sword", + "walls" ] } }, @@ -16310,10 +16310,10 @@ "lion" ], "items": [ - "key", - "walls", "crown", - "sword" + "key", + "sword", + "walls" ] } }, @@ -16415,13 +16415,13 @@ }, "markers": { "animals": [ + "bird", "pigeon", - "shell", - "bird" + "shell" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -16574,8 +16574,8 @@ "griffin" ], "items": [ - "crown", - "anchor" + "anchor", + "crown" ] } }, @@ -16718,8 +16718,8 @@ ], "items": [ "boat", - "crozier", - "crown" + "crown", + "crozier" ] } }, @@ -16807,8 +16807,8 @@ }, "markers": { "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -16938,8 +16938,8 @@ }, "markers": { "items": [ - "windmill", - "tree" + "tree", + "windmill" ] } }, @@ -16972,8 +16972,8 @@ }, "markers": { "animals": [ - "lion", - "dog" + "dog", + "lion" ], "items": [ "crown" @@ -17229,8 +17229,8 @@ "fox" ], "items": [ - "earOfGrain", - "crown" + "crown", + "earOfGrain" ] } }, @@ -17250,8 +17250,8 @@ "markers": { "items": [ "horn", - "sword", - "musicalInstrument" + "musicalInstrument", + "sword" ] } }, @@ -17346,8 +17346,8 @@ }, "markers": { "animals": [ - "lion", "fish", + "lion", "salmon" ] } @@ -17368,9 +17368,9 @@ }, "markers": { "animals": [ + "bird", "lion", - "swan", - "bird" + "swan" ], "items": [ "crown" @@ -17411,8 +17411,8 @@ }, "markers": { "items": [ - "tree", - "flower" + "flower", + "tree" ] } }, @@ -17432,10 +17432,10 @@ }, "markers": { "animals": [ + "bird", "eagle", "fish", - "salmon", - "bird" + "salmon" ], "items": [ "crown" @@ -17457,9 +17457,9 @@ }, "markers": { "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -17566,10 +17566,10 @@ "shell" ], "items": [ - "lily", - "cross", "angel", - "flower" + "cross", + "flower", + "lily" ] } }, @@ -17588,8 +17588,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -17612,8 +17612,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ] } }, @@ -17636,9 +17636,9 @@ "lion" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -17715,11 +17715,11 @@ }, "markers": { "animals": [ - "lion", - "horse", - "fish", + "centaur", "dog", - "centaur" + "fish", + "horse", + "lion" ], "items": [ "crown" @@ -17906,8 +17906,8 @@ }, "markers": { "items": [ - "horseshoe", - "crown" + "crown", + "horseshoe" ] } }, @@ -18049,9 +18049,9 @@ "lion" ], "items": [ - "walls", + "anchor", "crown", - "anchor" + "walls" ] } }, @@ -18131,9 +18131,9 @@ }, "markers": { "items": [ - "tree", "angel", - "crown" + "crown", + "tree" ] } }, @@ -18388,14 +18388,14 @@ }, "markers": { "animals": [ - "stork", - "bird" + "bird", + "stork" ], "items": [ "boat", - "jewelry", "crown", "horn", + "jewelry", "musicalInstrument" ] } @@ -18497,8 +18497,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ] } }, @@ -18593,8 +18593,8 @@ }, "markers": { "items": [ - "rose", - "flower" + "flower", + "rose" ] } }, @@ -18682,9 +18682,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -18781,8 +18781,8 @@ "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -18803,8 +18803,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -18846,8 +18846,8 @@ }, "markers": { "animals": [ - "lion", - "boar" + "boar", + "lion" ] } }, @@ -18867,8 +18867,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -18892,9 +18892,9 @@ }, "markers": { "items": [ + "crown", "earOfGrain", - "walls", - "crown" + "walls" ] } }, @@ -18988,8 +18988,8 @@ }, "markers": { "animals": [ - "lion", - "dragon" + "dragon", + "lion" ], "items": [ "angel", @@ -19030,9 +19030,9 @@ }, "markers": { "animals": [ + "bird", "duck", - "fox", - "bird" + "fox" ] } }, @@ -19072,9 +19072,9 @@ }, "markers": { "items": [ - "windmill", + "crown", "earOfGrain", - "crown" + "windmill" ] } }, @@ -19673,9 +19673,9 @@ "lion" ], "items": [ + "crown", "flower", - "walls", - "crown" + "walls" ] } }, @@ -19837,8 +19837,8 @@ }, "markers": { "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -19858,10 +19858,10 @@ }, "markers": { "animals": [ + "bird", "deer", - "owl", "duck", - "bird" + "owl" ], "items": [ "crown" @@ -19928,8 +19928,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -19979,10 +19979,10 @@ }, "markers": { "items": [ - "rose", - "walls", "crown", - "flower" + "flower", + "rose", + "walls" ] } }, @@ -20000,8 +20000,8 @@ }, "markers": { "animals": [ - "rooster", - "bird" + "bird", + "rooster" ] } }, @@ -20179,10 +20179,10 @@ }, "markers": { "animals": [ + "bird", "deer", - "raven", "owl", - "bird" + "raven" ], "items": [ "angel" @@ -20218,8 +20218,8 @@ }, "markers": { "items": [ - "flower", - "crown" + "crown", + "flower" ] } }, @@ -20250,8 +20250,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ] } }, @@ -20399,12 +20399,12 @@ }, "markers": { "animals": [ - "falcon", - "bird" + "bird", + "falcon" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -20499,10 +20499,10 @@ }, "markers": { "items": [ + "crown", "heart", "tree", - "walls", - "crown" + "walls" ] } }, @@ -20574,8 +20574,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ] } }, @@ -20659,8 +20659,8 @@ "lion" ], "items": [ - "flower", - "crown" + "crown", + "flower" ] } }, @@ -20773,9 +20773,9 @@ }, "markers": { "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -20816,8 +20816,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "earOfGrain" @@ -20949,8 +20949,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ "walls" diff --git a/public/data/heraldry/nl/gemeente-details-data.json b/public/data/heraldry/nl/gemeente-details-data.json index 8e294fa27..e9b0ab5b6 100644 --- a/public/data/heraldry/nl/gemeente-details-data.json +++ b/public/data/heraldry/nl/gemeente-details-data.json @@ -18,11 +18,11 @@ "deer" ], "items": [ - "lily", "cross", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -88,8 +88,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "cross", @@ -114,13 +114,13 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -208,14 +208,14 @@ }, "markers": { "animals": [ - "horse", + "bird", "eagle", - "bird" + "horse" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -257,9 +257,9 @@ }, "markers": { "animals": [ + "bird", "horse", - "raven", - "bird" + "raven" ], "items": [ "crown" @@ -307,10 +307,10 @@ "unusualHybrid" ], "items": [ - "lily", "boat", "crown", - "flower" + "flower", + "lily" ] } }, @@ -334,10 +334,10 @@ "horse" ], "items": [ - "lily", - "jewelry", "crown", - "flower" + "flower", + "jewelry", + "lily" ] } }, @@ -360,11 +360,11 @@ "lion" ], "items": [ + "crown", + "flower", "heart", "lily", - "crown", - "saint", - "flower" + "saint" ] } }, @@ -385,11 +385,11 @@ }, "markers": { "items": [ + "crown", + "flower", "heart", "lily", - "crown", - "saint", - "flower" + "saint" ] } }, @@ -430,10 +430,10 @@ "deer" ], "items": [ - "lily", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -539,10 +539,10 @@ }, "markers": { "items": [ - "lily", "cross", "crown", - "flower" + "flower", + "lily" ] } }, @@ -563,8 +563,8 @@ }, "markers": { "items": [ - "tree", - "sword" + "sword", + "tree" ] } }, @@ -583,8 +583,8 @@ }, "markers": { "animals": [ - "lion", - "deer" + "deer", + "lion" ], "items": [ "crown" @@ -650,8 +650,8 @@ }, "markers": { "animals": [ - "rabbit", - "dog" + "dog", + "rabbit" ], "items": [ "crown" @@ -675,9 +675,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -703,8 +703,8 @@ "deer" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -724,9 +724,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -749,14 +749,14 @@ }, "markers": { "animals": [ - "lion", "bird", + "dog", "dragon", - "dog" + "lion" ], "items": [ - "tree", - "boat" + "boat", + "tree" ] } }, @@ -776,10 +776,10 @@ }, "markers": { "items": [ - "tree", "crown", "horn", - "musicalInstrument" + "musicalInstrument", + "tree" ] } }, @@ -799,8 +799,8 @@ }, "markers": { "items": [ - "tree", - "boat" + "boat", + "tree" ] } }, @@ -823,9 +823,9 @@ "unicorn" ], "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -868,9 +868,9 @@ }, "markers": { "items": [ - "tree", "crown", - "sword" + "sword", + "tree" ] } }, @@ -888,8 +888,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "key" @@ -912,9 +912,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown" @@ -941,8 +941,8 @@ "insect" ], "items": [ - "flower", - "crown" + "crown", + "flower" ] } }, @@ -965,9 +965,9 @@ "lion" ], "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -1012,13 +1012,13 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -1178,8 +1178,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ] } }, @@ -1217,9 +1217,9 @@ "lion" ], "items": [ + "crown", "flower", - "walls", - "crown" + "walls" ] } }, @@ -1239,10 +1239,10 @@ }, "markers": { "animals": [ - "lion", + "bird", "deer", "eagle", - "bird" + "lion" ] } }, @@ -1283,9 +1283,9 @@ "lion" ], "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -1366,12 +1366,12 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -1414,12 +1414,12 @@ }, "markers": { "animals": [ - "parrot", - "bird" + "bird", + "parrot" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -1486,11 +1486,11 @@ "lion" ], "items": [ - "lily", "cross", "crown", - "sword", - "flower" + "flower", + "lily", + "sword" ] } }, @@ -1510,13 +1510,13 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -1594,8 +1594,8 @@ "lion" ], "items": [ - "jewelry", - "crown" + "crown", + "jewelry" ] } }, @@ -1619,10 +1619,10 @@ "lion" ], "items": [ - "walls", "boat", "cross", - "crown" + "crown", + "walls" ] } }, @@ -1661,8 +1661,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "crown" @@ -1698,8 +1698,8 @@ }, "markers": { "items": [ - "rose", - "flower" + "flower", + "rose" ] } }, @@ -1719,10 +1719,10 @@ }, "markers": { "items": [ - "lily", "boat", "crown", - "flower" + "flower", + "lily" ] } }, @@ -1741,9 +1741,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown", @@ -1790,8 +1790,8 @@ ], "items": [ "cross", - "wheel", - "crown" + "crown", + "wheel" ] } }, @@ -1815,8 +1815,8 @@ "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -1837,8 +1837,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -1860,8 +1860,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -1880,9 +1880,9 @@ "bullBison" ], "items": [ - "tree", "cross", - "crown" + "crown", + "tree" ] } }, @@ -1928,10 +1928,10 @@ "lion" ], "items": [ - "rose", "crown", - "sword", - "flower" + "flower", + "rose", + "sword" ] } }, @@ -1951,8 +1951,8 @@ }, "markers": { "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -1997,14 +1997,14 @@ }, "markers": { "animals": [ + "bird", "eagle", - "pelican", - "bird" + "pelican" ], "items": [ - "key", + "anchor", "crown", - "anchor" + "key" ] } }, @@ -2025,8 +2025,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "cross", @@ -2114,9 +2114,9 @@ }, "markers": { "items": [ + "bell", "boat", - "crown", - "bell" + "crown" ] } }, @@ -2136,8 +2136,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown" @@ -2163,9 +2163,9 @@ "snake" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -2205,9 +2205,9 @@ }, "markers": { "animals": [ - "lion", + "griffin", "horse", - "griffin" + "lion" ], "items": [ "crown" @@ -2230,8 +2230,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "cross", @@ -2300,10 +2300,10 @@ "markers": { "items": [ "arrow", - "walls", "cross", "crown", - "sword" + "sword", + "walls" ] } }, @@ -2323,8 +2323,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ], "items": [ "saint" @@ -2347,8 +2347,8 @@ }, "markers": { "animals": [ - "falcon", - "bird" + "bird", + "falcon" ], "items": [ "cross", @@ -2415,15 +2415,15 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "lily", "cross", "crown", - "flower" + "flower", + "lily" ] } }, @@ -2467,8 +2467,8 @@ }, "markers": { "items": [ - "flower", - "crown" + "crown", + "flower" ] } }, @@ -2491,8 +2491,8 @@ "lion" ], "items": [ - "hammer", "crozier", + "hammer", "saint", "sword" ] @@ -2538,8 +2538,8 @@ "items": [ "crown", "horn", - "sword", - "musicalInstrument" + "musicalInstrument", + "sword" ] } }, @@ -2601,13 +2601,13 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -2693,8 +2693,8 @@ "lion" ], "items": [ - "lily", - "flower" + "flower", + "lily" ] } }, @@ -2713,13 +2713,13 @@ }, "markers": { "animals": [ - "lion", - "deer" + "deer", + "lion" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -2739,13 +2739,13 @@ }, "markers": { "animals": [ + "bird", "pigeon", - "shell", - "bird" + "shell" ], "items": [ - "crozier", "crown", + "crozier", "saint" ] } @@ -2807,17 +2807,17 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", "falcon", - "bird" + "lion" ], "items": [ + "crown", + "flower", "key", "lily", - "walls", - "crown", - "flower" + "walls" ] } }, @@ -2861,13 +2861,13 @@ }, "markers": { "animals": [ - "lion", "bee", - "insect" + "insect", + "lion" ], "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -2888,14 +2888,14 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ + "flower", "key", - "lily", - "flower" + "lily" ] } }, @@ -2960,8 +2960,8 @@ }, "markers": { "animals": [ - "salmon", - "fish" + "fish", + "salmon" ], "items": [ "crown" @@ -3023,12 +3023,12 @@ "lion" ], "items": [ - "tree", - "lily", "cross", "crown", + "flower", + "lily", "saint", - "flower" + "tree" ] } }, @@ -3063,10 +3063,10 @@ }, "markers": { "items": [ - "earOfGrain", - "lily", "crown", - "flower" + "earOfGrain", + "flower", + "lily" ] } }, @@ -3108,8 +3108,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -3139,8 +3139,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ], "items": [ "key" @@ -3166,8 +3166,8 @@ "lion" ], "items": [ - "cross", "angel", + "cross", "crown" ] } @@ -3187,9 +3187,9 @@ }, "markers": { "animals": [ - "eagle", + "bird", "crane", - "bird" + "eagle" ], "items": [ "horn", @@ -3213,9 +3213,9 @@ }, "markers": { "items": [ - "walls", "cross", - "saint" + "saint", + "walls" ] } }, @@ -3278,10 +3278,10 @@ "lion" ], "items": [ - "lily", - "walls", "crown", - "flower" + "flower", + "lily", + "walls" ] } }, @@ -3344,9 +3344,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ "crown", @@ -3369,8 +3369,8 @@ }, "markers": { "items": [ - "heart", - "crown" + "crown", + "heart" ] } }, @@ -3390,8 +3390,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "cross", @@ -3447,8 +3447,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ], "items": [ "crown" @@ -3470,9 +3470,9 @@ }, "markers": { "items": [ - "tree", "horn", - "musicalInstrument" + "musicalInstrument", + "tree" ] } }, @@ -3511,13 +3511,13 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -3539,8 +3539,8 @@ "lion" ], "items": [ - "wheel", - "crown" + "crown", + "wheel" ] } }, @@ -3560,13 +3560,13 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "key", - "jewelry" + "jewelry", + "key" ] } }, @@ -3585,9 +3585,9 @@ }, "markers": { "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -3607,8 +3607,8 @@ }, "markers": { "items": [ - "heart", - "crown" + "crown", + "heart" ] } }, @@ -3708,10 +3708,10 @@ "lion" ], "items": [ - "rose", "cross", "crown", - "flower" + "flower", + "rose" ] } }, @@ -3735,8 +3735,8 @@ "lion" ], "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -3801,11 +3801,11 @@ "bullBison" ], "items": [ - "tree", - "rose", "cross", "crown", - "flower" + "flower", + "rose", + "tree" ] } }, @@ -3842,9 +3842,9 @@ "lion" ], "items": [ - "rose", "crown", - "flower" + "flower", + "rose" ] } }, @@ -3890,8 +3890,8 @@ "dragon" ], "items": [ - "cross", "angel", + "cross", "crown", "sword" ] @@ -3995,14 +3995,14 @@ }, "markers": { "animals": [ - "falcon", - "bird" + "bird", + "falcon" ], "items": [ - "lily", "crown", - "horn", "flower", + "horn", + "lily", "musicalInstrument" ] } @@ -4072,10 +4072,10 @@ "lion" ], "items": [ - "lily", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -4145,10 +4145,10 @@ "lion" ], "items": [ - "lily", "cross", "crown", - "flower" + "flower", + "lily" ] } }, @@ -4266,14 +4266,14 @@ }, "markers": { "animals": [ + "bird", "lion", - "rooster", - "bird" + "rooster" ], "items": [ - "lily", "angel", - "flower" + "flower", + "lily" ] } }, @@ -4293,8 +4293,8 @@ }, "markers": { "items": [ - "flower", - "crown" + "crown", + "flower" ] } }, @@ -4376,8 +4376,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ], "items": [ "crown" @@ -4401,9 +4401,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "heron", - "bird" + "lion" ], "items": [ "crown" @@ -4425,10 +4425,10 @@ }, "markers": { "items": [ - "rose", "crown", - "sword", - "flower" + "flower", + "rose", + "sword" ] } }, @@ -4447,9 +4447,9 @@ }, "markers": { "animals": [ - "lion", + "bear", "bullBison", - "bear" + "lion" ] } }, @@ -4489,8 +4489,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ] } }, @@ -4511,15 +4511,15 @@ }, "markers": { "animals": [ - "lion", - "deer" + "deer", + "lion" ], "items": [ - "tree", + "bell", "cross", "crown", - "bell", - "sword" + "sword", + "tree" ] } }, @@ -4601,8 +4601,8 @@ }, "markers": { "animals": [ - "lion", - "griffin" + "griffin", + "lion" ], "items": [ "cross", @@ -4649,8 +4649,8 @@ "lion" ], "items": [ - "jewelry", - "crown" + "crown", + "jewelry" ] } }, @@ -4670,10 +4670,10 @@ }, "markers": { "animals": [ - "eagle", + "bird", "bullBison", - "unicorn", - "bird" + "eagle", + "unicorn" ], "items": [ "horn", @@ -4714,9 +4714,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "goose", - "bird" + "lion" ], "items": [ "crown" @@ -4739,8 +4739,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ "arrow" @@ -4760,14 +4760,14 @@ }, "markers": { "animals": [ + "bird", "eagle", - "ram", - "bird" + "ram" ], "items": [ "cross", - "jewelry", "crown", + "jewelry", "saint" ] } @@ -4837,9 +4837,9 @@ "lion" ], "items": [ + "crown", "tree", - "walls", - "crown" + "walls" ] } }, @@ -4906,11 +4906,11 @@ "lion" ], "items": [ - "lily", - "rose", - "jewelry", "crown", - "flower" + "flower", + "jewelry", + "lily", + "rose" ] } }, @@ -4930,8 +4930,8 @@ }, "markers": { "items": [ - "tree", - "crown" + "crown", + "tree" ] } }, @@ -4994,12 +4994,12 @@ }, "markers": { "items": [ - "rose", "boat", "crown", - "horn", "flower", - "musicalInstrument" + "horn", + "musicalInstrument", + "rose" ] } }, @@ -5040,8 +5040,8 @@ }, "markers": { "animals": [ - "swan", - "bird" + "bird", + "swan" ], "items": [ "arrow", @@ -5065,8 +5065,8 @@ }, "markers": { "animals": [ - "goose", - "bird" + "bird", + "goose" ], "items": [ "crown" @@ -5089,8 +5089,8 @@ }, "markers": { "animals": [ - "stork", - "bird" + "bird", + "stork" ], "items": [ "crown" @@ -5174,9 +5174,9 @@ }, "markers": { "animals": [ - "lion", "bee", - "insect" + "insect", + "lion" ], "items": [ "crown" @@ -5220,8 +5220,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "crown", @@ -5248,9 +5248,9 @@ "lion" ], "items": [ - "walls", "cross", - "crown" + "crown", + "walls" ] } }, @@ -5311,10 +5311,10 @@ }, "markers": { "items": [ - "rose", "crown", - "saint", - "flower" + "flower", + "rose", + "saint" ] } }, @@ -5399,8 +5399,8 @@ "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -5459,8 +5459,8 @@ }, "markers": { "animals": [ - "pigeon", - "bird" + "bird", + "pigeon" ], "items": [ "crown" @@ -5483,14 +5483,14 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "tree", "crown", - "saint" + "saint", + "tree" ] } }, @@ -5510,9 +5510,9 @@ }, "markers": { "items": [ - "earOfGrain", "cross", - "crown" + "crown", + "earOfGrain" ] } }, @@ -5534,9 +5534,9 @@ "boar" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -5568,9 +5568,9 @@ }, "markers": { "items": [ + "anchor", "cross", - "crown", - "anchor" + "crown" ] } }, @@ -5658,10 +5658,10 @@ "salmon" ], "items": [ - "lily", "cross", "crown", - "flower" + "flower", + "lily" ] } }, @@ -5683,8 +5683,8 @@ "lion" ], "items": [ - "cross", "angel", + "cross", "crown", "saint" ] @@ -5706,9 +5706,9 @@ }, "markers": { "animals": [ - "lion", + "dragon", "horse", - "dragon" + "lion" ], "items": [ "cross", @@ -5731,8 +5731,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "crozier" @@ -5756,16 +5756,16 @@ }, "markers": { "animals": [ - "lion", - "horse", + "bird", "eagle", - "rooster", - "bird" + "horse", + "lion", + "rooster" ], "items": [ - "lily", "crown", - "flower" + "flower", + "lily" ] } }, @@ -5785,8 +5785,8 @@ }, "markers": { "animals": [ - "eagle", - "bird" + "bird", + "eagle" ], "items": [ "cross", @@ -5832,13 +5832,13 @@ }, "markers": { "animals": [ - "snake", "bird", - "ram" + "ram", + "snake" ], "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -5912,10 +5912,10 @@ }, "markers": { "items": [ - "lily", "cross", "crown", - "flower" + "flower", + "lily" ] } }, @@ -5982,9 +5982,9 @@ "lion" ], "items": [ + "crown", "flower", - "walls", - "crown" + "walls" ] } }, @@ -6027,8 +6027,8 @@ "lion" ], "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -6092,8 +6092,8 @@ }, "markers": { "animals": [ - "lion", - "horse" + "horse", + "lion" ], "items": [ "crown", @@ -6119,10 +6119,10 @@ "lion" ], "items": [ - "lily", "cross", "crown", - "flower" + "flower", + "lily" ] } }, @@ -6162,10 +6162,10 @@ "lion" ], "items": [ - "heart", - "rose", "crown", - "flower" + "flower", + "heart", + "rose" ] } }, @@ -6228,8 +6228,8 @@ }, "markers": { "animals": [ - "rooster", - "bird" + "bird", + "rooster" ], "items": [ "crown" @@ -6292,9 +6292,9 @@ }, "markers": { "animals": [ - "lion", + "bird", "goose", - "bird" + "lion" ], "items": [ "crown" @@ -6317,8 +6317,8 @@ }, "markers": { "animals": [ - "lion", - "dragon" + "dragon", + "lion" ], "items": [ "cross", @@ -6346,8 +6346,8 @@ "boar" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -6366,16 +6366,16 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "walls", "crown", "horn", + "musicalInstrument", "saint", - "musicalInstrument" + "walls" ] } }, @@ -6466,10 +6466,10 @@ "lion" ], "items": [ - "walls", "crown", "horn", - "musicalInstrument" + "musicalInstrument", + "walls" ] } }, @@ -6491,9 +6491,9 @@ "lion" ], "items": [ - "key", "cross", - "crown" + "crown", + "key" ] } }, @@ -6539,8 +6539,8 @@ }, "markers": { "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -6660,8 +6660,8 @@ }, "markers": { "animals": [ - "duck", - "bird" + "bird", + "duck" ], "items": [ "crown" @@ -6704,8 +6704,8 @@ "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -6726,11 +6726,11 @@ }, "markers": { "animals": [ - "lion", - "stork", "bee", "bird", - "insect" + "insect", + "lion", + "stork" ], "items": [ "flower" @@ -6797,8 +6797,8 @@ "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -6841,8 +6841,8 @@ }, "markers": { "animals": [ - "raven", - "bird" + "bird", + "raven" ], "items": [ "crown" @@ -6948,8 +6948,8 @@ }, "markers": { "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -7001,8 +7001,8 @@ "lion" ], "items": [ - "key", "crown", + "key", "sword" ] } @@ -7049,8 +7049,8 @@ "deer" ], "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -7128,9 +7128,9 @@ }, "markers": { "items": [ - "windmill", + "crown", "earOfGrain", - "crown" + "windmill" ] } }, @@ -7147,9 +7147,9 @@ }, "markers": { "animals": [ + "bird", "eagle", - "fox", - "bird" + "fox" ], "items": [ "cross", @@ -7270,9 +7270,9 @@ }, "markers": { "animals": [ - "lion", + "dragon", "horse", - "dragon" + "lion" ], "items": [ "crown", @@ -7315,15 +7315,15 @@ }, "markers": { "animals": [ - "lion", - "eagle", "bee", "bird", - "insect" + "eagle", + "insect", + "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -7343,13 +7343,13 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "walls", - "crown" + "crown", + "walls" ] } }, @@ -7451,8 +7451,8 @@ }, "markers": { "items": [ - "key", - "crown" + "crown", + "key" ] } }, @@ -7516,8 +7516,8 @@ "lion" ], "items": [ - "flower", - "crown" + "crown", + "flower" ] } }, diff --git a/public/data/heraldry/nl/province-details-data.json b/public/data/heraldry/nl/province-details-data.json index 52b7eb6d6..aa99820a4 100644 --- a/public/data/heraldry/nl/province-details-data.json +++ b/public/data/heraldry/nl/province-details-data.json @@ -38,10 +38,10 @@ "lion" ], "items": [ - "lily", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -64,10 +64,10 @@ "lion" ], "items": [ - "lily", "crown", - "saint", - "flower" + "flower", + "lily", + "saint" ] } }, @@ -87,13 +87,13 @@ }, "markers": { "animals": [ - "lion", - "griffin" + "griffin", + "lion" ], "items": [ + "crown", "heart", - "tree", - "crown" + "tree" ] } }, @@ -112,14 +112,14 @@ }, "markers": { "animals": [ - "lion", - "dragon" + "dragon", + "lion" ], "items": [ - "rose", - "flower", "cross", - "crown" + "crown", + "flower", + "rose" ] } }, @@ -139,13 +139,13 @@ }, "markers": { "animals": [ - "lion", - "griffin" + "griffin", + "lion" ], "items": [ + "crown", "heart", - "tree", - "crown" + "tree" ] } }, @@ -166,13 +166,13 @@ }, "markers": { "animals": [ - "lion", + "bird", "eagle", - "bird" + "lion" ], "items": [ - "heart", - "crown" + "crown", + "heart" ] } }, diff --git a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx index 45dfd3b9b..bceaa9d5c 100644 --- a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx +++ b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx @@ -67,13 +67,9 @@ const FilterSeeds = ({ country }: Props) => { } }); - copyText(`${JSON.stringify(newData, null, 4)},`); + copyText(JSON.stringify(newData, null, 2)); }; - if (shortcuts.length === 0) { - return null; - } - return (

diff --git a/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx b/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx index 923057580..e1120bf97 100644 --- a/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx +++ b/src/topic/Heraldry/features/modifyMarkers/components/DevelopmentPaneSidebarListOfFilters/MergeModificationButton.tsx @@ -41,7 +41,7 @@ const MergeModificationButton = ({ exclude, }); - copyText(`${JSON.stringify(mergedFilter, null, 4)}`); + copyText(`${JSON.stringify(mergedFilter, null, 4)},`); }; return ( diff --git a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts index 95bff6161..9551b34b3 100644 --- a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts +++ b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts @@ -12,15 +12,15 @@ type Params = { const sortRules = (a?: ManualMarker, b?: ManualMarker) => { if (typeof a === "string" && typeof b === "string") { - return b.localeCompare(a); + return a.localeCompare(b); } if ( typeof (a as ComplexManualMarker)?.imageHash === "string" && typeof (b as ComplexManualMarker)?.imageHash === "string" ) { - return (b as ComplexManualMarker).imageHash.localeCompare( - (a as ComplexManualMarker).imageHash + return (a as ComplexManualMarker).imageHash.localeCompare( + (b as ComplexManualMarker).imageHash ); } diff --git a/src/topic/Heraldry/utils/markers/getMarkers.ts b/src/topic/Heraldry/utils/markers/getMarkers.ts index b4dc9613d..42f88176f 100644 --- a/src/topic/Heraldry/utils/markers/getMarkers.ts +++ b/src/topic/Heraldry/utils/markers/getMarkers.ts @@ -154,8 +154,8 @@ export const getMarkers = ({ } return { - types, - animals, - items, + types: types.sort((a, b) => a.localeCompare(b)), + animals: animals.sort((a, b) => a.localeCompare(b)), + items: items.sort((a, b) => a.localeCompare(b)), }; }; From 6aeb8e7be9bd17a97468a33730bebf3a310725f4 Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Mon, 10 Nov 2025 20:25:16 +0100 Subject: [PATCH 6/9] Sorting improvments --- public/data/heraldry/nl/filters.json | 75 ++++++++++--------- .../nl/formerGemeente-details-data.json | 21 +++++- .../heraldry/nl/gemeente-details-data.json | 4 + .../ListOfFilters/FilterSeeds.tsx | 21 ++++++ .../utils/get-merged-filter-data.ts | 1 + 5 files changed, 86 insertions(+), 36 deletions(-) diff --git a/public/data/heraldry/nl/filters.json b/public/data/heraldry/nl/filters.json index d974647e0..9435d85c6 100644 --- a/public/data/heraldry/nl/filters.json +++ b/public/data/heraldry/nl/filters.json @@ -4,13 +4,13 @@ { "name": "ram", "phrases": [ - "lammetje", "lam", + "lammetje", "ram", + "ramskoppen", "schaap", - "schapen", "schaapskop", - "ramskoppen" + "schapen" ] }, { @@ -37,15 +37,15 @@ "name": "bullBison", "phrases": [ "halfstier", + "koe", + "koeien", "os", + "ossenkop", "stier", "stiertje", "vaarskalf", "waterbuffel", - "wisent", - "koe", - "koeien", - "ossenkop" + "wisent" ] }, { @@ -126,12 +126,12 @@ "gewei", "hert", "herten", + "hertshoornen", "hinde", + "ree", "reebokje", "reebokjes", - "ree", - "reeën", - "hertshoornen" + "reeën" ] }, { @@ -165,9 +165,9 @@ { "name": "goat", "phrases": [ + "bok", "geit", - "geiten", - "bok" + "geiten" ] }, { @@ -216,8 +216,8 @@ { "name": "salmon", "phrases": [ - "zalmen", - "zalm" + "zalm", + "zalmen" ] }, { @@ -243,11 +243,11 @@ "name": "shell", "phrases": [ "jacobsschelpen", - "st.jacobsschelpen", "schelp", "schelpen", "schelpje", "schelpjes", + "st.jacobsschelpen", "zeehorens" ] }, @@ -277,9 +277,9 @@ "phrases": [ "adelaar", "adelaars", + "adelaarspoot", "arend", - "arenden", - "adelaarspoot" + "arenden" ] }, { @@ -306,11 +306,12 @@ { "name": "dog", "phrases": [ + "brakkenkoppen", + "hazewindhonden", "hond", "honden", "hondenkoppen", - "hazewindhonden", - "brakkenkoppen" + "windhond" ] }, { @@ -322,13 +323,15 @@ { "name": "bird", "phrases": [ - "vogels", + "fazant", "kauwen", - "merlet", "maarlen", "meerlen", - "fazant", - "vink" + "merlet", + "vink", + "vogels", + "zwaluw", + "zwaluwen" ] }, { @@ -341,22 +344,23 @@ { "name": "fish", "phrases": [ + "baars", + "baarsen", + "bot", "brasem", "brasems", "halfvis", + "haringen", "karper", "karpers", "meerval", + "rog", "snoek", "vis", "visachtig", "visgraaf", "vissen", - "zalm", - "baars", - "baarsen", - "haringen", - "rog" + "zalm" ] }, { @@ -533,8 +537,8 @@ { "name": "anchor", "phrases": [ - "scheepsanker", - "anker" + "anker", + "scheepsanker" ] }, { @@ -549,6 +553,7 @@ "phrases": [ "bloem", "bloemen", + "krullelie", "tulp", "tulpen" ] @@ -573,10 +578,10 @@ { "name": "sword", "phrases": [ - "zwaard", - "zwaarden", "degen", - "gevest" + "gevest", + "zwaard", + "zwaarden" ] }, { @@ -659,10 +664,10 @@ { "name": "windmill", "phrases": [ - "windmolen", - "windmolens", "molen", "molens", + "windmolen", + "windmolens", "wipmolen" ] }, diff --git a/public/data/heraldry/nl/formerGemeente-details-data.json b/public/data/heraldry/nl/formerGemeente-details-data.json index fb788e69c..9e4e08526 100644 --- a/public/data/heraldry/nl/formerGemeente-details-data.json +++ b/public/data/heraldry/nl/formerGemeente-details-data.json @@ -3743,7 +3743,8 @@ "markers": { "items": [ "bell", - "crown" + "crown", + "flower" ] } }, @@ -8345,6 +8346,11 @@ "grey": 0.0005, "green": 0.0002 } + }, + "markers": { + "animals": [ + "bird" + ] } }, { @@ -14985,6 +14991,11 @@ "grey": 0.6804, "black": 0.0061 } + }, + "markers": { + "animals": [ + "fish" + ] } }, { @@ -17103,6 +17114,11 @@ "white": 0.001, "black": 0.0117 } + }, + "markers": { + "animals": [ + "bird" + ] } }, { @@ -18294,6 +18310,9 @@ } }, "markers": { + "animals": [ + "dog" + ], "items": [ "tree" ] diff --git a/public/data/heraldry/nl/gemeente-details-data.json b/public/data/heraldry/nl/gemeente-details-data.json index e9b0ab5b6..7f11c3153 100644 --- a/public/data/heraldry/nl/gemeente-details-data.json +++ b/public/data/heraldry/nl/gemeente-details-data.json @@ -2394,6 +2394,9 @@ } }, "markers": { + "animals": [ + "fish" + ], "items": [ "crown" ] @@ -6488,6 +6491,7 @@ }, "markers": { "animals": [ + "bird", "lion" ], "items": [ diff --git a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx index bceaa9d5c..40e01a619 100644 --- a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx +++ b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx @@ -67,6 +67,27 @@ const FilterSeeds = ({ country }: Props) => { } }); + newData.types = newData.types.map((filter) => { + return { + ...filter, + phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), + }; + }); + + newData.animals = newData.animals.map((filter) => { + return { + ...filter, + phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), + }; + }); + + newData.items = newData.items.map((filter) => { + return { + ...filter, + phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), + }; + }); + copyText(JSON.stringify(newData, null, 2)); }; diff --git a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts index 9551b34b3..f695bce4a 100644 --- a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts +++ b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts @@ -69,6 +69,7 @@ export const getMergedFilterData = ({ return { ...initFilter, + phrases: initFilter.phrases?.sort((a, b) => a.localeCompare(b)), include: [...includeWithRemoved, ...rulesToInclude].sort(sortRules), exclude: [...excludeWithRemoved, ...rulesToExclude].sort(sortRules), }; From 3e87347a4e5c926f9ec654f3eff137971156deeb Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Mon, 10 Nov 2025 20:56:33 +0100 Subject: [PATCH 7/9] Markers update --- public/data/heraldry/nl/filters.json | 27 ++- .../nl/formerGemeente-details-data.json | 225 +++++++++++++++--- .../heraldry/nl/gemeente-details-data.json | 114 ++++++--- 3 files changed, 304 insertions(+), 62 deletions(-) diff --git a/public/data/heraldry/nl/filters.json b/public/data/heraldry/nl/filters.json index 9435d85c6..f5b93d526 100644 --- a/public/data/heraldry/nl/filters.json +++ b/public/data/heraldry/nl/filters.json @@ -325,9 +325,12 @@ "phrases": [ "fazant", "kauwen", + "kievit", + "kieviten", "maarlen", "meerlen", "merlet", + "patrijs", "vink", "vogels", "zwaluw", @@ -475,8 +478,13 @@ { "name": "tree", "phrases": [ + "bladen", "boom", - "boomen" + "boomen", + "eikenboom", + "elzen", + "lindeboom", + "rijssen tak" ] }, { @@ -517,6 +525,9 @@ "phrases": [ "aar", "aren", + "hooischelf", + "korenschoof", + "korenschoven", "schoof" ] }, @@ -553,7 +564,11 @@ "phrases": [ "bloem", "bloemen", + "boekweitbloemen", + "boekweitplant", + "distel", "krullelie", + "rijsttakken", "tulp", "tulpen" ] @@ -675,11 +690,15 @@ "name": "walls", "phrases": [ "bakstenen", + "burcht", + "burgt", + "burgten", "kaseel", "muur", "poort", "poorten", - "toren" + "toren", + "wachttoren" ] }, { @@ -687,7 +706,9 @@ "phrases": [ "druif", "druivenrank", - "druivenranken" + "druivenranken", + "wijngaardranken", + "wijnstok" ] } ] diff --git a/public/data/heraldry/nl/formerGemeente-details-data.json b/public/data/heraldry/nl/formerGemeente-details-data.json index 9e4e08526..7d265e6c6 100644 --- a/public/data/heraldry/nl/formerGemeente-details-data.json +++ b/public/data/heraldry/nl/formerGemeente-details-data.json @@ -568,7 +568,8 @@ "snake" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -721,6 +722,11 @@ "blue": 0.5981, "grey": 0.0041 } + }, + "markers": { + "items": [ + "earOfGrain" + ] } }, { @@ -887,6 +893,7 @@ "items": [ "bell", "crown", + "earOfGrain", "flower", "rose" ] @@ -1545,7 +1552,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "walls" ] } }, @@ -1598,6 +1606,11 @@ "white": 0.0042, "grey": 0.145 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -1658,7 +1671,8 @@ "lion" ], "items": [ - "crown" + "crown", + "tree" ] } }, @@ -2119,6 +2133,11 @@ "grey": 0.0001, "white": 0.0019 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -2131,6 +2150,11 @@ "grey": 0.0013, "blue": 0.4054 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -2628,6 +2652,7 @@ "markers": { "items": [ "crown", + "walls", "windmill" ] } @@ -2962,7 +2987,8 @@ "markers": { "items": [ "flower", - "rose" + "rose", + "tree" ] } }, @@ -3489,6 +3515,7 @@ "lion" ], "items": [ + "earOfGrain", "flower", "horn", "musicalInstrument", @@ -3701,7 +3728,8 @@ "markers": { "items": [ "crown", - "hammer" + "hammer", + "tree" ] } }, @@ -3877,7 +3905,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "earOfGrain" ] } }, @@ -4158,7 +4187,8 @@ "markers": { "items": [ "crown", - "jewelry" + "jewelry", + "walls" ] } }, @@ -4356,6 +4386,7 @@ "markers": { "items": [ "crown", + "earOfGrain", "flower", "lily" ] @@ -4448,7 +4479,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "earOfGrain" ] } }, @@ -4489,6 +4521,7 @@ }, "markers": { "items": [ + "earOfGrain", "walls" ] } @@ -6801,7 +6834,8 @@ "lion" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -7371,7 +7405,8 @@ "raven" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -7488,6 +7523,9 @@ "markers": { "animals": [ "fish" + ], + "items": [ + "earOfGrain" ] } }, @@ -8314,6 +8352,11 @@ "grey": 0.0001, "white": 0.0008 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -8411,6 +8454,11 @@ "blue": 0.0001, "black": 0.0074 } + }, + "markers": { + "items": [ + "tree" + ] } }, { @@ -8664,6 +8712,9 @@ "markers": { "animals": [ "lion" + ], + "items": [ + "tree" ] } }, @@ -9045,6 +9096,9 @@ "animals": [ "bird", "duck" + ], + "items": [ + "walls" ] } }, @@ -9211,6 +9265,10 @@ "markers": { "animals": [ "ram" + ], + "items": [ + "earOfGrain", + "tree" ] } }, @@ -9375,7 +9433,8 @@ "items": [ "crown", "key", - "saint" + "saint", + "tree" ] } }, @@ -9434,6 +9493,11 @@ "grey": 0.0052, "gold": 0.1615 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -9648,6 +9712,11 @@ "grey": 0.0161, "green": 0 } + }, + "markers": { + "items": [ + "tree" + ] } }, { @@ -9913,7 +9982,8 @@ "salmon" ], "items": [ - "crown" + "crown", + "earOfGrain" ] } }, @@ -11167,6 +11237,7 @@ "bullBison" ], "items": [ + "earOfGrain", "horn", "musicalInstrument", "walls" @@ -12019,7 +12090,8 @@ ], "items": [ "crown", - "tree" + "tree", + "walls" ] } }, @@ -12286,7 +12358,8 @@ "lion" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -12610,7 +12683,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "tree" ] } }, @@ -12669,6 +12743,11 @@ "gold": 0.0908, "red": 0.0026 } + }, + "markers": { + "items": [ + "earOfGrain" + ] } }, { @@ -12749,7 +12828,8 @@ ], "items": [ "cross", - "crown" + "crown", + "walls" ] } }, @@ -13177,7 +13257,8 @@ "flower", "heart", "lily", - "saint" + "saint", + "walls" ] } }, @@ -13242,7 +13323,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "tree" ] } }, @@ -13422,6 +13504,11 @@ "blue": 0.0481, "green": 0.3544 } + }, + "markers": { + "items": [ + "tree" + ] } }, { @@ -14394,7 +14481,8 @@ "markers": { "items": [ "flower", - "lily" + "lily", + "walls" ] } }, @@ -14531,7 +14619,8 @@ "items": [ "bell", "cross", - "sword" + "sword", + "walls" ] } }, @@ -14964,7 +15053,8 @@ "unicorn" ], "items": [ - "crown" + "crown", + "tree" ] } }, @@ -15180,6 +15270,11 @@ "green": 0.0183, "blue": 0.0002 } + }, + "markers": { + "animals": [ + "bird" + ] } }, { @@ -15197,7 +15292,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "walls" ] } }, @@ -15431,6 +15527,7 @@ "markers": { "items": [ "crown", + "flower", "sword" ] } @@ -15501,6 +15598,11 @@ "grey": 0.9811, "black": 0.0189 } + }, + "markers": { + "items": [ + "grape" + ] } }, { @@ -15618,6 +15720,7 @@ }, "markers": { "animals": [ + "bird", "dog" ], "items": [ @@ -16137,6 +16240,11 @@ "black": 0.0056, "red": 0.1571 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -16149,6 +16257,11 @@ "black": 0.0242, "gold": 0.2551 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -16752,7 +16865,8 @@ "lion" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -16781,6 +16895,11 @@ "white": 0.0021, "black": 0.0001 } + }, + "markers": { + "items": [ + "earOfGrain" + ] } }, { @@ -16838,6 +16957,9 @@ } }, "markers": { + "animals": [ + "bird" + ], "items": [ "crown" ] @@ -16933,6 +17055,11 @@ "gold": 0.5353, "red": 0.3201 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -16987,7 +17114,8 @@ "lion" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -17007,7 +17135,8 @@ "markers": { "items": [ "cross", - "crown" + "crown", + "walls" ] } }, @@ -17054,6 +17183,11 @@ "blue": 0.0399, "green": 0.025 } + }, + "markers": { + "items": [ + "grape" + ] } }, { @@ -17190,6 +17324,7 @@ }, "markers": { "items": [ + "flower", "saint" ] } @@ -17694,7 +17829,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "walls" ] } }, @@ -17738,7 +17874,8 @@ "lion" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -18351,6 +18488,11 @@ "grey": 0.2589, "black": 0.0001 } + }, + "markers": { + "items": [ + "earOfGrain" + ] } }, { @@ -18970,6 +19112,11 @@ "red": 0.0187, "black": 0.0103 } + }, + "markers": { + "items": [ + "tree" + ] } }, { @@ -19730,6 +19877,11 @@ "green": 0.0001, "blue": 0.0015 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -19964,6 +20116,11 @@ "grey": 0.9582, "black": 0.0418 } + }, + "markers": { + "items": [ + "flower" + ] } }, { @@ -20110,6 +20267,9 @@ "markers": { "animals": [ "lion" + ], + "items": [ + "walls" ] } }, @@ -20537,6 +20697,11 @@ "red": 0.1456, "blue": 0 } + }, + "markers": { + "items": [ + "walls" + ] } }, { @@ -20575,6 +20740,9 @@ "markers": { "animals": [ "lion" + ], + "items": [ + "walls" ] } }, @@ -20679,7 +20847,8 @@ ], "items": [ "crown", - "flower" + "flower", + "walls" ] } }, diff --git a/public/data/heraldry/nl/gemeente-details-data.json b/public/data/heraldry/nl/gemeente-details-data.json index 7f11c3153..0d0ceb1d6 100644 --- a/public/data/heraldry/nl/gemeente-details-data.json +++ b/public/data/heraldry/nl/gemeente-details-data.json @@ -389,7 +389,8 @@ "flower", "heart", "lily", - "saint" + "saint", + "walls" ] } }, @@ -498,7 +499,8 @@ "fox" ], "items": [ - "crown" + "crown", + "tree" ] } }, @@ -1112,7 +1114,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "walls" ] } }, @@ -1394,7 +1397,8 @@ "lion" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -1554,6 +1558,11 @@ "white": 0.0048, "blue": 0.0013 } + }, + "markers": { + "items": [ + "tree" + ] } }, { @@ -1573,6 +1582,9 @@ "markers": { "animals": [ "lion" + ], + "items": [ + "walls" ] } }, @@ -1931,7 +1943,9 @@ "crown", "flower", "rose", - "sword" + "sword", + "tree", + "walls" ] } }, @@ -2140,7 +2154,8 @@ "eagle" ], "items": [ - "crown" + "crown", + "earOfGrain" ] } }, @@ -2185,7 +2200,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "earOfGrain" ] } }, @@ -2210,7 +2226,8 @@ "lion" ], "items": [ - "crown" + "crown", + "earOfGrain" ] } }, @@ -2352,7 +2369,8 @@ ], "items": [ "cross", - "crown" + "crown", + "tree" ] } }, @@ -2398,7 +2416,8 @@ "fish" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -3171,7 +3190,8 @@ "items": [ "angel", "cross", - "crown" + "crown", + "walls" ] } }, @@ -3328,7 +3348,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "walls" ] } }, @@ -3454,7 +3475,8 @@ "duck" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -3611,7 +3633,8 @@ "markers": { "items": [ "crown", - "heart" + "heart", + "walls" ] } }, @@ -3667,7 +3690,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "walls" ] } }, @@ -3824,6 +3848,11 @@ "white": 0.0013, "green": 0.0001 } + }, + "markers": { + "items": [ + "earOfGrain" + ] } }, { @@ -4191,6 +4220,9 @@ "markers": { "animals": [ "lion" + ], + "items": [ + "walls" ] } }, @@ -4841,6 +4873,7 @@ ], "items": [ "crown", + "earOfGrain", "tree", "walls" ] @@ -4886,7 +4919,8 @@ ], "items": [ "boat", - "crown" + "crown", + "tree" ] } }, @@ -5048,7 +5082,8 @@ ], "items": [ "arrow", - "crown" + "crown", + "walls" ] } }, @@ -5317,7 +5352,8 @@ "crown", "flower", "rose", - "saint" + "saint", + "tree" ] } }, @@ -5360,6 +5396,9 @@ "animals": [ "bee", "insect" + ], + "items": [ + "earOfGrain" ] } }, @@ -5466,7 +5505,8 @@ "pigeon" ], "items": [ - "crown" + "crown", + "tree" ] } }, @@ -5620,7 +5660,8 @@ "lion" ], "items": [ - "crown" + "crown", + "tree" ] } }, @@ -5841,7 +5882,8 @@ ], "items": [ "crown", - "key" + "key", + "tree" ] } }, @@ -5918,7 +5960,8 @@ "cross", "crown", "flower", - "lily" + "lily", + "walls" ] } }, @@ -5941,7 +5984,8 @@ "lion" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -5962,7 +6006,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "walls" ] } }, @@ -6100,7 +6145,8 @@ ], "items": [ "crown", - "saint" + "saint", + "walls" ] } }, @@ -6274,7 +6320,8 @@ "unicorn" ], "items": [ - "crown" + "crown", + "tree" ] } }, @@ -6497,7 +6544,8 @@ "items": [ "cross", "crown", - "key" + "key", + "walls" ] } }, @@ -6624,7 +6672,8 @@ "lion" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -6760,7 +6809,8 @@ "griffin" ], "items": [ - "crown" + "crown", + "walls" ] } }, @@ -6779,7 +6829,8 @@ }, "markers": { "items": [ - "crown" + "crown", + "earOfGrain" ] } }, @@ -7054,7 +7105,8 @@ ], "items": [ "crown", - "key" + "key", + "walls" ] } }, From 9c15e472f6fc26082b0557c9e547e5214a624eab Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Mon, 10 Nov 2025 21:49:52 +0100 Subject: [PATCH 8/9] Markers update --- public/data/heraldry/nl/filters.json | 673 +++++++++--------- .../nl/formerGemeente-details-data.json | 1 - .../ListOfFilters/FilterSeeds.tsx | 63 +- .../utils/get-merged-filter-data.ts | 5 + 4 files changed, 380 insertions(+), 362 deletions(-) diff --git a/public/data/heraldry/nl/filters.json b/public/data/heraldry/nl/filters.json index f5b93d526..a98701af1 100644 --- a/public/data/heraldry/nl/filters.json +++ b/public/data/heraldry/nl/filters.json @@ -2,35 +2,65 @@ "types": [], "animals": [ { - "name": "ram", + "name": "bat", "phrases": [ - "lam", - "lammetje", - "ram", - "ramskoppen", - "schaap", - "schaapskop", - "schapen" + "vleermuis", + "vleermuizen" + ], + "include": [], + "exclude": [ + { + "imageHash": "56d44e53", + "note": "Wapen van Bath (Nederland)" + } ] }, { - "name": "stork", + "name": "bear", "phrases": [ - "ooievaar", - "ooievaars" + "beer", + "beren", + "berenklaauwen" ] }, { - "name": "stork", + "name": "beaver", "phrases": [ - "lepelaar" + "bever", + "bevers" ] }, { - "name": "beaver", + "name": "bee", "phrases": [ - "bever", - "bevers" + "bijen" + ] + }, + { + "name": "bird", + "phrases": [ + "fazant", + "kauwen", + "kievit", + "kieviten", + "maarlen", + "meerlen", + "merlet", + "patrijs", + "vink", + "vogels", + "zwaluw", + "zwaluwen" + ] + }, + { + "name": "boar", + "phrases": [ + "everzwijn", + "everzwijnen", + "zwijn", + "zwijnen", + "zwijnskoppen" ] }, { @@ -48,6 +78,18 @@ "wisent" ] }, + { + "name": "butterfly", + "phrases": [ + "vlinder" + ] + }, + { + "name": "cat", + "phrases": [ + "kat" + ] + }, { "name": "centaur", "phrases": [ @@ -62,126 +104,153 @@ ] }, { - "name": "heron", + "name": "crane", "phrases": [ - "reiger", - "reigers" + "kraanvogel", + "kraanvogels" ] }, { - "name": "boar", + "name": "crayfish", "phrases": [ - "everzwijn", - "everzwijnen", - "zwijn", - "zwijnen", - "zwijnskoppen" + "kreeft", + "kreeften" ] }, { - "name": "goose", + "name": "deer", "phrases": [ - "gans", - "ganzen" + "gewei", + "hert", + "herten", + "hertshoornen", + "hinde", + "ree", + "reebokje", + "reebokjes", + "reeën" ] }, { - "name": "pigeon", + "name": "dog", "phrases": [ - "duif", - "duiven" + "brakkenkoppen", + "hazewindhonden", + "hond", + "honden", + "hondenkoppen", + "windhond" ] }, { - "name": "griffin", + "name": "donkey", "phrases": [ - "griffioen", - "halffgriffioen" + "ezel", + "ezels" ] }, { - "name": "hawk", + "name": "dragon", "phrases": [ - "havik", - "haviken" + "draak", + "draken" ] }, { - "name": "lizard", + "name": "duck", "phrases": [ - "hagedis", - "hagedissen" + "eend", + "eenden" ] }, { - "name": "unicorn", + "name": "eagle", "phrases": [ - "eenhoorn", - "eenhoorns" + "adelaar", + "adelaars", + "adelaarspoot", + "arend", + "arenden" ] }, { - "name": "deer", + "name": "falcon", "phrases": [ - "gewei", - "hert", - "herten", - "hertshoornen", - "hinde", - "ree", - "reebokje", - "reebokjes", - "reeën" + "valk", + "valken" ] }, { - "name": "duck", + "name": "fish", "phrases": [ - "eend", - "eenden" + "baars", + "baarsen", + "bot", + "brasem", + "brasems", + "halfvis", + "haringen", + "karper", + "karpers", + "meerval", + "rog", + "snoek", + "vis", + "visachtig", + "visgraaf", + "vissen", + "zalm" ] }, { - "name": "rooster", + "name": "fox", "phrases": [ - "haan", - "hanen" + "vos", + "vossen" ] }, { - "name": "horse", + "name": "goat", "phrases": [ - "paard", - "paarden", - "zeepaarden" + "bok", + "geit", + "geiten" ] }, { - "name": "cat", + "name": "goose", "phrases": [ - "kat" + "gans", + "ganzen" ] }, { - "name": "goat", + "name": "griffin", "phrases": [ - "bok", - "geit", - "geiten" + "griffioen", + "halffgriffioen" ] }, { - "name": "raven", + "name": "hawk", "phrases": [ - "raaf", - "raven" + "havik", + "haviken" ] }, { - "name": "raven", + "name": "heron", "phrases": [ - "kraai", - "kraaien" + "reiger", + "reigers" + ] + }, + { + "name": "horse", + "phrases": [ + "paard", + "paarden", + "zeepaarden" ] }, { @@ -200,24 +269,23 @@ ] }, { - "name": "fox", + "name": "lizard", "phrases": [ - "vos", - "vossen" + "hagedis", + "hagedissen" ] }, { - "name": "swan", + "name": "mermaid", "phrases": [ - "zwaan", - "zwaanen" + "zeemeermin", + "zeemeerminnen" ] }, { - "name": "salmon", + "name": "mole", "phrases": [ - "zalm", - "zalmen" + "mol" ] }, { @@ -228,184 +296,151 @@ ] }, { - "name": "mole", + "name": "otter", "phrases": [ - "mol" + "otter" ] }, { - "name": "butterfly", + "name": "owl", "phrases": [ - "vlinder" + "uil", + "uilen" ] }, { - "name": "shell", + "name": "parrot", "phrases": [ - "jacobsschelpen", - "schelp", - "schelpen", - "schelpje", - "schelpjes", - "st.jacobsschelpen", - "zeehorens" + "papegaaien", + "papegaaijen" ] }, { - "name": "bear", + "name": "pelican", "phrases": [ - "beer", - "beren", - "berenklaauwen" + "pelikaan", + "pelikaanen" ] }, { - "name": "bat", - "phrases": [ - "vleermuis", - "vleermuizen" - ] - }, - { - "name": "unusualHybrid", + "name": "pigeon", "phrases": [ - "zeepaarden" + "duif", + "duiven" ] }, { - "name": "eagle", + "name": "rabbit", "phrases": [ - "adelaar", - "adelaars", - "adelaarspoot", - "arend", - "arenden" + "haas", + "konijn", + "konijnen" ] }, { - "name": "donkey", + "name": "ram", "phrases": [ - "ezel", - "ezels" + "lam", + "lammetje", + "ram", + "ramskoppen", + "schaap", + "schaapskop", + "schapen" ] }, { - "name": "parrot", + "name": "raven", "phrases": [ - "papegaaien", - "papegaaijen" + "raaf", + "raven" ] }, { - "name": "pelican", + "name": "raven", "phrases": [ - "pelikaan", - "pelikaanen" + "kraai", + "kraaien" ] }, { - "name": "dog", + "name": "rooster", "phrases": [ - "brakkenkoppen", - "hazewindhonden", - "hond", - "honden", - "hondenkoppen", - "windhond" + "haan", + "hanen" ] }, { - "name": "bee", + "name": "salmon", "phrases": [ - "bijen" + "zalm", + "zalmen" ] }, { - "name": "bird", + "name": "shell", "phrases": [ - "fazant", - "kauwen", - "kievit", - "kieviten", - "maarlen", - "meerlen", - "merlet", - "patrijs", - "vink", - "vogels", - "zwaluw", - "zwaluwen" + "jacobsschelpen", + "schelp", + "schelpen", + "schelpje", + "schelpjes", + "st.jacobsschelpen", + "zeehorens" ] }, { - "name": "crayfish", + "name": "snake", "phrases": [ - "kreeft", - "kreeften" + "slang", + "slangen" ] }, { - "name": "fish", + "name": "squirrel", "phrases": [ - "baars", - "baarsen", - "bot", - "brasem", - "brasems", - "halfvis", - "haringen", - "karper", - "karpers", - "meerval", - "rog", - "snoek", - "vis", - "visachtig", - "visgraaf", - "vissen", - "zalm" + "eekhoorn", + "eekhoorns" ] }, { - "name": "vulture", + "name": "stork", "phrases": [ - "gier", - "gieren" + "ooievaar", + "ooievaars" ] }, { - "name": "dragon", + "name": "stork", "phrases": [ - "draak", - "draken" + "lepelaar" ] }, { - "name": "falcon", + "name": "swan", "phrases": [ - "valk", - "valken" + "zwaan", + "zwaanen" ] }, { - "name": "owl", + "name": "unicorn", "phrases": [ - "uil", - "uilen" + "eenhoorn", + "eenhoorns" ] }, { - "name": "mermaid", + "name": "unusualHybrid", "phrases": [ - "zeemeermin", - "zeemeerminnen" + "zeepaarden" ] }, { - "name": "snake", + "name": "vulture", "phrases": [ - "slang", - "slangen" + "gier", + "gieren" ] }, { @@ -414,13 +449,6 @@ "walvis" ] }, - { - "name": "squirrel", - "phrases": [ - "eekhoorn", - "eekhoorns" - ] - }, { "name": "wolf", "phrases": [ @@ -428,30 +456,16 @@ "wolf", "wolven" ] - }, - { - "name": "otter", - "phrases": [ - "otter" - ] - }, + } + ], + "items": [ { - "name": "rabbit", + "name": "anchor", "phrases": [ - "haas", - "konijn", - "konijnen" + "anker", + "scheepsanker" ] }, - { - "name": "crane", - "phrases": [ - "kraanvogel", - "kraanvogels" - ] - } - ], - "items": [ { "name": "angel", "phrases": [ @@ -461,30 +475,31 @@ ] }, { - "name": "jewelry", + "name": "apple", "phrases": [ - "oorbel", - "ring", - "ringen" + "appel", + "appelboom", + "appels", + "appeltje" ] }, { - "name": "hops", + "name": "arrow", "phrases": [ - "hop", - "hopachtig" + "pijl", + "pijlen" ] }, { - "name": "tree", + "name": "axeSaw", "phrases": [ - "bladen", - "boom", - "boomen", - "eikenboom", - "elzen", - "lindeboom", - "rijssen tak" + "bijl", + "bijlen", + "bijltje", + "hakbijl", + "hakbijlen", + "slagersmes", + "slagersmessen" ] }, { @@ -495,47 +510,19 @@ ] }, { - "name": "apple", - "phrases": [ - "appel", - "appelboom", - "appels", - "appeltje" - ] - }, - { - "name": "pickaxe", - "phrases": [ - "houweel", - "houweels", - "mijnwapen", - "pikhouweel", - "pikhouweels" - ] - }, - { - "name": "key", - "phrases": [ - "sleutel", - "sleutels" - ] - }, - { - "name": "earOfGrain", + "name": "boat", "phrases": [ - "aar", - "aren", - "hooischelf", - "korenschoof", - "korenschoven", - "schoof" + "boot", + "boten", + "schepen", + "schip" ] }, { - "name": "wheel", + "name": "cross", "phrases": [ - "wiel", - "wielen" + "kruis", + "kruisen" ] }, { @@ -546,17 +533,22 @@ ] }, { - "name": "anchor", + "name": "crozier", "phrases": [ - "anker", - "scheepsanker" + "bisschopsstaf", + "herdersstaf", + "herdersstaffen" ] }, { - "name": "cross", + "name": "earOfGrain", "phrases": [ - "kruis", - "kruisen" + "aar", + "aren", + "hooischelf", + "korenschoof", + "korenschoven", + "schoof" ] }, { @@ -574,29 +566,13 @@ ] }, { - "name": "lily", - "phrases": [ - "lelie", - "lelies", - "lelietje" - ] - }, - { - "name": "boat", - "phrases": [ - "boot", - "boten", - "schepen", - "schip" - ] - }, - { - "name": "sword", + "name": "grape", "phrases": [ - "degen", - "gevest", - "zwaard", - "zwaarden" + "druif", + "druivenrank", + "druivenranken", + "wijngaardranken", + "wijnstok" ] }, { @@ -612,24 +588,17 @@ ] }, { - "name": "crozier", - "phrases": [ - "bisschopsstaf", - "herdersstaf", - "herdersstaffen" - ] - }, - { - "name": "horseshoe", + "name": "heart", "phrases": [ - "hoefijzer", - "hoefijzers" + "hart", + "harten" ] }, { - "name": "saint", + "name": "hops", "phrases": [ - "heilige" + "hop", + "hopachtig" ] }, { @@ -644,46 +613,77 @@ ] }, { - "name": "rose", + "name": "horseshoe", "phrases": [ - "roos", - "rozen" + "hoefijzer", + "hoefijzers" ] }, { - "name": "heart", + "name": "jewelry", "phrases": [ - "hart", - "harten" + "oorbel", + "ring", + "ringen" ] }, { - "name": "arrow", + "name": "key", "phrases": [ - "pijl", - "pijlen" + "sleutel", + "sleutels" ] }, { - "name": "axeSaw", + "name": "lily", "phrases": [ - "bijl", - "bijlen", - "bijltje", - "hakbijl", - "hakbijlen", - "slagersmes", - "slagersmessen" + "lelie", + "lelies", + "lelietje" ] }, { - "name": "windmill", + "name": "pickaxe", "phrases": [ - "molen", - "molens", - "windmolen", - "windmolens", - "wipmolen" + "houweel", + "houweels", + "mijnwapen", + "pikhouweel", + "pikhouweels" + ] + }, + { + "name": "rose", + "phrases": [ + "roos", + "rozen" + ] + }, + { + "name": "saint", + "phrases": [ + "heilige" + ] + }, + { + "name": "sword", + "phrases": [ + "degen", + "gevest", + "zwaard", + "zwaarden" + ] + }, + { + "name": "tree", + "phrases": [ + "bladen", + "boom", + "boomen", + "eikenboom", + "elzen", + "lindeboom", + "rijssen tak" ] }, { @@ -702,13 +702,20 @@ ] }, { - "name": "grape", + "name": "wheel", "phrases": [ - "druif", - "druivenrank", - "druivenranken", - "wijngaardranken", - "wijnstok" + "wiel", + "wielen" + ] + }, + { + "name": "windmill", + "phrases": [ + "molen", + "molens", + "windmolen", + "windmolens", + "wipmolen" ] } ] diff --git a/public/data/heraldry/nl/formerGemeente-details-data.json b/public/data/heraldry/nl/formerGemeente-details-data.json index 7d265e6c6..d8532d63e 100644 --- a/public/data/heraldry/nl/formerGemeente-details-data.json +++ b/public/data/heraldry/nl/formerGemeente-details-data.json @@ -14949,7 +14949,6 @@ }, "markers": { "animals": [ - "bat", "bird", "pigeon" ], diff --git a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx index 40e01a619..484226f7d 100644 --- a/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx +++ b/src/topic/Heraldry/components/Panes/DevelopmentPane/ListOfFilters/FilterSeeds.tsx @@ -47,15 +47,17 @@ const FilterSeeds = ({ country }: Props) => { const { include = [], exclude = [] } = modifications[type][name] || {}; if (newData[typeKey].some((filter) => filter.name === name)) { - newData[typeKey].map((filter) => - filter.name === name - ? getMergedFilterData({ - initFilter: filter, - include, - exclude, - }) - : filter - ); + newData[typeKey] = newData[typeKey].map((filter) => { + if (filter.name === name) { + return getMergedFilterData({ + initFilter: filter, + include, + exclude, + }); + } + + return filter; + }); } else { newData[typeKey].push({ name, @@ -67,27 +69,32 @@ const FilterSeeds = ({ country }: Props) => { } }); - newData.types = newData.types.map((filter) => { - return { - ...filter, - phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), - }; - }); - - newData.animals = newData.animals.map((filter) => { - return { - ...filter, - phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), - }; - }); + newData.types = newData.types + .map((filter) => { + return { + ...filter, + phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); - newData.items = newData.items.map((filter) => { - return { - ...filter, - phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), - }; - }); + newData.animals = newData.animals + .map((filter) => { + return { + ...filter, + phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); + newData.items = newData.items + .map((filter) => { + return { + ...filter, + phrases: filter.phrases?.sort((a, b) => a.localeCompare(b)), + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); copyText(JSON.stringify(newData, null, 2)); }; diff --git a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts index f695bce4a..9fdc4dbd9 100644 --- a/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts +++ b/src/topic/Heraldry/features/modifyMarkers/utils/get-merged-filter-data.ts @@ -67,6 +67,11 @@ export const getMergedFilterData = ({ : !hashesToRemove.includes(ruleToCheck.imageHash) ); + console.log({ + rulesToInclude, + rulesToExclude, + }) + return { ...initFilter, phrases: initFilter.phrases?.sort((a, b) => a.localeCompare(b)), From 61572db4a980fcb9c09693a195351d51de219e21 Mon Sep 17 00:00:00 2001 From: Szymon Tondowski Date: Tue, 11 Nov 2025 11:00:17 +0100 Subject: [PATCH 9/9] Index bump from new seed logic --- public/data/heraldry/nl/filters.json | 7 +++++++ public/data/heraldry/nl/province-details-data.json | 3 --- scripts/heraldry/nl/overrides.ts | 8 ++++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/public/data/heraldry/nl/filters.json b/public/data/heraldry/nl/filters.json index a98701af1..53434af71 100644 --- a/public/data/heraldry/nl/filters.json +++ b/public/data/heraldry/nl/filters.json @@ -530,6 +530,13 @@ "phrases": [ "kronen", "kroon" + ], + "include": [], + "exclude": [ + { + "imageHash": "140f5a8c", + "note": "Wapen van Brabant" + } ] }, { diff --git a/public/data/heraldry/nl/province-details-data.json b/public/data/heraldry/nl/province-details-data.json index aa99820a4..f7c8f12d5 100644 --- a/public/data/heraldry/nl/province-details-data.json +++ b/public/data/heraldry/nl/province-details-data.json @@ -14,9 +14,6 @@ "markers": { "animals": [ "lion" - ], - "items": [ - "crown" ] } }, diff --git a/scripts/heraldry/nl/overrides.ts b/scripts/heraldry/nl/overrides.ts index d023b150f..63149265e 100644 --- a/scripts/heraldry/nl/overrides.ts +++ b/scripts/heraldry/nl/overrides.ts @@ -22,6 +22,14 @@ export const overrides: CountryOverridesInput = { }, }, locationPageByTitle: { + "Wapen van Herwen en Aerdt": "Zevenaar (gemeente)", + "Wapen van Zegwaart": "Zoetermeer", + "Wapen van Valkenisse (Zuid-Beveland)": "Reimerswaal (gemeente)", + "Wapen van Jabeek": "Beekdaelen", + "Wapen van Heille": "Sluis (gemeente)", + "Wapen van Limburg (Nederland)": "Limburg (Nederlandse provincie)", + "Wapen van Broeksittard": "Sittard-Geleen", + "Wapen van Oosterbroek": "Menterwolde", "Wapen van Sloten (Friesland)": "Sloten (Friesland)", "Wapen van Melick en Herkenbosch": "Herkenbosch", "Wapen van Kessel (Limburg)": "Kessel (Limburg)",