Änderungen von Dokument RecentlyUpdated

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

Von Version 3.1
bearbeitet von xwikiadmin
am 2023/10/26 09:38
Änderungskommentar: Install extension [com.xwiki.pro:xwiki-pro-macros/1.12]
Auf Version 2.1
bearbeitet von xwikiadmin
am 2023/10/26 09:24
Änderungskommentar: Migrated property [type] from class [XWiki.WikiMacroParameterClass]

Zusammenfassung

Details

XWiki.JavaScriptExtension[0]
Code
... ... @@ -4,71 +4,67 @@
4 4  #[[
5 5  
6 6  require(['jquery'], $ => {
7 - const MACRO_SERVICE_URL = new XWiki.Document(
8 - XWiki.Model.resolve('Confluence.Macros.RecentlyUpdatedService', XWiki.EntityType.DOCUMENT)
9 - ).getURL('get');
7 + $(() => {
8 + const MACRO_SERVICE_URL = new XWiki.Document(
9 + XWiki.Model.resolve('Confluence.Macros.RecentlyUpdatedService', XWiki.EntityType.DOCUMENT)
10 + ).getURL('get');
10 10  
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;
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 + });
19 19   }
20 20  
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);
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>')
56 56   }
53 + $dataElement.remove();
57 57   }
58 - dataElement.remove();
59 - }
60 - }
55 + };
61 61  
62 - function init() {
63 - for (const macro of document.querySelectorAll('.recently-updated-macro')) {
64 - handleMetadata(macro);
65 - }
66 - }
57 + // Init
58 + $macros.each(function (i, macro) {
59 + handleMetadata($(macro));
60 + });
67 67  
68 - $(() => {
69 - $(document).on('xwiki:dom:updated', init);
70 - init();
71 - });
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 + })
72 72  });
73 73  
74 74  ]]#
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 {
33 + .result-last-author-avatar img.avatar {
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 {
61 + .result-last-author-avatar img.avatar {
62 62   display: none;
63 63   }
64 64  
XWiki.WikiMacroClass[0]
Makro-Code
... ... @@ -18,10 +18,7 @@
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 - #if (!$serializedList)
22 - #set($serializedList = "")
23 - #end
24 - #set ($formatted = $serializedList.replace($searchRegex, $replacement))
21 + #set ($formatted = $!stringtool.replaceAll($serializedList, $searchRegex, $replacement))
25 25   ## Remove extra quotes / spaces at the beginning and end of the string
26 26   #set ($formatted = $!stringtool.substring($formatted, 2, -2))
27 27   ## Return