diff --git a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts index 0da7d76c2e..c369ec378e 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts @@ -535,7 +535,7 @@ export class PrepareTheme extends Fuse { new SetDefault("socialImage", "assets/SocialImage.png", true), // We expand all tagrenderings first... new On("layers", new Each(new PrepareLayer(state))), - // Then we apply the override all + // Then we apply the override all. We must first expand everything in case that we override something in an expanded tag new ApplyOverrideAll(), // And then we prepare all the layers _again_ in case that an override all contained unexpanded tagrenderings! new On("layers", new Each(new PrepareLayer(state))), diff --git a/src/Models/ThemeConfig/Conversion/Validation.ts b/src/Models/ThemeConfig/Conversion/Validation.ts index 2f46cc3c1a..89235b9b0c 100644 --- a/src/Models/ThemeConfig/Conversion/Validation.ts +++ b/src/Models/ThemeConfig/Conversion/Validation.ts @@ -882,6 +882,10 @@ class MiscTagRenderingChecks extends DesugaringStep { ) } + if(json.icon?.["size"]){ + context.enters("icon","size").err("size is not a valid attribute. Did you mean 'class'? Class can be one of `small`, `medium` or `large`") + } + if (json.freeform) { if (json.render === undefined) { context diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index 06106a7de8..7286446025 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -153,7 +153,7 @@ export default class TagRenderingConfig { this.renderIconClass = "small" } else if (typeof json.icon === "object") { this.renderIcon = json.icon.path - this.renderIconClass = json.icon.class + this.renderIconClass = json.icon.class ?? "small" } this.metacondition = TagUtils.Tag( json.metacondition ?? { and: [] }, diff --git a/src/UI/InputElement/Validators.ts b/src/UI/InputElement/Validators.ts index 4fa0eabafa..d491fe0608 100644 --- a/src/UI/InputElement/Validators.ts +++ b/src/UI/InputElement/Validators.ts @@ -27,6 +27,7 @@ import IconValidator from "./Validators/IconValidator" import TagValidator from "./Validators/TagValidator" import IdValidator from "./Validators/IdValidator" import SlopeValidator from "./Validators/SlopeValidator" +import VeloparkValidator from "./Validators/VeloparkValidator" export type ValidatorType = (typeof Validators.availableTypes)[number] @@ -58,6 +59,7 @@ export default class Validators { "fediverse", "id", "slope", + "velopark" ] as const public static readonly AllValidators: ReadonlyArray = [ @@ -86,6 +88,7 @@ export default class Validators { new FediverseValidator(), new IdValidator(), new SlopeValidator(), + new VeloparkValidator() ] private static _byType = Validators._byTypeConstructor() diff --git a/src/UI/InputElement/Validators/VeloparkValidator.ts b/src/UI/InputElement/Validators/VeloparkValidator.ts new file mode 100644 index 0000000000..b3f1466bb3 --- /dev/null +++ b/src/UI/InputElement/Validators/VeloparkValidator.ts @@ -0,0 +1,37 @@ +import { Translation } from "../../i18n/Translation" +import UrlValidator from "./UrlValidator" + +export default class VeloparkValidator extends UrlValidator { + constructor() { + super("velopark", "A custom element to allow copy-pasting velopark-pages") + } + + getFeedback(s: string): Translation { + const superF = super.getFeedback(s) + if (superF) { + return superF + } + const url = new URL(s) + if (url.hostname !== "velopark.be" && url.hostname !== "www.velopark.be" && url.hostname !== "data.velopark.be") { + return new Translation({ "*": "Invalid hostname, expected velopark.be" }) + } + + if(!s.startsWith("https://data.velopark.be/data/") && !s.startsWith("https://www.velopark.be/static/data/")){ + return new Translation({"*":"A valid URL should either start with https://data.velopark.be/data/ or https://www.velopark.be/static/data/"}) + } + + } + + public isValid(str: string) { + return super.isValid(str) + } + + reformat(str: string): string { + const url = new URL(super.reformat(str)) + if(url.pathname.startsWith("/static/data/")){ + const id = str.substring(str.lastIndexOf("/")+1) + return "https://data.velopark.be/data/"+id + } + return super.reformat(str) + } +} diff --git a/src/UI/Popup/TagRendering/TagRenderingMapping.svelte b/src/UI/Popup/TagRendering/TagRenderingMapping.svelte index 31f6079645..47d3b98383 100644 --- a/src/UI/Popup/TagRendering/TagRenderingMapping.svelte +++ b/src/UI/Popup/TagRendering/TagRenderingMapping.svelte @@ -29,7 +29,7 @@ {#if mapping.icon !== undefined}
- +
{:else if mapping.then !== undefined}