From e392c5ae4ea9277594028151b3aa7d4617444d44 Mon Sep 17 00:00:00 2001 From: thmarx Date: Sun, 8 Feb 2026 13:41:51 +0100 Subject: [PATCH 1/2] make state in manager more flexible --- .../main/resources/manager/css/manager.css | 49 ++++++++++++++++ .../manager/js/modules/manager-ui.js | 58 ++++++++++++++----- .../src/main/ts/dist/js/modules/manager-ui.js | 58 ++++++++++++++----- .../src/main/ts/src/js/modules/manager-ui.js | 46 ++++++++++++--- test-server/hosts/demo/content/index.md | 2 +- 5 files changed, 171 insertions(+), 42 deletions(-) diff --git a/modules/ui-module/src/main/resources/manager/css/manager.css b/modules/ui-module/src/main/resources/manager/css/manager.css index 0b8158cc2..20c5705b2 100644 --- a/modules/ui-module/src/main/resources/manager/css/manager.css +++ b/modules/ui-module/src/main/resources/manager/css/manager.css @@ -315,4 +315,53 @@ body.resizing-sidebar { .cherry-editor-container .cm-editor { height: 100%; overflow: auto; +} + +.cms-node-status-published{ + --bs-btn-color:#fff; + --bs-btn-bg:#5cb85c; + --bs-btn-border-color:#5cb85c; + --bs-btn-hover-color:#fff; + --bs-btn-hover-bg:#4e9c4e; + --bs-btn-hover-border-color:#4a934a; + --bs-btn-focus-shadow-rgb:116,195,116; + --bs-btn-active-color:#fff; + --bs-btn-active-bg:#4a934a; + --bs-btn-active-border-color:#458a45; + --bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color:#fff; + --bs-btn-disabled-bg:#5cb85c; + --bs-btn-disabled-border-color:#5cb85c +} +.cms-node-status-published-not-visible{ + --bs-btn-color:#fff; + --bs-btn-bg:#5bc0de; + --bs-btn-border-color:#5bc0de; + --bs-btn-hover-color:#fff; + --bs-btn-hover-bg:#4da3bd; + --bs-btn-hover-border-color:#499ab2; + --bs-btn-focus-shadow-rgb:116,201,227; + --bs-btn-active-color:#fff; + --bs-btn-active-bg:#499ab2; + --bs-btn-active-border-color:#4490a7; + --bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color:#fff; + --bs-btn-disabled-bg:#5bc0de; + --bs-btn-disabled-border-color:#5bc0de +} +.cms-node-status-unpublished{ + --bs-btn-color:#fff; + --bs-btn-bg:#ffc107; + --bs-btn-border-color:#ffc107; + --bs-btn-hover-color:#fff; + --bs-btn-hover-bg:#d9a406; + --bs-btn-hover-border-color:#cc9a06; + --bs-btn-focus-shadow-rgb:255,202,44; + --bs-btn-active-color:#fff; + --bs-btn-active-bg:#cc9a06; + --bs-btn-active-border-color:#bf9105; + --bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color:#fff; + --bs-btn-disabled-bg:#ffc107; + --bs-btn-disabled-border-color:#ffc107 } \ No newline at end of file diff --git a/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.js b/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.js index b0b8846d3..ba5ca03dc 100644 --- a/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.js +++ b/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.js @@ -36,27 +36,53 @@ export function updateStateButton() { getContent({ uri: contentNode.result.uri }).then((getContentResponse) => { - var published = getContentResponse?.result?.meta?.published; + /* + var published = getContentResponse?.result?.meta?.published if (published) { - if (isPagePublishedExpired(getContentResponse)) { - document.querySelector('#cms-btn-status').classList.remove('btn-warning'); - document.querySelector('#cms-btn-status').classList.remove('btn-success'); - document.querySelector('#cms-btn-status').classList.add('btn-info'); - } - else { - document.querySelector('#cms-btn-status').classList.remove('btn-warning'); - document.querySelector('#cms-btn-status').classList.remove('btn-info'); - document.querySelector('#cms-btn-status').classList.add('btn-success'); - } - } - else { - document.querySelector('#cms-btn-status').classList.remove('btn-success'); - document.querySelector('#cms-btn-status').classList.remove('btn-info'); - document.querySelector('#cms-btn-status').classList.add('btn-warning'); + + if (isPagePublishedExpired(getContentResponse)) { + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-published-not-visible'); + } else { + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-published'); + } + } else { + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-unpublished'); } + */ + updateNodeStatus(getContentResponse); }); }); } +function updateNodeStatus(getContentResponse) { + const statusBtn = document.querySelector('#cms-btn-status'); + if (!statusBtn) + return; + // Alle cms-node-status-* Klassen entfernen + Array.from(statusBtn.classList).forEach(className => { + if (className.startsWith('cms-node-status-')) { + statusBtn.classList.remove(className); + } + }); + var published = getContentResponse?.result?.meta?.published; + // Status bestimmen (Provider-fähig) + let status; + if (!published) { + status = 'unpublished'; + } + else if (isPagePublishedExpired(getContentResponse)) { + status = 'published-not-visible'; + } + else { + status = 'published'; + } + statusBtn.classList.add(`cms-node-status-${status}`); +} export function isPagePublishedExpired(contentResponse) { const publishDateStr = contentResponse?.result?.meta?.publish_date; const unpublishDateStr = contentResponse?.result?.meta?.unpublish_date; diff --git a/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.js b/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.js index b0b8846d3..ba5ca03dc 100644 --- a/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.js +++ b/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.js @@ -36,27 +36,53 @@ export function updateStateButton() { getContent({ uri: contentNode.result.uri }).then((getContentResponse) => { - var published = getContentResponse?.result?.meta?.published; + /* + var published = getContentResponse?.result?.meta?.published if (published) { - if (isPagePublishedExpired(getContentResponse)) { - document.querySelector('#cms-btn-status').classList.remove('btn-warning'); - document.querySelector('#cms-btn-status').classList.remove('btn-success'); - document.querySelector('#cms-btn-status').classList.add('btn-info'); - } - else { - document.querySelector('#cms-btn-status').classList.remove('btn-warning'); - document.querySelector('#cms-btn-status').classList.remove('btn-info'); - document.querySelector('#cms-btn-status').classList.add('btn-success'); - } - } - else { - document.querySelector('#cms-btn-status').classList.remove('btn-success'); - document.querySelector('#cms-btn-status').classList.remove('btn-info'); - document.querySelector('#cms-btn-status').classList.add('btn-warning'); + + if (isPagePublishedExpired(getContentResponse)) { + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-published-not-visible'); + } else { + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-published'); + } + } else { + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-unpublished'); } + */ + updateNodeStatus(getContentResponse); }); }); } +function updateNodeStatus(getContentResponse) { + const statusBtn = document.querySelector('#cms-btn-status'); + if (!statusBtn) + return; + // Alle cms-node-status-* Klassen entfernen + Array.from(statusBtn.classList).forEach(className => { + if (className.startsWith('cms-node-status-')) { + statusBtn.classList.remove(className); + } + }); + var published = getContentResponse?.result?.meta?.published; + // Status bestimmen (Provider-fähig) + let status; + if (!published) { + status = 'unpublished'; + } + else if (isPagePublishedExpired(getContentResponse)) { + status = 'published-not-visible'; + } + else { + status = 'published'; + } + statusBtn.classList.add(`cms-node-status-${status}`); +} export function isPagePublishedExpired(contentResponse) { const publishDateStr = contentResponse?.result?.meta?.publish_date; const unpublishDateStr = contentResponse?.result?.meta?.unpublish_date; diff --git a/modules/ui-module/src/main/ts/src/js/modules/manager-ui.js b/modules/ui-module/src/main/ts/src/js/modules/manager-ui.js index 28f29be12..9fbbe16ba 100644 --- a/modules/ui-module/src/main/ts/src/js/modules/manager-ui.js +++ b/modules/ui-module/src/main/ts/src/js/modules/manager-ui.js @@ -38,27 +38,55 @@ export function updateStateButton() { getContent({ uri: contentNode.result.uri }).then((getContentResponse) => { + /* var published = getContentResponse?.result?.meta?.published if (published) { if (isPagePublishedExpired(getContentResponse)) { - document.querySelector('#cms-btn-status').classList.remove('btn-warning'); - document.querySelector('#cms-btn-status').classList.remove('btn-success'); - document.querySelector('#cms-btn-status').classList.add('btn-info'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-published-not-visible'); } else { - document.querySelector('#cms-btn-status').classList.remove('btn-warning'); - document.querySelector('#cms-btn-status').classList.remove('btn-info'); - document.querySelector('#cms-btn-status').classList.add('btn-success'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-published'); } } else { - document.querySelector('#cms-btn-status').classList.remove('btn-success'); - document.querySelector('#cms-btn-status').classList.remove('btn-info'); - document.querySelector('#cms-btn-status').classList.add('btn-warning'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); + document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); + document.querySelector('#cms-btn-status').classList.add('cms-node-status-unpublished'); } + */ + updateNodeStatus(getContentResponse); }) }) } +function updateNodeStatus(getContentResponse) { + const statusBtn = document.querySelector('#cms-btn-status'); + if (!statusBtn) return; + + // Alle cms-node-status-* Klassen entfernen + Array.from(statusBtn.classList).forEach(className => { + if (className.startsWith('cms-node-status-')) { + statusBtn.classList.remove(className); + } + }); + + var published = getContentResponse?.result?.meta?.published + // Status bestimmen (Provider-fähig) + let status; + if (!published) { + status = 'unpublished'; + } else if (isPagePublishedExpired(getContentResponse)) { + status = 'published-not-visible'; + } else { + status = 'published'; + } + + statusBtn.classList.add(`cms-node-status-${status}`); +} + export function isPagePublishedExpired(contentResponse) { const publishDateStr = contentResponse?.result?.meta?.publish_date; const unpublishDateStr = contentResponse?.result?.meta?.unpublish_date; diff --git a/test-server/hosts/demo/content/index.md b/test-server/hosts/demo/content/index.md index 6d604cc38..81e1e6fa6 100644 --- a/test-server/hosts/demo/content/index.md +++ b/test-server/hosts/demo/content/index.md @@ -3,7 +3,7 @@ title: Startpage template: start.html search: index: false -published: true +published: false description: Thats awesome 1234 parent: text: another text for the meta attribute , seems to work From 10e7d4b99b1f0f664964718265073a5914f42045 Mon Sep 17 00:00:00 2001 From: thmarx Date: Sun, 8 Feb 2026 20:07:56 +0100 Subject: [PATCH 2/2] fix initial page state, remove logging --- .../com/condation/cms/api/db/NodeStatus.java | 47 ++++++++++++++++++ .../RemoteContentEndpointsExtension.java | 2 + .../manager/actions/media/edit-focal-point.js | 2 - .../src/main/resources/manager/index.html | 3 +- .../src/main/resources/manager/js/manager.js | 48 +++++++++++-------- .../manager/js/modules/form/field.list.js | 1 - .../manager/js/modules/form/field.markdown.js | 1 - .../manager/js/modules/manager-ui.d.ts | 1 - .../manager/js/modules/manager-ui.js | 38 ++------------- modules/ui-module/src/main/ts/README | 6 +++ .../ts/dist/actions/media/edit-focal-point.js | 2 - .../ui-module/src/main/ts/dist/js/manager.js | 48 +++++++++++-------- .../ts/dist/js/modules/form/field.list.js | 1 - .../ts/dist/js/modules/form/field.markdown.js | 1 - .../main/ts/dist/js/modules/manager-ui.d.ts | 1 - .../src/main/ts/dist/js/modules/manager-ui.js | 38 ++------------- modules/ui-module/src/main/ts/globals.d.ts | 1 + .../ts/src/actions/media/edit-focal-point.ts | 3 +- .../ui-module/src/main/ts/src/js/manager.js | 48 +++++++++++-------- .../main/ts/src/js/modules/form/field.list.ts | 1 - .../ts/src/js/modules/form/field.markdown.ts | 1 - .../src/main/ts/src/js/modules/manager-ui.js | 46 ++---------------- test-server/hosts/demo/content/index.md | 2 +- 23 files changed, 151 insertions(+), 191 deletions(-) create mode 100644 cms-api/src/main/java/com/condation/cms/api/db/NodeStatus.java diff --git a/cms-api/src/main/java/com/condation/cms/api/db/NodeStatus.java b/cms-api/src/main/java/com/condation/cms/api/db/NodeStatus.java new file mode 100644 index 000000000..6012a2ea3 --- /dev/null +++ b/cms-api/src/main/java/com/condation/cms/api/db/NodeStatus.java @@ -0,0 +1,47 @@ +package com.condation.cms.api.db; + +/*- + * #%L + * cms-api + * %% + * Copyright (C) 2023 - 2026 CondationCMS + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.condation.cms.api.Constants; +import com.condation.cms.api.utils.DateRange; +import java.time.Instant; +import java.util.Date; +import java.util.Map; + +/** + * + * @author thmar + */ +public class NodeStatus { + + public static Status get (Map meta) { + var published = (boolean) meta.getOrDefault(Constants.MetaFields.PUBLISHED, false); + var publish_date = (Date) meta.getOrDefault(Constants.MetaFields.PUBLISH_DATE, Date.from(Instant.now())); + + var unpublish_date = (Date) meta.getOrDefault(Constants.MetaFields.UNPUBLISH_DATE, null); + + return new Status(published, DateRange.isNowWithin(publish_date, unpublish_date)); + } + + public static record Status (boolean published, boolean withinSchedule){}; +} diff --git a/modules/ui-module/src/main/java/com/condation/cms/modules/ui/extensionpoints/remotemethods/RemoteContentEndpointsExtension.java b/modules/ui-module/src/main/java/com/condation/cms/modules/ui/extensionpoints/remotemethods/RemoteContentEndpointsExtension.java index 1611f6788..49dd5f3b8 100644 --- a/modules/ui-module/src/main/java/com/condation/cms/modules/ui/extensionpoints/remotemethods/RemoteContentEndpointsExtension.java +++ b/modules/ui-module/src/main/java/com/condation/cms/modules/ui/extensionpoints/remotemethods/RemoteContentEndpointsExtension.java @@ -24,6 +24,7 @@ import com.condation.cms.api.Constants; import com.condation.cms.api.auth.Permissions; import com.condation.cms.api.db.DB; +import com.condation.cms.api.db.NodeStatus; import com.condation.cms.api.db.cms.ReadOnlyFile; import com.condation.cms.api.eventbus.events.InvalidateContentCacheEvent; import com.condation.cms.api.eventbus.events.ReIndexContentMetaDataEvent; @@ -77,6 +78,7 @@ public Object getContent(Map parameters) { ContentFileParser parser = new ContentFileParser(contentFile); result.put("content", parser.getContent()); result.put("meta", parser.getHeader()); + result.put("status", NodeStatus.get(parser.getHeader())); } catch (IOException ex) { log.error("", ex); } diff --git a/modules/ui-module/src/main/resources/manager/actions/media/edit-focal-point.js b/modules/ui-module/src/main/resources/manager/actions/media/edit-focal-point.js index 2d9576112..9bbf04bdf 100644 --- a/modules/ui-module/src/main/resources/manager/actions/media/edit-focal-point.js +++ b/modules/ui-module/src/main/resources/manager/actions/media/edit-focal-point.js @@ -85,8 +85,6 @@ export async function runAction(params) { point.style.display = "block"; focal.x = parseFloat(relX); focal.y = parseFloat(relY); - // Ausgabe - console.log(`Focal Point: x: ${relX}, y: ${relY}`); }); } }); diff --git a/modules/ui-module/src/main/resources/manager/index.html b/modules/ui-module/src/main/resources/manager/index.html index 1487b51b2..b698ad1cc 100644 --- a/modules/ui-module/src/main/resources/manager/index.html +++ b/modules/ui-module/src/main/resources/manager/index.html @@ -95,6 +95,7 @@ baseUrl: '{{ managerBaseURL }}', contextPath: '{{ contextPath }}', siteId: '{{ siteId }}', + previewUrl: "{{ links.createUrl('/?preview=manager&preview-token22=' + previewToken) | raw }}" } @@ -211,7 +212,7 @@
+ srcalt="{{ links.createUrl('/?preview=manager&preview-token22=' + previewToken) | raw }}">
{ - EventBus.emit("preview:loaded", {}); - try { - const currentUrl = iframe.contentWindow.location.href; - const url = new URL(currentUrl); - const preview_url = url.pathname + url.search; - const preview_update = { - url: preview_url, - siteId: window.manager.siteId - }; - UIStateManager.setTabState("preview", preview_update); - updateStateButton(); - } - catch (e) { - console.log(e); + else { + loadPreview(window.manager.previewUrl); } - }); + } initMessageHandlers(); }); +const previewLoadedHandler = () => { + EventBus.emit("preview:loaded", {}); + try { + const iframe = document.getElementById('contentPreview'); + const currentUrl = iframe.contentWindow.location.href; + const url = new URL(currentUrl); + const preview_url = url.pathname + url.search; + const preview_update = { + url: preview_url, + siteId: window.manager.siteId + }; + UIStateManager.setTabState("preview", preview_update); + updateStateButton(); + } + catch (e) { + console.log(e); + } +}; // DOMContentLoaded end diff --git a/modules/ui-module/src/main/resources/manager/js/modules/form/field.list.js b/modules/ui-module/src/main/resources/manager/js/modules/form/field.list.js index df9fe8522..aac17b096 100644 --- a/modules/ui-module/src/main/resources/manager/js/modules/form/field.list.js +++ b/modules/ui-module/src/main/resources/manager/js/modules/form/field.list.js @@ -160,7 +160,6 @@ const getData = (context) => { }; } }); - console.log("send: " + data); return data; }; const init = (context) => { diff --git a/modules/ui-module/src/main/resources/manager/js/modules/form/field.markdown.js b/modules/ui-module/src/main/resources/manager/js/modules/form/field.markdown.js index 7075a136b..9d7406c4c 100644 --- a/modules/ui-module/src/main/resources/manager/js/modules/form/field.markdown.js +++ b/modules/ui-module/src/main/resources/manager/js/modules/form/field.markdown.js @@ -161,7 +161,6 @@ const cmsImageSelection = window.Cherry.createMenuHook("Image", { mediaFormats.forEach((format) => { formatOptions[format.name] = format.name; }); - console.log("Media Formats", mediaFormats, formatOptions); var selectedFormat = await alertSelect({ title: i18n.t("form.media.format.title", "Select Media Format"), values: formatOptions diff --git a/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.d.ts b/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.d.ts index b22884d26..70e1e94b6 100644 --- a/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.d.ts +++ b/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.d.ts @@ -20,4 +20,3 @@ * #L% */ export function updateStateButton(): void; -export function isPagePublishedExpired(contentResponse: any): boolean; diff --git a/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.js b/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.js index ba5ca03dc..bd2dda1e7 100644 --- a/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.js +++ b/modules/ui-module/src/main/resources/manager/js/modules/manager-ui.js @@ -19,8 +19,8 @@ * . * #L% */ -import { getContentNode, setMeta, getContent } from '@cms/modules/rpc/rpc-content.js'; import { getPreviewUrl } from '@cms/modules/preview.utils.js'; +import { getContent, getContentNode } from '@cms/modules/rpc/rpc-content.js'; export function updateStateButton() { var previewUrl = getPreviewUrl(); ; @@ -36,25 +36,6 @@ export function updateStateButton() { getContent({ uri: contentNode.result.uri }).then((getContentResponse) => { - /* - var published = getContentResponse?.result?.meta?.published - if (published) { - - if (isPagePublishedExpired(getContentResponse)) { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-published-not-visible'); - } else { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-published'); - } - } else { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-unpublished'); - } - */ updateNodeStatus(getContentResponse); }); }); @@ -69,13 +50,13 @@ function updateNodeStatus(getContentResponse) { statusBtn.classList.remove(className); } }); - var published = getContentResponse?.result?.meta?.published; + var published = getContentResponse?.result?.status?.published; // Status bestimmen (Provider-fähig) let status; if (!published) { status = 'unpublished'; } - else if (isPagePublishedExpired(getContentResponse)) { + else if (!getContentResponse?.result?.status?.withinSchedule) { status = 'published-not-visible'; } else { @@ -83,16 +64,3 @@ function updateNodeStatus(getContentResponse) { } statusBtn.classList.add(`cms-node-status-${status}`); } -export function isPagePublishedExpired(contentResponse) { - const publishDateStr = contentResponse?.result?.meta?.publish_date; - const unpublishDateStr = contentResponse?.result?.meta?.unpublish_date; - const now = new Date(); - const publishDate = publishDateStr ? new Date(publishDateStr) : null; - const unpublishDate = unpublishDateStr ? new Date(unpublishDateStr) : null; - // page is published if: - // - publishDate empty or in the past - // - und unpublishDate empty or in the future - const isPublished = (!publishDate || publishDate <= now) && - (!unpublishDate || unpublishDate > now); - return !isPublished; -} diff --git a/modules/ui-module/src/main/ts/README b/modules/ui-module/src/main/ts/README index 2d466bc31..8d9a5f648 100644 --- a/modules/ui-module/src/main/ts/README +++ b/modules/ui-module/src/main/ts/README @@ -2,4 +2,10 @@ ```shell tsc +``` + +## publish + +```shell +npm publish ``` \ No newline at end of file diff --git a/modules/ui-module/src/main/ts/dist/actions/media/edit-focal-point.js b/modules/ui-module/src/main/ts/dist/actions/media/edit-focal-point.js index 2d9576112..9bbf04bdf 100644 --- a/modules/ui-module/src/main/ts/dist/actions/media/edit-focal-point.js +++ b/modules/ui-module/src/main/ts/dist/actions/media/edit-focal-point.js @@ -85,8 +85,6 @@ export async function runAction(params) { point.style.display = "block"; focal.x = parseFloat(relX); focal.y = parseFloat(relY); - // Ausgabe - console.log(`Focal Point: x: ${relX}, y: ${relY}`); }); } }); diff --git a/modules/ui-module/src/main/ts/dist/js/manager.js b/modules/ui-module/src/main/ts/dist/js/manager.js index 3fdd3e8f2..04b61c867 100644 --- a/modules/ui-module/src/main/ts/dist/js/manager.js +++ b/modules/ui-module/src/main/ts/dist/js/manager.js @@ -40,8 +40,12 @@ document.addEventListener("DOMContentLoaded", function () { }); }, 5 * 60 * 1000); const iframe = document.getElementById('contentPreview'); + iframe.addEventListener("load", previewLoadedHandler); const urlParams = new URLSearchParams(window.location.search); const pageUrl = urlParams.get('page'); + /* + page param is use for deeplinks when changing translation + */ if (pageUrl) { loadPreview(pageUrl); // Clean the URL @@ -50,29 +54,31 @@ document.addEventListener("DOMContentLoaded", function () { } else { const preview = UIStateManager.getTabState("preview", null); - if (preview) { - if (preview.siteId === window.manager.siteId) { - loadPreview(preview.url); - } + if (preview && preview.siteId === window.manager.siteId) { + loadPreview(preview.url); } - } - iframe.addEventListener("load", () => { - EventBus.emit("preview:loaded", {}); - try { - const currentUrl = iframe.contentWindow.location.href; - const url = new URL(currentUrl); - const preview_url = url.pathname + url.search; - const preview_update = { - url: preview_url, - siteId: window.manager.siteId - }; - UIStateManager.setTabState("preview", preview_update); - updateStateButton(); - } - catch (e) { - console.log(e); + else { + loadPreview(window.manager.previewUrl); } - }); + } initMessageHandlers(); }); +const previewLoadedHandler = () => { + EventBus.emit("preview:loaded", {}); + try { + const iframe = document.getElementById('contentPreview'); + const currentUrl = iframe.contentWindow.location.href; + const url = new URL(currentUrl); + const preview_url = url.pathname + url.search; + const preview_update = { + url: preview_url, + siteId: window.manager.siteId + }; + UIStateManager.setTabState("preview", preview_update); + updateStateButton(); + } + catch (e) { + console.log(e); + } +}; // DOMContentLoaded end diff --git a/modules/ui-module/src/main/ts/dist/js/modules/form/field.list.js b/modules/ui-module/src/main/ts/dist/js/modules/form/field.list.js index df9fe8522..aac17b096 100644 --- a/modules/ui-module/src/main/ts/dist/js/modules/form/field.list.js +++ b/modules/ui-module/src/main/ts/dist/js/modules/form/field.list.js @@ -160,7 +160,6 @@ const getData = (context) => { }; } }); - console.log("send: " + data); return data; }; const init = (context) => { diff --git a/modules/ui-module/src/main/ts/dist/js/modules/form/field.markdown.js b/modules/ui-module/src/main/ts/dist/js/modules/form/field.markdown.js index 7075a136b..9d7406c4c 100644 --- a/modules/ui-module/src/main/ts/dist/js/modules/form/field.markdown.js +++ b/modules/ui-module/src/main/ts/dist/js/modules/form/field.markdown.js @@ -161,7 +161,6 @@ const cmsImageSelection = window.Cherry.createMenuHook("Image", { mediaFormats.forEach((format) => { formatOptions[format.name] = format.name; }); - console.log("Media Formats", mediaFormats, formatOptions); var selectedFormat = await alertSelect({ title: i18n.t("form.media.format.title", "Select Media Format"), values: formatOptions diff --git a/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.d.ts b/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.d.ts index 3a4ec4800..d25e9cb32 100644 --- a/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.d.ts +++ b/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.d.ts @@ -1,2 +1 @@ export function updateStateButton(): void; -export function isPagePublishedExpired(contentResponse: any): boolean; diff --git a/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.js b/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.js index ba5ca03dc..bd2dda1e7 100644 --- a/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.js +++ b/modules/ui-module/src/main/ts/dist/js/modules/manager-ui.js @@ -19,8 +19,8 @@ * . * #L% */ -import { getContentNode, setMeta, getContent } from '@cms/modules/rpc/rpc-content.js'; import { getPreviewUrl } from '@cms/modules/preview.utils.js'; +import { getContent, getContentNode } from '@cms/modules/rpc/rpc-content.js'; export function updateStateButton() { var previewUrl = getPreviewUrl(); ; @@ -36,25 +36,6 @@ export function updateStateButton() { getContent({ uri: contentNode.result.uri }).then((getContentResponse) => { - /* - var published = getContentResponse?.result?.meta?.published - if (published) { - - if (isPagePublishedExpired(getContentResponse)) { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-published-not-visible'); - } else { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-published'); - } - } else { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-unpublished'); - } - */ updateNodeStatus(getContentResponse); }); }); @@ -69,13 +50,13 @@ function updateNodeStatus(getContentResponse) { statusBtn.classList.remove(className); } }); - var published = getContentResponse?.result?.meta?.published; + var published = getContentResponse?.result?.status?.published; // Status bestimmen (Provider-fähig) let status; if (!published) { status = 'unpublished'; } - else if (isPagePublishedExpired(getContentResponse)) { + else if (!getContentResponse?.result?.status?.withinSchedule) { status = 'published-not-visible'; } else { @@ -83,16 +64,3 @@ function updateNodeStatus(getContentResponse) { } statusBtn.classList.add(`cms-node-status-${status}`); } -export function isPagePublishedExpired(contentResponse) { - const publishDateStr = contentResponse?.result?.meta?.publish_date; - const unpublishDateStr = contentResponse?.result?.meta?.unpublish_date; - const now = new Date(); - const publishDate = publishDateStr ? new Date(publishDateStr) : null; - const unpublishDate = unpublishDateStr ? new Date(unpublishDateStr) : null; - // page is published if: - // - publishDate empty or in the past - // - und unpublishDate empty or in the future - const isPublished = (!publishDate || publishDate <= now) && - (!unpublishDate || unpublishDate > now); - return !isPublished; -} diff --git a/modules/ui-module/src/main/ts/globals.d.ts b/modules/ui-module/src/main/ts/globals.d.ts index d5e272f83..714f0a99e 100644 --- a/modules/ui-module/src/main/ts/globals.d.ts +++ b/modules/ui-module/src/main/ts/globals.d.ts @@ -11,6 +11,7 @@ declare global { baseUrl: string, contextPath: string, siteId: string, + previewUrl: string, }, EasyMDE : any, Cherry: any diff --git a/modules/ui-module/src/main/ts/src/actions/media/edit-focal-point.ts b/modules/ui-module/src/main/ts/src/actions/media/edit-focal-point.ts index 04bc381f6..2300a9727 100644 --- a/modules/ui-module/src/main/ts/src/actions/media/edit-focal-point.ts +++ b/modules/ui-module/src/main/ts/src/actions/media/edit-focal-point.ts @@ -96,8 +96,7 @@ export async function runAction(params) { focal.x = parseFloat(relX); focal.y = parseFloat(relY); - // Ausgabe - console.log(`Focal Point: x: ${relX}, y: ${relY}`); + }); } }); diff --git a/modules/ui-module/src/main/ts/src/js/manager.js b/modules/ui-module/src/main/ts/src/js/manager.js index 62eca6e29..8d44d353b 100644 --- a/modules/ui-module/src/main/ts/src/js/manager.js +++ b/modules/ui-module/src/main/ts/src/js/manager.js @@ -49,10 +49,14 @@ document.addEventListener("DOMContentLoaded", function () { }, 5 * 60 * 1000); const iframe = document.getElementById('contentPreview'); + iframe.addEventListener("load", previewLoadedHandler) const urlParams = new URLSearchParams(window.location.search); const pageUrl = urlParams.get('page'); + /* + page param is use for deeplinks when changing translation + */ if (pageUrl) { loadPreview(pageUrl); // Clean the URL @@ -60,34 +64,36 @@ document.addEventListener("DOMContentLoaded", function () { window.history.replaceState({}, document.title, newUrl); } else { const preview = UIStateManager.getTabState("preview", null); - if (preview) { - if (preview.siteId === window.manager.siteId) { - loadPreview(preview.url); - } + if (preview && preview.siteId === window.manager.siteId) { + loadPreview(preview.url); + } else { + loadPreview(window.manager.previewUrl); } } - iframe.addEventListener("load", () => { - EventBus.emit("preview:loaded", {}); - try { - const currentUrl = iframe.contentWindow.location.href; - const url = new URL(currentUrl); - const preview_url = url.pathname + url.search; + initMessageHandlers(); + +}); - const preview_update = { - url: preview_url, - siteId: window.manager.siteId - } +const previewLoadedHandler = () => { + EventBus.emit("preview:loaded", {}); + try { + const iframe = document.getElementById('contentPreview'); - UIStateManager.setTabState("preview", preview_update) + const currentUrl = iframe.contentWindow.location.href; + const url = new URL(currentUrl); + const preview_url = url.pathname + url.search; - updateStateButton(); - } catch (e) { - console.log(e) + const preview_update = { + url: preview_url, + siteId: window.manager.siteId } - }) - initMessageHandlers(); + UIStateManager.setTabState("preview", preview_update) -}); + updateStateButton(); + } catch (e) { + console.log(e) + } +} // DOMContentLoaded end \ No newline at end of file diff --git a/modules/ui-module/src/main/ts/src/js/modules/form/field.list.ts b/modules/ui-module/src/main/ts/src/js/modules/form/field.list.ts index bb8648aef..68985edae 100644 --- a/modules/ui-module/src/main/ts/src/js/modules/form/field.list.ts +++ b/modules/ui-module/src/main/ts/src/js/modules/form/field.list.ts @@ -195,7 +195,6 @@ const getData = (context: FormContext) => { }; } }) - console.log("send: " + data) return data } diff --git a/modules/ui-module/src/main/ts/src/js/modules/form/field.markdown.ts b/modules/ui-module/src/main/ts/src/js/modules/form/field.markdown.ts index 277e62878..85ee0d4c5 100644 --- a/modules/ui-module/src/main/ts/src/js/modules/form/field.markdown.ts +++ b/modules/ui-module/src/main/ts/src/js/modules/form/field.markdown.ts @@ -200,7 +200,6 @@ const cmsImageSelection = window.Cherry.createMenuHook("Image", { mediaFormats.forEach((format : any) => { formatOptions[format.name] = format.name; }); - console.log("Media Formats", mediaFormats, formatOptions); var selectedFormat = await alertSelect({ title: i18n.t("form.media.format.title", "Select Media Format"), values: formatOptions diff --git a/modules/ui-module/src/main/ts/src/js/modules/manager-ui.js b/modules/ui-module/src/main/ts/src/js/modules/manager-ui.js index 9fbbe16ba..939a1573e 100644 --- a/modules/ui-module/src/main/ts/src/js/modules/manager-ui.js +++ b/modules/ui-module/src/main/ts/src/js/modules/manager-ui.js @@ -20,8 +20,8 @@ * #L% */ -import { getContentNode, setMeta, getContent } from '@cms/modules/rpc/rpc-content.js' -import { getPreviewUrl } from '@cms/modules/preview.utils.js' +import { getPreviewUrl } from '@cms/modules/preview.utils.js'; +import { getContent, getContentNode } from '@cms/modules/rpc/rpc-content.js'; export function updateStateButton() { var previewUrl = getPreviewUrl();; @@ -38,25 +38,6 @@ export function updateStateButton() { getContent({ uri: contentNode.result.uri }).then((getContentResponse) => { - /* - var published = getContentResponse?.result?.meta?.published - if (published) { - - if (isPagePublishedExpired(getContentResponse)) { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-published-not-visible'); - } else { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-unpublished'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-published'); - } - } else { - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published'); - document.querySelector('#cms-btn-status').classList.remove('cms-node-status-published-not-visible'); - document.querySelector('#cms-btn-status').classList.add('cms-node-status-unpublished'); - } - */ updateNodeStatus(getContentResponse); }) }) @@ -73,35 +54,16 @@ function updateNodeStatus(getContentResponse) { } }); - var published = getContentResponse?.result?.meta?.published + var published = getContentResponse?.result?.status?.published // Status bestimmen (Provider-fähig) let status; if (!published) { status = 'unpublished'; - } else if (isPagePublishedExpired(getContentResponse)) { + } else if (!getContentResponse?.result?.status?.withinSchedule) { status = 'published-not-visible'; } else { status = 'published'; } statusBtn.classList.add(`cms-node-status-${status}`); -} - -export function isPagePublishedExpired(contentResponse) { - const publishDateStr = contentResponse?.result?.meta?.publish_date; - const unpublishDateStr = contentResponse?.result?.meta?.unpublish_date; - - const now = new Date(); - - const publishDate = publishDateStr ? new Date(publishDateStr) : null; - const unpublishDate = unpublishDateStr ? new Date(unpublishDateStr) : null; - - // page is published if: - // - publishDate empty or in the past - // - und unpublishDate empty or in the future - const isPublished = - (!publishDate || publishDate <= now) && - (!unpublishDate || unpublishDate > now); - - return !isPublished; } \ No newline at end of file diff --git a/test-server/hosts/demo/content/index.md b/test-server/hosts/demo/content/index.md index 81e1e6fa6..6d604cc38 100644 --- a/test-server/hosts/demo/content/index.md +++ b/test-server/hosts/demo/content/index.md @@ -3,7 +3,7 @@ title: Startpage template: start.html search: index: false -published: false +published: true description: Thats awesome 1234 parent: text: another text for the meta attribute , seems to work