Änderungen von Dokument RecentlyUpdated

Zuletzt geändert von xwikiadmin am 2024/06/24 14:35

Von Version 1.1
bearbeitet von xwikiadmin
am 2023/04/25 10:54
Änderungskommentar: Install extension [com.xwiki.pro:xwiki-pro-macros/1.7.1]
Auf Version 3.1
bearbeitet von xwikiadmin
am 2023/10/26 09:38
Änderungskommentar: Install extension [com.xwiki.pro:xwiki-pro-macros/1.12]

Zusammenfassung

Details

XWiki.JavaScriptExtension[0]
Code
... ... @@ -4,67 +4,71 @@
4 4  #[[
5 5  
6 6  require(['jquery'], $ => {
7 - $(() => {
8 - const MACRO_SERVICE_URL = new XWiki.Document(
9 - XWiki.Model.resolve('Confluence.Macros.RecentlyUpdatedService', XWiki.EntityType.DOCUMENT)
10 - ).getURL('get');
7 + const MACRO_SERVICE_URL = new XWiki.Document(
8 + XWiki.Model.resolve('Confluence.Macros.RecentlyUpdatedService', XWiki.EntityType.DOCUMENT)
9 + ).getURL('get');
11 11  
12 - const $macros = $('.recently-updated-macro');
13 -
14 - /*
15 - * Query new results and append them to the page
16 - */
17 - const fetchMoreResultsHTML = function ($macro) {
18 - const urlParams = [
19 - 'xpage=plain',
20 - 'outputSyntax=plain',
21 - 'macroOptions=' + encodeURIComponent($macro.data('options')),
22 - ].join('&');
23 - const url = MACRO_SERVICE_URL + '?' + urlParams;
24 - fetch(url)
25 - .then(function (response) {
26 - if (!response.ok) {
27 - throw new Error('An error occured fetching new results.');
28 - }
29 - return response.text();
30 - })
31 - .then(function (html) {
32 - // Append html results directly to the page
33 - $macro.find('ul.results').append(html);
34 - handleMetadata($macro);
35 - });
11 + /*
12 + * Query new results and append them to the page
13 + */
14 + function showMore(event) {
15 + const macro = event.target.closest('.recently-updated-macro');
16 + if (!macro) {
17 + console.log("Failed to show more");
18 + return;
36 36   }
37 37  
38 - /*
39 - * Store fetched metadata for next result fetch
40 - * Update fetch button according to whether there are more results to fetch
41 - */
42 - const handleMetadata = function ($macro) {
43 - const $dataElement = $macro.find('.recently-updated-options');
44 - if ($dataElement.length === 0) {
45 - console.warn('No options were found when fetching new results')
46 - } else {
47 - $macro.data('options', $dataElement.attr('data-options'))
48 - const hasNext = JSON.parse($dataElement.attr('data-has-next'));
49 - if (!hasNext) {
50 - $macro.find('button.show-more')
51 - .replaceWith('<div class="no-more-results">' + l10n['noMoreResults'] + '</div>')
21 + const urlParams = [
22 + 'xpage=plain',
23 + 'outputSyntax=plain',
24 + 'fromAjax=true',
25 + 'macroOptions=' + encodeURIComponent(macro.dataset.options),
26 + ].join('&');
27 + const url = MACRO_SERVICE_URL + '?' + urlParams;
28 + fetch(url)
29 + .then(function (response) {
30 + if (!response.ok) {
31 + throw new Error('An error occured fetching new results.');
32 + }
33 + return response.text();
34 + })
35 + .then(function (html) {
36 + // Append html results directly to the page
37 + $(macro.querySelector('ul.results')).append(html);
38 + handleMetadata(macro);
39 + });
40 + }
41 +
42 + /*
43 + * Store fetched metadata for next result fetch
44 + * Update fetch button according to whether there are more results to fetch
45 + */
46 + function handleMetadata(macro) {
47 + const dataElement = macro.querySelector('.recently-updated-options');
48 + if (dataElement) {
49 + macro.dataset.options = dataElement.dataset.options;
50 + const btn = macro.querySelector('button.show-more');
51 + if (btn) {
52 + if (dataElement.dataset.hasNext !== "true") {
53 + $(btn).replaceWith('<div class="no-more-results">' + l10n['noMoreResults'] + '</div>');
54 + } else {
55 + btn.addEventListener('click', showMore);
52 52   }
53 - $dataElement.remove();
54 54   }
55 - };
58 + dataElement.remove();
59 + }
60 + }
56 56  
57 - // Init
58 - $macros.each(function (i, macro) {
59 - handleMetadata($(macro));
60 - });
62 + function init() {
63 + for (const macro of document.querySelectorAll('.recently-updated-macro')) {
64 + handleMetadata(macro);
65 + }
66 + }
61 61  
62 - // Fetch new results
63 - $macros.find('button.show-more').click(function (event) {
64 - const $macro = $(event.target).closest('.recently-updated-macro');
65 - fetchMoreResultsHTML($macro);
66 - })
67 - })
68 + $(() => {
69 + $(document).on('xwiki:dom:updated', init);
70 + init();
71 + });
68 68  });
69 69  
70 70  ]]#
XWiki.StyleSheetExtension[0]
Code
... ... @@ -30,7 +30,7 @@
30 30   grid-area: metadata;
31 31   .text-muted-smaller();
32 32  
33 - .result-last-author-avatar img.avatar {
33 + .result-last-author-avatar img {
34 34   display: inline-block;
35 35   width: 1em;
36 36   height: 1em;
... ... @@ -58,7 +58,7 @@
58 58   column-gap: 0.6rem;
59 59  
60 60   &.collapsed {
61 - .result-last-author-avatar img.avatar {
61 + .result-last-author-avatar img {
62 62   display: none;
63 63   }
64 64  
XWiki.WikiMacroClass[0]
Makro-Code
... ... @@ -18,7 +18,10 @@
18 18   ## (adds extra quotes / spaces at the beginning and end of the string)
19 19   #set ($searchRegex = '(?:^|$|,)\s*([-+]?)')
20 20   #set ($replacement = '" $1"')
21 - #set ($formatted = $!stringtool.replaceAll($serializedList, $searchRegex, $replacement))
21 + #if (!$serializedList)
22 + #set($serializedList = "")
23 + #end
24 + #set ($formatted = $serializedList.replace($searchRegex, $replacement))
22 22   ## Remove extra quotes / spaces at the beginning and end of the string
23 23   #set ($formatted = $!stringtool.substring($formatted, 2, -2))
24 24   ## Return