From f9af8a896246c7891380a95692735158b521b5d7 Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Wed, 25 Sep 2024 10:17:11 +0200 Subject: [PATCH 01/14] fix(pat contentbrowser): Add width parameter. --- src/pat/contentbrowser/contentbrowser.js | 3 ++- src/pat/contentbrowser/src/App.svelte | 2 ++ src/pat/contentbrowser/src/SelectedItems.svelte | 8 +++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/pat/contentbrowser/contentbrowser.js b/src/pat/contentbrowser/contentbrowser.js index 0954fe867..826151f6a 100644 --- a/src/pat/contentbrowser/contentbrowser.js +++ b/src/pat/contentbrowser/contentbrowser.js @@ -22,6 +22,7 @@ parser.addArgument( "review_state", ], null, true ); +parser.addArgument("width"); parser.addArgument("max-depth"); parser.addArgument("base-path"); parser.addArgument("context-path"); @@ -43,7 +44,7 @@ class Pattern extends BasePattern { async init() { this.el.setAttribute('style', 'display: none'); - // ensure an id on our elemen (TinyMCE doesn't have one) + // ensure an id on our element (TinyMCE doesn't have one) let nodeId = this.el.getAttribute("id"); if (!nodeId) { nodeId = utils.generateId(); diff --git a/src/pat/contentbrowser/src/App.svelte b/src/pat/contentbrowser/src/App.svelte index e90befbc5..51a6c9fe5 100644 --- a/src/pat/contentbrowser/src/App.svelte +++ b/src/pat/contentbrowser/src/App.svelte @@ -14,6 +14,7 @@ } from "./stores"; export let maxDepth; + export let width; export let attributes; export let contextPath; export let vocabularyUrl; @@ -58,6 +59,7 @@ attributes: attributes, contextPath: contextPath, vocabularyUrl: vocabularyUrl, + width: width, maxDepth: maxDepth, basePath: basePath, selectableTypes: selectableTypes, diff --git a/src/pat/contentbrowser/src/SelectedItems.svelte b/src/pat/contentbrowser/src/SelectedItems.svelte index c084da732..fe4765354 100644 --- a/src/pat/contentbrowser/src/SelectedItems.svelte +++ b/src/pat/contentbrowser/src/SelectedItems.svelte @@ -104,7 +104,11 @@ } -
+
{#if $selectedItems} @@ -140,8 +144,6 @@ From d88c73de66f435039bc30fe3e73bd2626cc10fef Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Wed, 25 Sep 2024 10:17:50 +0200 Subject: [PATCH 02/14] maint(build): Update README, move pat-relateditems to deprecated patterns. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15317404d..60d8f28a5 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,6 @@ But to resemble the CSS syntax, new patterns should instead separate each word w - [pat-preventdoublesubmit](src/pat/preventdoublesubmit/README.md): Prevent multiple submissions of the same forn. - [pat-querystring](src/pat/querystring/README.md): Show the querystring selection app. - [pat-recurrence](src/pat/recurrence/README.md): Show the recurrence widget. -- [pat-relateditems](src/pat/relateditems/README.md): Show a widget to select related items. (deprecated: use `pat-contentbrowser` instead) - [pat-select2](src/pat/select2/README.md): Show a widget which enhances dropdown selections with automatic suggestions, search and tagging functionality. - [pat-sortable](src/pat/sortable/README.md): A pattern to make listings sortable. - [pat-structure](src/pat/structure/README.md): Plone's folder contents app. @@ -111,6 +110,7 @@ But to resemble the CSS syntax, new patterns should instead separate each word w Deprecated patterns: +- [pat-relateditems](src/pat/relateditems/README.md) (_deprecated_): Show a widget to select related items. (use `pat-contentbrowser` instead) - [pat-backdrop](src/pat/backdrop/README.md) (_deprecated_): Renders a dark background. - [pat-contentloader](src/pat/contentloader/README.md) (_deprecated_): Load remote or local content into a target. - [pat-texteditor](src/pat/texteditor/README.md) (_deprecated_): Show a code editor. From 85f2dc627249ede983fe28084c71b2d6da1fe505 Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Wed, 25 Sep 2024 11:03:57 +0200 Subject: [PATCH 03/14] fix(pat contentbrowser): Skip multiselection when "maximumSelectionSize" is 1 --- .../contentbrowser/src/ContentBrowser.svelte | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/pat/contentbrowser/src/ContentBrowser.svelte b/src/pat/contentbrowser/src/ContentBrowser.svelte index f22f11412..a3e3264fa 100644 --- a/src/pat/contentbrowser/src/ContentBrowser.svelte +++ b/src/pat/contentbrowser/src/ContentBrowser.svelte @@ -117,7 +117,7 @@ const levelWrapper = e.currentTarget.closest(".levelItems"); const prevSelection = levelWrapper.querySelectorAll(".selectedItem"); - if (prevSelection.length) { + if (prevSelection.length && $config.maximumSelectionSize != 1) { // check for pressed shift or ctrl/meta key for multiselection if (shiftKey || e?.shiftKey) { @@ -143,7 +143,7 @@ action: select ? "add" : "remove", }); } - } else if (e?.metaKey || e?.ctrlKey) { + } else if (e?.metaKey || e?.ctrlKey) { // de/select multiple single items // NOTE: only for mouse click event updatePreview({ @@ -155,12 +155,11 @@ [...prevSelection].map((el) => el.classList.remove("selectedItem")); changePath(item, e); } - } else { changePath(item, e); } - e.currentTarget.focus(); // needed for keyboard navigation + e.currentTarget.focus(); // needed for keyboard navigation e.currentTarget.classList.add("selectedItem"); } @@ -170,10 +169,10 @@ return; } const possibleFocusEls = [ - ...document.querySelectorAll(".levelColumn .inPath"), // previously selected folder - ...document.querySelectorAll(".levelColumn .selectedItem"), // previously selected item - document.querySelector(".levelColumn .contentItem"), // default first item - ] + ...document.querySelectorAll(".levelColumn .inPath"), // previously selected folder + ...document.querySelectorAll(".levelColumn .selectedItem"), // previously selected item + document.querySelector(".levelColumn .contentItem"), // default first item + ]; if (possibleFocusEls.length) { keyboardNavInitialized = true; possibleFocusEls[0].focus(); @@ -220,14 +219,23 @@ } if (e.key == "Enter") { if (isSelectable(item)) { - addSelectedItems(item); + if ($config.maximumSelectionSize == 1) { + addItem(item); + } else { + addSelectedItems(); + } } } } async function addItem(item) { - selectedItems.update((n) => [...n, item]); - selectedUids.update(() => $selectedItems.map((x) => x.UID)); + if ($config.maximumSelectionSize == 1) { + selectedItems.set([item]); + selectedUids.set([item.UID]); + } else { + selectedItems.update((n) => [...n, item]); + selectedUids.update(() => $selectedItems.map((x) => x.UID)); + } updatePreview({ action: "clear" }); $showContentBrowser = false; keyboardNavInitialized = false; @@ -325,7 +333,10 @@