diff --git a/.gitignore b/.gitignore index 573966ad8..21674ccc6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ -/repos +# Ignore custom templates folder. +/assets/shared/custom-templates/* -/public/admin -/public/client +# Ignore release json file. /public/release.json ###> symfony/framework-bundle ### diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e9902fb2..31a70fb95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. * Cleaned up Github Actions workflows. * Updated PHP dependencies. * Added Playwright github action. +* Changed how templates are imported. ### NB! Prior to 3.x the project was split into separate repositories diff --git a/assets/admin/app.jsx b/assets/admin/app.jsx index 5b8392248..bca4ee6a5 100644 --- a/assets/admin/app.jsx +++ b/assets/admin/app.jsx @@ -7,7 +7,7 @@ import Container from "react-bootstrap/Container"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; import localStorageKeys from "./components/util/local-storage-keys"; -import RestrictedRoute from "./restricted-route"; +import RestrictedRoute from "./components/restricted-route"; import Topbar from "./components/navigation/topbar/top-bar"; import SideBar from "./components/navigation/sidebar/sidebar"; import ScreenList from "./components/screen/screen-list"; @@ -32,14 +32,14 @@ import UserContext from "./context/user-context"; import ListContext from "./context/list-context"; import SharedPlaylists from "./components/playlist/shared-playlists"; import Logout from "./components/user/logout"; -import AuthHandler from "./auth-handler"; +import AuthHandler from "./components/auth-handler"; import LoadingComponent from "./components/util/loading-component/loading-component"; import ModalProvider from "./context/modal-context/modal-provider"; import UsersList from "./components/users/users-list"; import ActivationCodeList from "./components/activation-code/activation-code-list"; import ActivationCodeCreate from "./components/activation-code/activation-code-create"; import ActivationCodeActivate from "./components/activation-code/activation-code-activate"; -import AdminConfigLoader from "./admin-config-loader.js"; +import AdminConfigLoader from "./components/util/admin-config-loader.js"; import "react-toastify/dist/ReactToastify.css"; import "./app.scss"; import FeedSourcesList from "./components/feed-sources/feed-sources-list"; diff --git a/assets/admin/auth-handler.jsx b/assets/admin/components/auth-handler.jsx similarity index 86% rename from assets/admin/auth-handler.jsx rename to assets/admin/components/auth-handler.jsx index 510942713..85ac60271 100644 --- a/assets/admin/auth-handler.jsx +++ b/assets/admin/components/auth-handler.jsx @@ -1,7 +1,7 @@ import { React, useContext } from "react"; import PropTypes from "prop-types"; -import Login from "./components/user/login"; -import UserContext from "./context/user-context"; +import Login from "./user/login"; +import UserContext from "../context/user-context"; /** * The auth handler wrapper. diff --git a/assets/admin/error-boundary.jsx b/assets/admin/components/error-boundary.jsx similarity index 100% rename from assets/admin/error-boundary.jsx rename to assets/admin/components/error-boundary.jsx diff --git a/assets/admin/error-boundary.scss b/assets/admin/components/error-boundary.scss similarity index 100% rename from assets/admin/error-boundary.scss rename to assets/admin/components/error-boundary.scss diff --git a/assets/admin/restricted-route.jsx b/assets/admin/components/restricted-route.jsx similarity index 89% rename from assets/admin/restricted-route.jsx rename to assets/admin/components/restricted-route.jsx index 4ac470e0e..c6b19ec30 100644 --- a/assets/admin/restricted-route.jsx +++ b/assets/admin/components/restricted-route.jsx @@ -1,7 +1,7 @@ import { React, useContext } from "react"; import PropTypes from "prop-types"; -import UserContext from "./context/user-context"; -import NoAccess from "./components/no-access/no-access"; +import UserContext from "../context/user-context"; +import NoAccess from "./no-access/no-access"; /** * The restricted route wrapper. diff --git a/assets/admin/components/screen/screen-list.jsx b/assets/admin/components/screen/screen-list.jsx index eaaace95c..ab26b6ded 100644 --- a/assets/admin/components/screen/screen-list.jsx +++ b/assets/admin/components/screen/screen-list.jsx @@ -18,7 +18,7 @@ import { displayError, } from "../util/list/toast-component/display-toast"; import "./screen-list.scss"; -import AdminConfigLoader from "../../admin-config-loader.js"; +import AdminConfigLoader from "../util/admin-config-loader.js"; /** * The screen list component. diff --git a/assets/admin/components/screen/screen-status.jsx b/assets/admin/components/screen/screen-status.jsx index 1c10835be..6530968a7 100644 --- a/assets/admin/components/screen/screen-status.jsx +++ b/assets/admin/components/screen/screen-status.jsx @@ -18,7 +18,7 @@ import idFromUrl from "../util/helpers/id-from-url"; import { api } from "../../redux/api/api.generated.ts"; import { displayError } from "../util/list/toast-component/display-toast"; import FormInput from "../util/forms/form-input"; -import AdminConfigLoader from "../../admin-config-loader.js"; +import AdminConfigLoader from "../util/admin-config-loader.js"; /** * Displays screen status. diff --git a/assets/admin/components/slide/preview/slide-preview.jsx b/assets/admin/components/slide/preview/slide-preview.jsx index 855eb5a64..afd65adc9 100644 --- a/assets/admin/components/slide/preview/slide-preview.jsx +++ b/assets/admin/components/slide/preview/slide-preview.jsx @@ -2,16 +2,15 @@ import { React, useEffect, useState } from "react"; import { Button } from "react-bootstrap"; import PropTypes from "prop-types"; import { useTranslation } from "react-i18next"; -import ErrorBoundary from "../../../error-boundary"; +import ErrorBoundary from "../../error-boundary"; import "./slide-preview.scss"; -import renderSlide from "../../../../shared/template/slide.jsx"; +import { renderSlide } from "../../../../shared/slide-utils/templates"; /** - * A remote component wrapper + * Slide live preview. * * @param {object} props Props. * @param {object} props.slide The slide. - * @param {boolean} props.url The url for the remote component. * @param {object} props.mediaData Object of loaded media. * @param {object} props.themeData Object of theme data. * @param {string} props.orientation Display orientation or horizontal. @@ -23,7 +22,7 @@ import renderSlide from "../../../../shared/template/slide.jsx"; */ function SlidePreview({ slide, - templateData, + templateData, showPreview, orientation = "", closeButton = false, @@ -147,7 +146,6 @@ function SlidePreview({ SlidePreview.propTypes = { slide: PropTypes.shape({ content: PropTypes.shape({}).isRequired }) .isRequired, - url: PropTypes.string.isRequired, mediaData: PropTypes.shape({ "@id": PropTypes.string, }), diff --git a/assets/admin/components/slide/slide-form.jsx b/assets/admin/components/slide/slide-form.jsx index 602a5a007..e226b706a 100644 --- a/assets/admin/components/slide/slide-form.jsx +++ b/assets/admin/components/slide/slide-form.jsx @@ -16,7 +16,7 @@ import idFromUrl from "../util/helpers/id-from-url"; import FormInput from "../util/forms/form-input"; import ContentForm from "./content/content-form"; import LoadingComponent from "../util/loading-component/loading-component"; -import SlidePreview from "./preview/slide-preview.jsx"; +import SlidePreview from "./preview/slide-preview"; import FeedSelector from "./content/feed-selector"; import SelectPlaylistsTable from "../util/multi-and-table/select-playlists-table"; import localStorageKeys from "../util/local-storage-keys"; @@ -26,6 +26,7 @@ import "./slide-form.scss"; import Preview from "../preview/preview"; import StickyFooter from "../util/sticky-footer"; import Select from "../util/forms/select"; +import { getConfig } from "../../../shared/slide-utils/templates"; /** * The slide form component. @@ -92,6 +93,7 @@ function SlideForm({ const [themesOptions, setThemesOptions] = useState(); const [displayPreview, setDisplayPreview] = useState(null); const [templateError, setTemplateError] = useState(false); + const [disableLivePreview, setDisableLivePreview] = useState(false); // Load templates. const { data: templates, isLoading: loadingTemplates } = @@ -157,19 +159,12 @@ function SlideForm({ const newSelectedTemplates = []; if (selectedTemplate) { - // Get content form from template resources. - const contentFormUrl = selectedTemplate?.resources?.admin; - fetch(contentFormUrl) - .then((response) => response.json()) - .then((data) => { - setContentFormElements(data); - }) - .catch((er) => { - displayError(t("template-error"), er); - }); - + const slideConfig = getConfig(selectedTemplate['id']); + setContentFormElements(slideConfig.adminForm ?? []); + setDisableLivePreview(slideConfig?.options?.disableLivePreview ?? false); newSelectedTemplates.push(selectedTemplate); } + setSelectedTemplates(newSelectedTemplates); }, [selectedTemplate]); @@ -401,13 +396,12 @@ function SlideForm({ - {selectedTemplate?.resources?.options?.disableLivePreview && ( + {disableLivePreview && ( {t("slide-preview-disabled-preview")} )} - {!selectedTemplate?.resources?.options?.disableLivePreview && - selectedTemplate?.resources?.component && ( + {!disableLivePreview && ( <> {previewOrientation === "horizontal" && (
@@ -581,10 +575,6 @@ SlideForm.propTypes = { selectTemplate: PropTypes.func.isRequired, selectedTemplate: PropTypes.shape({ "@id": PropTypes.string, - resources: PropTypes.shape({ - admin: PropTypes.string.isRequired, - component: PropTypes.string.isRequired, - }).isRequired, }), isLoading: PropTypes.bool, loadingMessage: PropTypes.string, diff --git a/assets/admin/components/user/login.jsx b/assets/admin/components/user/login.jsx index bcfb922eb..f56677a11 100644 --- a/assets/admin/components/user/login.jsx +++ b/assets/admin/components/user/login.jsx @@ -9,7 +9,7 @@ import {MultiSelect} from "react-multi-select-component"; import UserContext from "../../context/user-context"; import FormInput from "../util/forms/form-input"; import {api} from "../../redux/api/api.generated.ts"; -import AdminConfigLoader from "../../admin-config-loader.js"; +import AdminConfigLoader from "../util/admin-config-loader.js"; import {displayError} from "../util/list/toast-component/display-toast"; import localStorageKeys from "../util/local-storage-keys"; import LoginSidebar from "../navigation/login-sidebar/login-sidebar"; diff --git a/assets/admin/admin-config-loader.js b/assets/admin/components/util/admin-config-loader.js similarity index 100% rename from assets/admin/admin-config-loader.js rename to assets/admin/components/util/admin-config-loader.js diff --git a/assets/client/app.jsx b/assets/client/app.jsx index 477055dd4..c99cc02b0 100644 --- a/assets/client/app.jsx +++ b/assets/client/app.jsx @@ -2,7 +2,7 @@ import React, { useEffect, useRef, useState } from "react"; import PropTypes from "prop-types"; import Screen from "./components/screen.jsx"; import ContentService from "./service/content-service"; -import ClientConfigLoader from "./client-config-loader.js"; +import ClientConfigLoader from "./util/client-config-loader.js"; import logger from "./logger/logger"; import "./app.scss"; import fallback from "./assets/fallback.png"; diff --git a/assets/client/components/region.jsx b/assets/client/components/region.jsx index 116237c95..a06d2b7ba 100644 --- a/assets/client/components/region.jsx +++ b/assets/client/components/region.jsx @@ -3,10 +3,10 @@ import PropTypes from "prop-types"; import "./region.scss"; import { createGridArea } from "../../shared/grid-generator/grid-generator"; import { TransitionGroup, CSSTransition } from "react-transition-group"; -import Slide from "./slide.jsx"; import ErrorBoundary from "./error-boundary.jsx"; import idFromPath from "../util/id-from-path"; import logger from "../logger/logger"; +import Slide from "./slide.jsx"; /** * Region component. diff --git a/assets/client/components/screen.jsx b/assets/client/components/screen.jsx index 73d9d3789..5c384a6d9 100644 --- a/assets/client/components/screen.jsx +++ b/assets/client/components/screen.jsx @@ -6,7 +6,7 @@ import Region from "./region.jsx"; import "./screen.scss"; import logger from "../logger/logger"; import TouchRegion from "./touch-region.jsx"; -import ClientConfigLoader from "../client-config-loader.js"; +import ClientConfigLoader from "../util/client-config-loader.js"; /** * Screen component. diff --git a/assets/client/components/slide.jsx b/assets/client/components/slide.jsx index ac3407fa9..7ca5dba8e 100644 --- a/assets/client/components/slide.jsx +++ b/assets/client/components/slide.jsx @@ -2,7 +2,7 @@ import {React} from "react"; import "./slide.scss"; import ErrorBoundary from "./error-boundary.jsx"; import logger from "../logger/logger"; -import renderSlide from "../../shared/template/slide.jsx"; +import { renderSlide } from "../../shared/slide-utils/templates.js"; /** * Slide component. diff --git a/assets/client/components/touch-region.jsx b/assets/client/components/touch-region.jsx index 787a01fa4..05d3b5562 100644 --- a/assets/client/components/touch-region.jsx +++ b/assets/client/components/touch-region.jsx @@ -2,11 +2,11 @@ import { React, useEffect, useState, createRef } from "react"; import PropTypes from "prop-types"; import "./touch-region.scss"; import { createGridArea } from "../../shared/grid-generator/grid-generator"; -import Slide from "./slide.jsx"; import ErrorBoundary from "./error-boundary.jsx"; import idFromPath from "../util/id-from-path"; import IconClose from "../assets/icon-close.svg"; import IconPointer from "../assets/icon-pointer.svg"; +import Slide from "./slide.jsx"; /** * Region component. diff --git a/assets/client/service/content-service.js b/assets/client/service/content-service.js index c1ae16656..512f46e6a 100644 --- a/assets/client/service/content-service.js +++ b/assets/client/service/content-service.js @@ -8,7 +8,7 @@ import { import logger from "../logger/logger"; import DataSync from "../data-sync/data-sync"; import ScheduleService from "./schedule-service"; -import ClientConfigLoader from "../client-config-loader.js"; +import ClientConfigLoader from "../util/client-config-loader.js"; /** * ContentService. diff --git a/assets/client/service/release-service.js b/assets/client/service/release-service.js index 731a7d145..ba2f7a175 100644 --- a/assets/client/service/release-service.js +++ b/assets/client/service/release-service.js @@ -1,5 +1,5 @@ import ReleaseLoader from "../util/release-loader"; -import ClientConfigLoader from "../client-config-loader.js"; +import ClientConfigLoader from "../util/client-config-loader.js"; import defaults from "../util/defaults"; import idFromPath from "../util/id-from-path"; import appStorage from "../util/app-storage"; diff --git a/assets/client/service/schedule-service.js b/assets/client/service/schedule-service.js index fddbcff2e..a69c8cb4b 100644 --- a/assets/client/service/schedule-service.js +++ b/assets/client/service/schedule-service.js @@ -4,7 +4,7 @@ import Md5 from "crypto-js/md5"; import Base64 from "crypto-js/enc-base64"; import isPublished from "../util/isPublished"; import logger from "../logger/logger"; -import ClientConfigLoader from "../client-config-loader.js"; +import ClientConfigLoader from "../util/client-config-loader.js"; import ScheduleUtils from "../util/schedule"; /** @@ -138,7 +138,7 @@ class ScheduleService { // Update region. this.regions[regionId].hash = hash; - this.regions[regionId].slides = slides; + this.regions[regionId].slide = slides; if (newContent) { // Send slides to region. diff --git a/assets/client/service/token-service.js b/assets/client/service/token-service.js index 5d80706f3..478758cdb 100644 --- a/assets/client/service/token-service.js +++ b/assets/client/service/token-service.js @@ -1,6 +1,6 @@ import logger from "../logger/logger"; import appStorage from "../util/app-storage"; -import ClientConfigLoader from "../client-config-loader.js"; +import ClientConfigLoader from "../util/client-config-loader.js"; import defaults from "../util/defaults"; import statusService from "./status-service"; import constants from "../util/constants"; diff --git a/assets/client/client-config-loader.js b/assets/client/util/client-config-loader.js similarity index 97% rename from assets/client/client-config-loader.js rename to assets/client/util/client-config-loader.js index b02c0e180..f940bb779 100644 --- a/assets/client/client-config-loader.js +++ b/assets/client/util/client-config-loader.js @@ -1,5 +1,5 @@ // Only fetch new config if more than 15 minutes have passed. -import appStorage from "./util/app-storage"; +import appStorage from "./app-storage.js"; const configFetchIntervalDefault = 15 * 60 * 1000; diff --git a/assets/shared/custom-templates-example/custom-template-example.json b/assets/shared/custom-templates-example/custom-template-example.json new file mode 100644 index 000000000..547022df1 --- /dev/null +++ b/assets/shared/custom-templates-example/custom-template-example.json @@ -0,0 +1,22 @@ +{ + "title": "Test", + "id": "01K2PREY1Q0XCTR9EK1YT5R4XK", + "options": {}, + "adminForm": [ + { + "key": "test-form-1", + "input": "header", + "text": "Skabelon: Test", + "formGroupClasses": "h4 mb-3" + }, + { + "key": "test-form-title", + "input": "input", + "name": "title", + "type": "text", + "label": "Overskrift", + "helpText": "Her kan du skrive overskrift.", + "formGroupClasses": "mb-3" + } + ] +} diff --git a/assets/shared/custom-templates-example/custom-template-example.jsx b/assets/shared/custom-templates-example/custom-template-example.jsx new file mode 100644 index 000000000..ed53a6467 --- /dev/null +++ b/assets/shared/custom-templates-example/custom-template-example.jsx @@ -0,0 +1,58 @@ +import React, { useEffect } from "react"; +import templateConfig from "./custom-template-example.json"; +import BaseSlideExecution from "../slide-utils/base-slide-execution.js"; +import { ThemeStyles } from "../slide-utils/slide-util.jsx"; + +function id() { + return templateConfig.id; +} + +function config() { + return templateConfig; +} + +function renderSlide(slide, run, slideDone) { + return ; +} + +/** + * @param {object} props Props. + * @param {object} props.slide The slide. + * @param {object} props.content The slide content. + * @param {boolean} props.run Whether or not the slide should start running. + * @param {Function} props.slideDone Function to invoke when the slide is done playing. + * @param {string} props.executionId Unique id for the instance. + * @returns {JSX.Element} The component. + */ +function CustomTemplateExample({ slide, content, run, slideDone, executionId }) { + const { duration = 15000 } = content; + const { title = "Default title" } = content; + + const slideExecution = new BaseSlideExecution(slide, slideDone); + + useEffect(() => { + if (run) { + slideExecution.start(duration); + } + + return function cleanup() { + slideExecution.stop(); + }; + }, [run]); + + return (<> +
+

{title}

+
+ + + ); +} + +export default { id, config, renderSlide }; diff --git a/assets/shared/template/GlobalStyles.js b/assets/shared/slide-utils/GlobalStyles.js similarity index 100% rename from assets/shared/template/GlobalStyles.js rename to assets/shared/slide-utils/GlobalStyles.js diff --git a/assets/shared/template/base-slide-execution.js b/assets/shared/slide-utils/base-slide-execution.js similarity index 100% rename from assets/shared/template/base-slide-execution.js rename to assets/shared/slide-utils/base-slide-execution.js diff --git a/assets/shared/template/global-styles.css b/assets/shared/slide-utils/global-styles.css similarity index 100% rename from assets/shared/template/global-styles.css rename to assets/shared/slide-utils/global-styles.css diff --git a/assets/shared/template/slide-util.jsx b/assets/shared/slide-utils/slide-util.jsx similarity index 100% rename from assets/shared/template/slide-util.jsx rename to assets/shared/slide-utils/slide-util.jsx diff --git a/assets/shared/slide-utils/templates.js b/assets/shared/slide-utils/templates.js new file mode 100644 index 000000000..793168ea3 --- /dev/null +++ b/assets/shared/slide-utils/templates.js @@ -0,0 +1,82 @@ +// Load templates. +// @see https://vite.dev/guide/features.html#glob-import +// @see docs/custom-templates.md +// Eager loading because no other code piece imports the templates otherwise. +const templateModules = import.meta.glob("../templates/*.jsx", { eager: true }); +const customTemplatesModules = import.meta.glob("../custom-templates/*.jsx", { + eager: true, +}); + +function duckTypingTemplateModule(module) { + return ( + typeof module.id === "function" && + typeof module.config === "function" && + typeof module.renderSlide === "function" + ); +} + +function findModule(modules, templateUlid) { + for (const key of Object.keys(modules)) { + const module = modules[key].default; + + if (duckTypingTemplateModule(module)) { + if (module.id() === templateUlid) { + return module; + } + } else { + throw new Error( + "Template should implement functions: id(), config(), renderSlide(slide, run, slideDone)", + ); + } + } + + return null; +} + +function getTemplateModule(templateUlid) { + if (!templateUlid) { + return null; + } + + const module = + findModule(templateModules, templateUlid) ?? + findModule(customTemplatesModules, templateUlid) ?? + null; + + if (module === null) { + throw new Error(`Cannot find module '${templateUlid}'`); + } + + return module; +} + +/** + * Get the config of the template. + * + * @param templateUlid The ULID of the template. + * @return object + */ +function getConfig(templateUlid) { + return getTemplateModule(templateUlid).config(); +} + +/** + * Render slide. + * + * @param {object} slide The slide object. + * @param {string} run The run id. + * @param {Function} slideDone The function to invoke when the slide is done. + * @return {JSXElement|string} + */ +function renderSlide(slide, run, slideDone) { + const templateUlid = slide?.templateData?.id; + const module = getTemplateModule(templateUlid); + + if (!module) { + return ""; + } + + return module.renderSlide(slide, run, slideDone); +} + +export { getConfig, renderSlide }; diff --git a/assets/shared/template/book-review/book-review-admin.json b/assets/shared/template/book-review/book-review-admin.json deleted file mode 100644 index b1fbe94ca..000000000 --- a/assets/shared/template/book-review/book-review-admin.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "key": "book-review-form-1", - "input": "header", - "text": "Skabelon: Anmeldelse", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "book-review-form-2", - "input": "header-h3", - "text": "Indhold", - "name": "header2", - "formGroupClasses": "h5 mb-3" - }, - { - "key": "book-review-form-3", - "input": "rich-text-input", - "name": "bookText", - "label": "Teksten til anmeldelsen", - "helpText": "Her kan du skrive teksten til anmeldelsen" - }, - { - "key": "book-review-form-4", - "multipleImages": false, - "input": "image", - "name": "bookImage", - "label": "Billede", - "helpText": "Billede af det som bliver anmeldt" - }, - { - "key": "book-review-form-5", - "input": "header-h3", - "text": "Forfatter", - "name": "header3", - "formGroupClasses": "h5 mt-3 mb-3" - }, - { - "key": "book-review-form-6", - "input": "input", - "name": "authorText", - "type": "text", - "label": "Forfattertekst", - "helpText": "Her kan du skrive tekst til forfatteren", - "formGroupClasses": "col-md-6" - }, - { - "key": "book-review-form-7", - "multipleImages": false, - "input": "image", - "name": "authorImage", - "label": "Billede", - "helpText": "Billede til forfatteren" - }, - { - "key": "book-review-form-8", - "input": "header-h3", - "text": "Opsætning", - "name": "header3", - "formGroupClasses": "h5 mt-3 mb-3" - }, - { - "key": "book-review-form-9", - "input": "duration", - "name": "duration", - "min": "1", - "type": "number", - "label": "Varighed (i sekunder)", - "helpText": "Her skal du skrive varigheden på slidet.", - "required": true, - "formGroupClasses": "col-md-6 mb-3" - } -] diff --git a/assets/shared/template/book-review/book-review-config.json b/assets/shared/template/book-review/book-review-config.json deleted file mode 100644 index 6dfae808a..000000000 --- a/assets/shared/template/book-review/book-review-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "Anmeldelse", - "icon": "", - "id": "01FP2SME0ENTXWF362XHM6Z1B4", - "description": "Skabelon til anmeldelser.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/book-review.js", - "admin": "https://display-templates.local.itkdev.dk/build/book-review-admin.json", - "schema": "https://display-templates.local.itkdev.dk/build/book-review-schema.json", - "assets": [], - "options": {}, - "content": {} - } -} diff --git a/assets/shared/template/book-review/book-review-content-example.json b/assets/shared/template/book-review/book-review-content-example.json deleted file mode 100644 index 0275ec789..000000000 --- a/assets/shared/template/book-review/book-review-content-example.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "bookText": "

Lorem Ipsum

...Is simply dummy text of the printing and typesetting industry...", - "authorText": "There are many variations of passages of Lorem Ipsum available.", - "authorImage": "/v1/media/00000000000000000000000001", - "bookImage": "/v1/media/00000000000000000000000002" -} diff --git a/assets/shared/template/book-review/book-review-schema.json b/assets/shared/template/book-review/book-review-schema.json deleted file mode 100644 index 4f12a78a7..000000000 --- a/assets/shared/template/book-review/book-review-schema.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/os2display/display-templates/blob/develop/build/book-review/book-review-schema.json", - "title": "book-review schema", - "description": "Content schema for book-review", - "type": "object", - "properties": { - "bookImage": { - "description": "@id for the media for the review", - "type": "string" - }, - "authorImage": { - "description": "@id for the media for the author", - "type": "string" - }, - "bookText": { - "description": "Review rich text", - "type": "string" - }, - "authorText": { - "description": "Author text", - "type": "string" - } - } -} diff --git a/assets/shared/template/calendar/calendar-admin.json b/assets/shared/template/calendar/calendar-admin.json deleted file mode 100644 index 253d0fca7..000000000 --- a/assets/shared/template/calendar/calendar-admin.json +++ /dev/null @@ -1,214 +0,0 @@ -[ - { - "key": "calendar-form-1", - "input": "header", - "text": "Skabelon: Kalender", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "calendar-form-2", - "input": "header-h3", - "text": "Opsæt feed", - "name": "header2", - "formGroupClasses": "h5 mb-3" - }, - { - "key": "calendar-form-3", - "input": "feed", - "text": "Opsæt feed", - "name": "feed", - "supportedFeedOutputType": "calendar", - "formGroupClasses": "mb-3" - }, - { - "key": "calendar-form-4", - "input": "header-h3", - "text": "Konfigurér slide", - "name": "header2", - "formGroupClasses": "h5 mb-3" - }, - { - "key": "calendar-form-duration", - "input": "duration", - "name": "duration", - "type": "number", - "label": "Varighed (i sekunder)", - "helpText": "Her skal du skrive varigheden på slidet.", - "required": true, - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "calendar-form-layout", - "input": "select", - "name": "layout", - "label": "Vælg layout", - "required": true, - "helpText": "Hvis du vælge \"Enkelt lokale med booking\" virker bookingdelen IKKE i preview.", - "formGroupClasses": "col-md-6 mb-3", - "options": [ - { - "key": "layout1", - "title": "Enkelt lokale", - "value": "single" - }, - { - "key": "layout2", - "title": "Flere resurser", - "value": "multiple" - }, - { - "key": "layout3", - "title": "Flere resurser, flere dage", - "value": "multipleDays" - }, - { - "key": "layout4", - "title": "Enkelt lokale med booking", - "value": "singleBooking" - } - ] - }, - { - "key": "calendar-form-form-14", - "input": "select", - "required": true, - "label": "Tekststørrelse", - "formGroupClasses": "col-md-6 mb-3", - "options": [ - { - "key": "fontsize1", - "title": "xs", - "value": "font-size-xs" - }, - { - "key": "fontsize2", - "title": "s", - "value": "font-size-s" - }, - { - "key": "fontsize3", - "title": "m", - "value": "font-size-m" - }, - { - "key": "fontsize4", - "title": "l", - "value": "font-size-lg" - }, - { - "key": "fontsize5", - "title": "xl", - "value": "font-size-xl" - } - ], - "name": "fontSize" - }, - { - "key": "calendar-form-title", - "input": "input", - "name": "title", - "type": "text", - "label": "Overskrift", - "helpText": "Her kan du skrive overskrift.", - "formGroupClasses": "col-md-6" - }, - { - "key": "calendar-form-subtitle", - "input": "input", - "name": "subTitle", - "type": "text", - "label": "Underoverskrift", - "helpText": "Her kan du skrive underoverskrift.", - "formGroupClasses": "col-md-6" - }, - { - "key": "calendar-form-resource-available-text", - "input": "input", - "name": "resourceAvailableText", - "type": "text", - "label": "Tekst når resursen er ledig", - "helpText": "Her kan du skrive tekst, som vises når resursen er ledig.", - "formGroupClasses": "col-md-6" - }, - { - "key": "calendar-form-resource-unavailable-text", - "input": "input", - "name": "resourceUnavailableText", - "type": "text", - "label": "Begivenhedstitel fallback", - "helpText": "Her kan du skrive tekst på begivenheder, hvor der ikke er sat en titel.", - "formGroupClasses": "col-md-6" - }, - { - "key": "calendar-form-footer-text", - "input": "input", - "name": "footerText", - "type": "text", - "label": "Footer tekst", - "helpText": "Her kan du skrive tekst til footeren.", - "formGroupClasses": "col-md-6" - }, - { - "key": "calendar-form-hide-grid", - "input": "checkbox", - "label": "Skjul grid", - "name": "hideGrid", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "calendar-form-has-date-and-time", - "input": "checkbox", - "label": "Vis dato og tidspunkt", - "name": "hasDateAndTime", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "calendar-form-date-as-box", - "input": "checkbox", - "label": "Dato og tidspunkt som boks", - "name": "dateAsBox", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "calendar-form-image", - "multipleImages": false, - "input": "image", - "name": "image", - "label": "Baggrundsbillede" - }, - { - "key": "form-media-contain", - "input": "checkbox", - "name": "mediaContain", - "label": "Deaktivér billedbeskæring", - "helpText": "Billedet vil blive vist ubeskåret med tomme områder omkring" - }, - { - "key": "calendar-form-display-headers", - "input": "checkbox", - "label": "Vis tabeloverskrifter", - "name": "displayHeaders", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "calendar-form-header-orders", - "input": "select", - "label": "Hvilken rækkefølge skal overskrifterne i tabellen være i", - "options": [ - { - "key": "whenwhatwhere", - "value": "whenwhatwhere", - "title": "Hvornår, hvad, hvor" - }, - { - "key": "whatwherewhen", - "value": "whatwherewhen", - "title": "Hvad, hvor, hvornår" - } - ], - "name": "headerOrder", - "formGroupClasses": "col-md-6 mb-3", - "helpText": "Dette er kun relevant hvis \"Flere resurser\" er valgt under \"layout\". Standard er \"Hvornår, hvad, hvor.\"" - } -] diff --git a/assets/shared/template/calendar/calendar-config.json b/assets/shared/template/calendar/calendar-config.json deleted file mode 100644 index 9b2f3524f..000000000 --- a/assets/shared/template/calendar/calendar-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "Kalender", - "icon": "", - "id": "01FRJPF4XATRN8PBZ35XN84PS6", - "description": "Mulighed for at vise et kalenderfeed.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/calendar.js", - "admin": "https://display-templates.local.itkdev.dk/build/calendar-admin.json", - "schema": "https://display-templates.local.itkdev.dk/build/calendar-schema.json", - "assets": [], - "options": {}, - "content": {} - } -} diff --git a/assets/shared/template/contacts/contacts-admin.json b/assets/shared/template/contacts/contacts-admin.json deleted file mode 100644 index ce6733023..000000000 --- a/assets/shared/template/contacts/contacts-admin.json +++ /dev/null @@ -1,33 +0,0 @@ -[ - { - "key": "contacts-form-1", - "input": "header", - "text": "Skabelon: Kontakter", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "contacts-form-2", - "input": "checkbox", - "label": "Animeret streg under overskrift", - "name": "separator", - "formGroupClasses": "mb-3" - }, - { - "key": "contacts-form-3", - "input": "contacts", - "name": "contacts", - "formGroupClasses": "mb-3" - }, - { - "key": "contacts-form-4", - "input": "duration", - "name": "duration", - "min": "1", - "type": "number", - "label": "Varighed (i sekunder)", - "helpText": "Her skal du skrive varigheden på slidet.", - "required": true, - "formGroupClasses": "col-md-6 mb-3" - } -] diff --git a/assets/shared/template/contacts/contacts-config.json b/assets/shared/template/contacts/contacts-config.json deleted file mode 100644 index 7f923cd9d..000000000 --- a/assets/shared/template/contacts/contacts-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "Kontakter", - "icon": "", - "id": "01FPZ19YEHX7MQ5Q6ZS0WK0VEA", - "description": "Skabelon til kontakter.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/contacts.js", - "admin": "https://display-templates.local.itkdev.dk/build/contacts-admin.json", - "schema": "", - "assets": [], - "options": {}, - "content": {} - } -} diff --git a/assets/shared/template/iframe/iframe-admin.json b/assets/shared/template/iframe/iframe-admin.json deleted file mode 100644 index fd579402b..000000000 --- a/assets/shared/template/iframe/iframe-admin.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "key": "iframe-form-1", - "input": "header", - "text": "Skabelon: IFrame", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "iframe-form-2", - "input": "input", - "name": "source", - "label": "URL til iframe", - "formGroupClasses": "col-md-6" - }, - { - "key": "iframe-form-3", - "input": "duration", - "name": "duration", - "min": "1", - "type": "number", - "label": "Varighed (i sekunder)", - "helpText": "Her skal du skrive varigheden på slidet.", - "required": true, - "formGroupClasses": "col-md-6 mb-3" - } -] diff --git a/assets/shared/template/iframe/iframe-config.json b/assets/shared/template/iframe/iframe-config.json deleted file mode 100644 index 6feac5b51..000000000 --- a/assets/shared/template/iframe/iframe-config.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "title": "IFrame", - "icon": "", - "id": "01FQBJQ2M3544ZKAADPWBXHY71", - "description": "Skabelon til iFrame.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/iframe.js", - "admin": "https://display-templates.local.itkdev.dk/build/iframe-admin.json", - "schema": "", - "assets": [], - "options": { - "disableLivePreview": true - }, - "content": {} - } -} diff --git a/assets/shared/template/image-text/image-text-admin.json b/assets/shared/template/image-text/image-text-admin.json deleted file mode 100644 index a6f6dabd8..000000000 --- a/assets/shared/template/image-text/image-text-admin.json +++ /dev/null @@ -1,243 +0,0 @@ -[ - { - "key": "image-text-form-1", - "input": "header", - "text": "Skabelon: Tekst og billede", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "image-text-form-2", - "input": "header-h3", - "text": "Indhold", - "name": "header2", - "formGroupClasses": "h5 mb-3" - }, - { - "key": "image-text-form-3", - "input": "textarea", - "name": "title", - "label": "Overskrift på slide", - "helpText": "Her kan du skrive overskriften til slidet", - "formGroupClasses": "col-md-6" - }, - { - "key": "image-text-form-4", - "input": "rich-text-input", - "name": "text", - "label": "Tekst på slide", - "helpText": "Her kan du skrive teksten til slidet", - "formGroupClasses": "col-md" - }, - { - "key": "image-text-form-81", - "input": "select", - "required": true, - "label": "Tekststørrelse", - "formGroupClasses": "col-md-6 mb-3", - "options": [ - { - "key": "fontsize1", - "title": "xs", - "value": "font-size-xs" - }, - { - "key": "fontsize2", - "title": "s", - "value": "font-size-s" - }, - { - "key": "fontsize3", - "title": "m", - "value": "font-size-m" - }, - { - "key": "fontsize4", - "title": "l", - "value": "font-size-lg" - }, - { - "key": "fontsize5", - "title": "xl", - "value": "font-size-xl" - } - ], - "name": "fontSize" - }, - - { - "key": "image-text-form-5", - "multipleImages": true, - "input": "image", - "name": "image", - "label": "Billeder", - "helpText": "Hvis du tilføjer mere end et billede bliver de vist i (varighed / antal_billeder) sekunder hver." - }, - { - "key": "form-media-contain", - "input": "checkbox", - "name": "mediaContain", - "label": "Deaktivér billedbeskæring", - "helpText": "Billedet vil blive vist ubeskåret med tomme områder omkring" - }, - { - "key": "image-text-form-6", - "input": "header-h3", - "text": "Opsætning", - "name": "header3", - "formGroupClasses": "h5 mt-3 mb-3" - }, - { - "key": "image-text-form-7", - "input": "duration", - "name": "duration", - "min": "1", - "type": "number", - "label": "Varighed (i sekunder)", - "helpText": "Her skal du skrive varigheden på slidet.", - "required": true, - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "image-text-form-8", - "input": "select", - "required": true, - "label": "Hvor skal tekstboksen være placeret", - "formGroupClasses": "col-md-6 mb-3", - "options": [ - { - "key": "placement1", - "title": "Toppen", - "value": "top" - }, - { - "key": "placement2", - "title": "Højre", - "value": "right" - }, - { - "key": "placement3", - "title": "Bunden", - "value": "bottom" - }, - { - "key": "placement4", - "title": "Venstre", - "value": "left" - } - ], - "name": "boxAlign" - }, - { - "key": "image-text-form-9", - "input": "checkbox", - "label": "Margin rundt om boks", - "name": "boxMargin", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "image-text-form-10", - "input": "checkbox", - "label": "Animeret streg under overskrift", - "name": "separator", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "image-text-form-11", - "input": "checkbox", - "label": "Gør tekstboksen mindre", - "name": "halfSize", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "image-text-form-12", - "input": "checkbox", - "label": "Alternativt layout uden tekstboks", - "helpText": "Denne kan ikke kombineres med den animerede tekst under overskriften", - "name": "reversed", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "image-text-form-13", - "input": "checkbox", - "label": "Skyggeeffekt på tekstboksen", - "name": "shadow", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "image-text-form-14", - "input": "checkbox", - "label": "Vis logo fra tema", - "name": "showLogo", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "image-text-form-15", - "input": "select", - "required": false, - "label": "Logostørrelse", - "formGroupClasses": "col-md-6 mb-3", - "options": [ - { - "key": "logosize1", - "title": "s", - "value": "logo-size-s" - }, - { - "key": "logosize2", - "title": "m", - "value": "logo-size-m" - }, - { - "key": "logosize3", - "title": "l", - "value": "logo-size-l" - } - ], - "name": "logoSize" - }, - { - "key": "image-text-form-16", - "input": "select", - "required": false, - "label": "Logoposition", - "formGroupClasses": "col-md-6 mb-3", - "options": [ - { - "key": "logoposition1", - "title": "Top/venstre", - "value": "logo-position-top-left" - }, - { - "key": "logoposition2", - "title": "Top/højre", - "value": "logo-position-top-right" - }, - { - "key": "logoposition3", - "title": "Bund/venstre", - "value": "logo-position-bottom-left" - }, - { - "key": "logoposition4", - "title": "Bund/højre", - "value": "logo-position-bottom-right" - } - ], - "name": "logoPosition" - }, - { - "key": "image-text-form-17", - "input": "checkbox", - "label": "Margin om logo", - "name": "logoMargin", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "image-text-form-18", - "input": "checkbox", - "label": "Deaktiver fade ved flere billeder", - "name": "disableImageFade", - "formGroupClasses": "col-md-6 mb-3" - } -] diff --git a/assets/shared/template/image-text/image-text-config.json b/assets/shared/template/image-text/image-text-config.json deleted file mode 100644 index 5b66a4ce8..000000000 --- a/assets/shared/template/image-text/image-text-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "Billede og tekst", - "icon": "", - "id": "01FP2SNGFN0BZQH03KCBXHKYHG", - "description": "Mulighed for at sætte billede og tekst, med forskellige visninger.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/image-text.js", - "admin": "https://display-templates.local.itkdev.dk/build/image-text-admin.json", - "schema": "https://display-templates.local.itkdev.dk/build/image-text-schema.json", - "assets": [], - "options": {}, - "content": {} - } -} diff --git a/assets/shared/template/image-text/image-text-content-example.json b/assets/shared/template/image-text/image-text-content-example.json deleted file mode 100644 index 10d44fd1c..000000000 --- a/assets/shared/template/image-text/image-text-content-example.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "title": "Slide title", - "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt...", - "image": "/v1/media/00000000000000000000000001", - "styling": { - "boxAlign": "top", - "boxMargin": false, - "shadow": true, - "separator": false, - "halfSize": false, - "reversed": false - } -} diff --git a/assets/shared/template/image-text/image-text-schema.json b/assets/shared/template/image-text/image-text-schema.json deleted file mode 100644 index c7eb041cc..000000000 --- a/assets/shared/template/image-text/image-text-schema.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/os2display/display-templates/blob/develop/build/image-text/image-text-schema.json", - "title": "image-text schema", - "description": "Content schema for image-text", - "type": "object", - "properties": { - "image": { - "description": "@id for the image", - "type": "string" - }, - "styling": { - "type": "object", - "properties": { - "halfSize": { - "description": "TODO: Describe", - "type": "boolean" - }, - "shadow": { - "description": "TODO: Describe", - "type": "boolean" - }, - "boxAlign": { - "description": "TODO: Describe", - "type": "string" - }, - "boxMargin": { - "description": "TODO: Describe", - "type": "boolean" - }, - "separator": { - "description": "TODO: Describe", - "type": "boolean" - }, - "reversed": { - "description": "TODO: Describe", - "type": "boolean" - } - } - }, - "text": { - "description": "Text for the slide", - "type": "string" - }, - "title": { - "description": "Title for the slide", - "type": "string" - } - } -} diff --git a/assets/shared/template/index.html b/assets/shared/template/index.html deleted file mode 100644 index 8ab21a7aa..000000000 --- a/assets/shared/template/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - OS2Display templates - - - - - -
- - diff --git a/assets/shared/template/instagram-feed/instagram-feed-admin.json b/assets/shared/template/instagram-feed/instagram-feed-admin.json deleted file mode 100644 index 9e19671d3..000000000 --- a/assets/shared/template/instagram-feed/instagram-feed-admin.json +++ /dev/null @@ -1,92 +0,0 @@ -[ - { - "key": "instagram-feed-form-1", - "input": "header", - "text": "Skabelon: Instagram feed", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "instagram-feed-form-2", - "input": "header-h3", - "text": "Opsæt feed", - "name": "header2", - "formGroupClasses": "h5 mb-3" - }, - { - "key": "instagram-feed-form-3", - "input": "feed", - "text": "Opsæt feed", - "name": "feeds", - "supportedFeedOutputType": "instagram", - "formGroupClasses": "mb-3", - "singleSelect": true - }, - { - "key": "instagram-feed-form-entry-duration", - "input": "input", - "name": "entryDuration", - "type": "number", - "label": "Varighed pr. billede/video (i sekunder)", - "helpText": "Her skal du skrive varigheden pr. billede/video.", - "required": true, - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "instagram-feed-hashtag-text", - "input": "input", - "name": "hashtagText", - "type": "text", - "label": "Hashtag-tekst", - "helpText": "Her kan du skrive hashtag-teksten.", - "formGroupClasses": "col-md-6" - }, - { - "key": "instagram-feed-orientation", - "input": "select", - "name": "orientation", - "label": "Vælg skærmorientering", - "required": true, - "formGroupClasses": "col-md-6 mb-3", - "options": [ - { - "key": "orientation1", - "title": "Horisontalt", - "value": "landscape" - }, - { - "key": "orientation2", - "title": "Vertikal", - "value": "vertical" - } - ] - }, - { - "key": "instagram-feed-image-width", - "input": "input", - "name": "imageWidth", - "type": "number", - "min": 0, - "max": 100.0, - "label": "Billedebredde %", - "helpText": "Her kan du skrive billedebredden i procent.", - "formGroupClasses": "col-md-6" - }, - { - "key": "instagram-feed-max-entries", - "input": "input", - "name": "maxEntries", - "type": "number", - "min": 1, - "label": "Maksimalt antal billeder/videoer fra feedet", - "helpText": "Her kan du skrive maksimalt antal billeder/videoer fra feedet.", - "formGroupClasses": "col-md-6" - }, - { - "key": "form-media-contain", - "input": "checkbox", - "name": "mediaContain", - "label": "Deaktivér billedbeskæring", - "helpText": "Billedet vil blive vist ubeskåret med tomme områder omkring" - } -] diff --git a/assets/shared/template/instagram-feed/instagram-feed-config.json b/assets/shared/template/instagram-feed/instagram-feed-config.json deleted file mode 100644 index 5c735cea3..000000000 --- a/assets/shared/template/instagram-feed/instagram-feed-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "Instagram feed", - "icon": "", - "id": "01FTZC0RKJYHG4JVZG5K709G46", - "description": "Mulighed for at vise instagram indhold.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/instagram-feed.js", - "admin": "https://display-templates.local.itkdev.dk/build/instagram-feed-admin.json", - "schema": "https://display-templates.local.itkdev.dk/build/instagram-feed-schema.json", - "assets": [], - "options": {}, - "content": {} - } -} diff --git a/assets/shared/template/news-feed/news-feed-admin.json b/assets/shared/template/news-feed/news-feed-admin.json deleted file mode 100644 index dc76e419d..000000000 --- a/assets/shared/template/news-feed/news-feed-admin.json +++ /dev/null @@ -1,59 +0,0 @@ -[ - { - "key": "news-feed-form-1", - "input": "header", - "text": "Skabelon: Nyheder", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "news-feed-form-2", - "input": "header-h3", - "text": "Opsæt feed", - "name": "header2", - "formGroupClasses": "h5 mb-3" - }, - { - "key": "news-feed-form-3", - "input": "feed", - "text": "Opsæt feed", - "name": "feeds", - "supportedFeedOutputType": "rss", - "formGroupClasses": "mb-3" - }, - { - "key": "news-feed-form-entry-duration", - "input": "input", - "name": "entryDuration", - "type": "number", - "label": "Varighed pr. nyhed (i sekunder)", - "helpText": "Her skal du skrive varigheden pr. nyhed.", - "formGroupClasses": "mb-3", - "required": true - }, - { - "key": "news-feed-form-readmore", - "input": "input", - "label": "Læs mere tekst", - "helpText": "Hvis den ikke overskrives, står der \"Læs hele nyheden\"", - "name": "readMore", - "formGroupClasses": "mb-3" - }, - { - "key": "rss-form-4", - "multipleImages": false, - "input": "image", - "name": "fallbackImage", - "label": "Fallback-billede", - "helpText": "Dette billede kan vises, hvis nyheden mangler et billede.", - "formGroupClasses": "mb-3" - }, - { - "key": "form-media-contain", - "input": "checkbox", - "name": "mediaContain", - "label": "Deaktivér billedbeskæring", - "helpText": "Billedet vil blive vist ubeskåret med tomme områder omkring", - "formGroupClasses": "mb-3" - } -] diff --git a/assets/shared/template/news-feed/news-feed-config.json b/assets/shared/template/news-feed/news-feed-config.json deleted file mode 100644 index 6648c273f..000000000 --- a/assets/shared/template/news-feed/news-feed-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "Nyheder", - "icon": "", - "id": "01JEWPAFF93YSF418TH72W1SBA", - "description": "Mulighed for at vise nyhedsindhold.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/news-feed.js", - "admin": "https://display-templates.local.itkdev.dk/build/news-feed-admin.json", - "schema": "", - "assets": [], - "options": {}, - "content": {} - } -} diff --git a/assets/shared/template/poster/poster-admin.json b/assets/shared/template/poster/poster-admin.json deleted file mode 100644 index fd3ff8138..000000000 --- a/assets/shared/template/poster/poster-admin.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "key": "poster-form-1", - "input": "header", - "text": "Skabelon: Plakat fra feed", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "poster-form-2", - "input": "header-h3", - "text": "Opsæt feed", - "name": "header2", - "formGroupClasses": "h5 mb-3" - }, - { - "key": "poster-form-3", - "input": "feed", - "text": "Opsæt feed", - "name": "feeds", - "supportedFeedOutputType": "poster", - "formGroupClasses": "mb-3", - "singleSelect": true - }, - { - "key": "poster-form-entry-duration", - "input": "duration", - "name": "duration", - "type": "number", - "label": "Varighed pr. begivenhed (i sekunder)", - "helpText": "Her skal du skrive varigheden pr. begivenhed.", - "required": true, - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "poster-form-4", - "input": "checkbox", - "label": "Vis logo fra tema", - "name": "showLogo", - "formGroupClasses": "col-md-6 mb-3" - }, - { - "key": "form-media-contain", - "input": "checkbox", - "name": "mediaContain", - "label": "Deaktivér billedbeskæring", - "helpText": "Billedet vil blive vist ubeskåret med tomme områder omkring" - } -] diff --git a/assets/shared/template/poster/poster-config.json b/assets/shared/template/poster/poster-config.json deleted file mode 100644 index 5d2480081..000000000 --- a/assets/shared/template/poster/poster-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "Plakat", - "icon": "", - "id": "01FWJZQ25A1868V63CWYYHQFKQ", - "description": "Mulighed for at vise plakat indhold.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/poster.js", - "admin": "https://display-templates.local.itkdev.dk/build/poster-admin.json", - "schema": "https://display-templates.local.itkdev.dk/build/poster-schema.json", - "assets": [], - "options": {}, - "content": {} - } -} diff --git a/assets/shared/template/rss/rss-admin.json b/assets/shared/template/rss/rss-admin.json deleted file mode 100644 index fc7485ef9..000000000 --- a/assets/shared/template/rss/rss-admin.json +++ /dev/null @@ -1,74 +0,0 @@ -[ - { - "key": "rss-form-1", - "input": "header", - "text": "Skabelon: RSS", - "name": "header1", - "formGroupClasses": "h4 mb-3" - }, - { - "key": "rss-form-2", - "input": "header-h3", - "text": "Indhold", - "name": "header2", - "formGroupClasses": "h5 mb-3" - }, - { - "key": "rss-form-3", - "input": "feed", - "text": "Opsæt feed", - "name": "feed", - "supportedFeedOutputType": "rss", - "formGroupClasses": "mb-3" - }, - { - "key": "rss-form-4", - "multipleImages": false, - "input": "image", - "name": "image", - "label": "Baggrundsbillede", - "formGroupClasses": "mb-3" - }, - { - "key": "form-media-contain", - "input": "checkbox", - "name": "mediaContain", - "label": "Deaktivér billedbeskæring", - "helpText": "Billedet vil blive vist ubeskåret med tomme områder omkring" - }, - { - "key": "rss-form-5", - "input": "select", - "required": false, - "label": "Tekststørrelse", - "formGroupClasses": "col-md-6 mb-3", - "options": [ - { - "key": "fontsize1", - "title": "xs", - "value": "font-size-xs" - }, - { - "key": "fontsize2", - "title": "s", - "value": "font-size-s" - }, - { - "key": "fontsize3", - "title": "m", - "value": "font-size-m" - }, - { - "key": "fontsize4", - "title": "l", - "value": "font-size-lg" - }, - { - "key": "fontsize5", - "title": "xl", - "value": "font-size-xl" - } - ], - "name": "fontSize" - } -] diff --git a/assets/shared/template/rss/rss-config.json b/assets/shared/template/rss/rss-config.json deleted file mode 100644 index 2fe491c36..000000000 --- a/assets/shared/template/rss/rss-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "RSS", - "icon": "", - "id": "01FQC300GGWCA7A8H0SXY6P9FG", - "description": "Mulighed for at vise et rss feed.", - "resources": { - "component": "https://display-templates.local.itkdev.dk/build/rss.js", - "admin": "https://display-templates.local.itkdev.dk/build/rss-admin.json", - "schema": "https://display-templates.local.itkdev.dk/build/rss-schema.json", - "assets": [], - "options": {}, - "content": {} - } -} diff --git a/assets/shared/template/screens.js b/assets/shared/template/screens.js deleted file mode 100644 index b34a71d23..000000000 --- a/assets/shared/template/screens.js +++ /dev/null @@ -1,50 +0,0 @@ -import twoBoxes from "./screen-layouts/two-boxes.json"; -import threeBoxes from "./screen-layouts/three-boxes.json"; -import threeBoxesHorizontal from "./screen-layouts/three-boxes-horizontal.json"; -import twoBoxesVertical from "./screen-layouts/two-boxes-vertical.json"; -import touchTemplate from "./screen-layouts/touch-template.json"; -import sixAreas from "./screen-layouts/six-areas.json"; -import fullScreen from "./screen-layouts/full-screen.json"; -import fourAreas from "./screen-layouts/four-areas.json"; -import twoBoxesVerticalReversed from "./screen-layouts/two-boxes-vertical-reversed.json"; - -const screens = [ - { - id: "two-split", - screenLayout: twoBoxes, - }, - { - id: "two-split-vertical", - screenLayout: twoBoxesVertical, - }, - { - id: "two-split-vertical-reversed", - screenLayout: twoBoxesVerticalReversed, - }, - { - id: "touch-template", - screenLayout: touchTemplate, - }, - { - id: "three-split", - screenLayout: threeBoxes, - }, - { - id: "three-split-horizontal", - screenLayout: threeBoxesHorizontal, - }, - { - id: "six-areas", - screenLayout: sixAreas, - }, - { - id: "full-screen", - screenLayout: fullScreen, - }, - { - id: "four-areas", - screenLayout: fourAreas, - }, -]; - -export default screens; diff --git a/assets/shared/template/slide.jsx b/assets/shared/template/slide.jsx deleted file mode 100644 index cc8898731..000000000 --- a/assets/shared/template/slide.jsx +++ /dev/null @@ -1,164 +0,0 @@ -import React from "react"; -import BookReview from "./book-review/book-review.jsx"; -import Calendar from "./calendar/calendar.jsx"; -import Contacts from "./contacts/contacts.jsx"; -import ImageText from "./image-text/image-text.jsx"; -import IFrame from "./iframe/iframe.jsx"; -import Poster from "./poster/poster.jsx"; -import RSS from "./rss/rss.jsx"; -import Slideshow from "./slideshow/slideshow.jsx"; -import InstagramFeed from "./instagram-feed/instagram-feed.jsx"; -import NewsFeed from "./news-feed/news-feed.jsx"; -import Table from "./table/table.jsx"; -import Video from "./video/video.jsx"; -import Travel from "./travel/travel.jsx"; -import VimeoPlayer from "./vimeo-player/vimeo-player.jsx"; - -const renderSlide = (slide, run, slideDone) => { - switch (slide?.templateData?.id) { - case "01FP2SME0ENTXWF362XHM6Z1B4": - return ( - - ); - case "01FRJPF4XATRN8PBZ35XN84PS6": - return ( - - ); - case "01FPZ19YEHX7MQ5Q6ZS0WK0VEA": - return ( - - ); - case "01FQBJQ2M3544ZKAADPWBXHY71": - return ( -