From a2af43552fd0d4bf7148420293e65432e1e57fa2 Mon Sep 17 00:00:00 2001 From: Serhii Plyhun Date: Fri, 21 Mar 2025 10:55:03 +0100 Subject: [PATCH 1/7] GPU-1861: In-built Aloha Link lang support --- .../gtxalohapagelink/gentics_structure.json | 17 +++++++++++++++++ .../gtxalohapagelink/part.handlebars.hbs | 2 +- .../gtxalohapagelink/part.language.txt | 0 .../handlebars/helpers/gtx_alohalink.js | 5 ++++- 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.language.txt diff --git a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/gentics_structure.json b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/gentics_structure.json index de90e2b4b..01e586ab0 100644 --- a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/gentics_structure.json +++ b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/gentics_structure.json @@ -152,6 +152,23 @@ "hideInEditor" : false, "externalEditorUrl" : "", "regexId" : 0 + }, { + "globalId" : "A547.85233", + "name" : { + "de" : "Sprache", + "en" : "Language" + }, + "keyword" : "language", + "editable" : false, + "typeId" : 1, + "order" : 10, + "mlId" : 0, + "visible" : false, + "required" : false, + "inlineEditable" : false, + "hideInEditor" : false, + "externalEditorUrl" : "", + "regexId" : 0 } ], "category" : { "globalId" : "3D6C.351d4688-4aee-11ed-9fbf-482ae36fb1c5", diff --git a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.handlebars.hbs b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.handlebars.hbs index eedc7ca76..061464e73 100644 --- a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.handlebars.hbs +++ b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.handlebars.hbs @@ -1,3 +1,3 @@ {{#gtx_alohalink cms.tag cms.rendermode ~}} -{{cms.tag.parts.text.text}} +{{cms.tag.parts.text.text}} {{~/gtx_alohalink}} \ No newline at end of file diff --git a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.language.txt b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.language.txt new file mode 100644 index 000000000..e69de29bb diff --git a/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js b/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js index 4c327b07f..8bbb1dd2c 100644 --- a/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js +++ b/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js @@ -16,7 +16,9 @@ function gtx_alohalink(tag, renderMode, options) { } } - + if (parts.language.text) { + ctx['language'] = ' hreflang="' + parts.language.text + '"'; + } if (parts.title.text) { ctx['title'] = ' title="' + encodeURIComponent(parts.title.text) + '"'; } @@ -29,6 +31,7 @@ function gtx_alohalink(tag, renderMode, options) { let href = ''; if (url.target && url.target.id) { + ctx['language'] = ' hreflang="' + url.language.code + '"' ctx['data'] = ' data-gentics-aloha-repository="com.gentics.aloha.GCN.Page" data-gentics-aloha-object-id="10007.' + url.target.id + '" data-gentics-aloha-object-online="' + url.target.online + '"'; href = url.target.url; } else { From c109b27aeb2b072be1a8d81db62f34add780f0e2 Mon Sep 17 00:00:00 2001 From: Serhii Plyhun Date: Fri, 21 Mar 2025 11:41:49 +0100 Subject: [PATCH 2/7] Docu --- cms-oss-doc/src/main/source/aloha_gcn_alohapagelink.textile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cms-oss-doc/src/main/source/aloha_gcn_alohapagelink.textile b/cms-oss-doc/src/main/source/aloha_gcn_alohapagelink.textile index 1c94761fa..34d078d4a 100644 --- a/cms-oss-doc/src/main/source/aloha_gcn_alohapagelink.textile +++ b/cms-oss-doc/src/main/source/aloha_gcn_alohapagelink.textile @@ -138,6 +138,8 @@ WARNING: Do not overwrite the "anchorLinks setting":http://www.alohaeditor.org/g h3. Aloha Page Link Language set +_Starting from CMS 6.3, the language support in Aloha Page links is already built-in and needs no additional changes. As this change cannot be applied to the older CMS installations, below are the instructions for those to achieve this functionality._ + A special part-type may be defined, which will be used by Aloha to add language to link tags. NOTE: For external links the user can choose the language in the link sidebar menu. For internal links, the language of the page will be used instead. From 932ed55b03658d27337b9a8404a9dce2e9d11042 Mon Sep 17 00:00:00 2001 From: Serhii Plyhun Date: Fri, 21 Mar 2025 13:32:16 +0100 Subject: [PATCH 3/7] Use internal language form the hreflang automatically --- cms-aloha-plugins/src/main/js/gcn/lib/gcn-links.js | 3 ++- .../aloha-link-target-renderer.component.ts | 1 + cms-ui/libs/aloha-models/src/lib/components/link-target.ts | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cms-aloha-plugins/src/main/js/gcn/lib/gcn-links.js b/cms-aloha-plugins/src/main/js/gcn/lib/gcn-links.js index a1273e18b..f304084d1 100644 --- a/cms-aloha-plugins/src/main/js/gcn/lib/gcn-links.js +++ b/cms-aloha-plugins/src/main/js/gcn/lib/gcn-links.js @@ -17,6 +17,7 @@ * @prop {string=} internalTargetLabel The label/name to where the internal link is referring to * @prop {number=} internalTargetId The ID of the target element * @prop {string=} internalTargetType The type of the target element + * @prop {string=} internalTargetLang The language of the target element, if available * @prop {number=} internalTargetNodeId In which Node the target element resides in */ /** @@ -291,7 +292,7 @@ define('gcn/gcn-links', [ element.setAttribute(ATTR_URL, data.url.href); element.setAttribute(ATTR_HREF, link); element.setAttribute(ATTR_ANCHOR, data.url.anchor); - element.setAttribute(ATTR_HREF_LANG, data.lang); + element.setAttribute(ATTR_HREF_LANG, data.lang || data.url.internalTargetLang); }; /** diff --git a/cms-ui/apps/editor-ui/src/app/content-frame/components/aloha-link-target-renderer/aloha-link-target-renderer.component.ts b/cms-ui/apps/editor-ui/src/app/content-frame/components/aloha-link-target-renderer/aloha-link-target-renderer.component.ts index b7fb0ebae..c24fd90e1 100644 --- a/cms-ui/apps/editor-ui/src/app/content-frame/components/aloha-link-target-renderer/aloha-link-target-renderer.component.ts +++ b/cms-ui/apps/editor-ui/src/app/content-frame/components/aloha-link-target-renderer/aloha-link-target-renderer.component.ts @@ -111,6 +111,7 @@ export class AlohaLinkTargetRendererComponent internalTargetLabel: pickedItem?.name || '', internalTargetId: pickedItem?.id, internalTargetType: pickedItem?.type, + internalTargetLang: (pickedItem as any)?.language || '', internalTargetNodeId: (pickedItem as any)?.nodeId, }); }); diff --git a/cms-ui/libs/aloha-models/src/lib/components/link-target.ts b/cms-ui/libs/aloha-models/src/lib/components/link-target.ts index e9d58be0a..585d31e60 100644 --- a/cms-ui/libs/aloha-models/src/lib/components/link-target.ts +++ b/cms-ui/libs/aloha-models/src/lib/components/link-target.ts @@ -5,6 +5,7 @@ export interface ExtendedLinkTarget extends LinkTarget { internalTargetLabel?: string; internalTargetId?: number; internalTargetType?: string; + internalTargetLang?: string; internalTargetNodeId?: number; } From 31f3af46906b70598a62358ba0d0fecc95ffd02d Mon Sep 17 00:00:00 2001 From: "Serhii Plyhun (commercial)" Date: Fri, 21 Mar 2025 13:39:13 +0100 Subject: [PATCH 4/7] Update gtx_alohalink.js --- .../handlebars/helpers/gtx_alohalink.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js b/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js index 8bbb1dd2c..57c768bd7 100644 --- a/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js +++ b/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js @@ -14,11 +14,10 @@ function gtx_alohalink(tag, renderMode, options) { } else { ctx['target'] = ' target="_blank" rel="noopener noreferrer"' } - } if (parts.language.text) { - ctx['language'] = ' hreflang="' + parts.language.text + '"'; - } + ctx['language'] = ' hreflang="' + parts.language.text + '"'; + } if (parts.title.text) { ctx['title'] = ' title="' + encodeURIComponent(parts.title.text) + '"'; } @@ -31,7 +30,9 @@ function gtx_alohalink(tag, renderMode, options) { let href = ''; if (url.target && url.target.id) { - ctx['language'] = ' hreflang="' + url.language.code + '"' + if (url.language && url.language.code) { + ctx['language'] = ' hreflang="' + url.language.code + '"'; + } ctx['data'] = ' data-gentics-aloha-repository="com.gentics.aloha.GCN.Page" data-gentics-aloha-object-id="10007.' + url.target.id + '" data-gentics-aloha-object-online="' + url.target.online + '"'; href = url.target.url; } else { @@ -76,4 +77,4 @@ function gtx_alohalink(tag, renderMode, options) { ctx['href'] = href.trim(); return options.fn(ctx); -} \ No newline at end of file +} From 5ddcbbe74e3fad4c4adc844a5b392ebfa7ee20e6 Mon Sep 17 00:00:00 2001 From: "Serhii Plyhun (commercial)" Date: Wed, 26 Mar 2025 16:35:52 +0100 Subject: [PATCH 5/7] Update gentics_structure.json --- .../constructs/gtxalohapagelink/gentics_structure.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/gentics_structure.json b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/gentics_structure.json index 01e586ab0..7c469e92c 100644 --- a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/gentics_structure.json +++ b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/gentics_structure.json @@ -159,7 +159,7 @@ "en" : "Language" }, "keyword" : "language", - "editable" : false, + "editable" : true, "typeId" : 1, "order" : 10, "mlId" : 0, @@ -178,4 +178,4 @@ }, "sortOrder" : 1 } -} \ No newline at end of file +} From f66a065f137d1c5cb092b920a6eb3c61551f891d Mon Sep 17 00:00:00 2001 From: "Serhii Plyhun (commercial)" Date: Wed, 26 Mar 2025 16:36:28 +0100 Subject: [PATCH 6/7] Update part.handlebars.hbs --- .../constructs/gtxalohapagelink/part.handlebars.hbs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.handlebars.hbs b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.handlebars.hbs index 061464e73..09f762d8d 100644 --- a/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.handlebars.hbs +++ b/cms-core/src/main/resources/packages/DefaultElements/constructs/gtxalohapagelink/part.handlebars.hbs @@ -1,3 +1,3 @@ {{#gtx_alohalink cms.tag cms.rendermode ~}} -{{cms.tag.parts.text.text}} -{{~/gtx_alohalink}} \ No newline at end of file +{{cms.tag.parts.text.text}} +{{~/gtx_alohalink}} From 39c38a26282889888f4872bee257b09037c89bce Mon Sep 17 00:00:00 2001 From: Serhii Plyhun Date: Thu, 27 Mar 2025 12:11:10 +0100 Subject: [PATCH 7/7] CR fixes --- .../handlebars/helpers/gtx_alohalink.js | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js b/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js index 57c768bd7..ef81d9985 100644 --- a/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js +++ b/cms-core/src/main/resources/packages/DefaultElements/handlebars/helpers/gtx_alohalink.js @@ -19,7 +19,19 @@ function gtx_alohalink(tag, renderMode, options) { ctx['language'] = ' hreflang="' + parts.language.text + '"'; } if (parts.title.text) { - ctx['title'] = ' title="' + encodeURIComponent(parts.title.text) + '"'; + ctx['title'] = ' title="' + + parts.title.text + .replaceAll(/([\s]+)/, ' ') + .replaceAll('&', '&') + .replaceAll('"', '"') + .replaceAll('\'', ''') + .replaceAll('<', '<') + .replaceAll('>', '>') + .replaceAll('\\', '\') + .replaceAll(':', '&col;') + .replaceAll('(', '(') + .replaceAll(')', ')') + + '"'; } if (parts.class.text) { @@ -30,13 +42,14 @@ function gtx_alohalink(tag, renderMode, options) { let href = ''; if (url.target && url.target.id) { - if (url.language && url.language.code) { - ctx['language'] = ' hreflang="' + url.language.code + '"'; + // Set the language only then, if no language has been saved yet. + if (!parts.language.text && url.target.language && url.target.language.code) { + ctx['language'] = ' hreflang="' + url.target.language.code + '"'; } ctx['data'] = ' data-gentics-aloha-repository="com.gentics.aloha.GCN.Page" data-gentics-aloha-object-id="10007.' + url.target.id + '" data-gentics-aloha-object-online="' + url.target.online + '"'; href = url.target.url; } else { - if (!/^https?:\/\/$/.test(url.externalurl)) { + if (/^(https|http):\/\/(.*)$/.test(url.externalurl)) { ctx['data'] = ' data-gentics-gcn-url="' + encodeURIComponent(url.externalurl) + '"'; href = url.externalurl; }