Ä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
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
am 2023/10/26 09:38
Änderungskommentar:
Install extension [com.xwiki.pro:xwiki-pro-macros/1.12]
Zusammenfassung
-
Objekte (3 geändert, 0 hinzugefügt, 0 gelöscht)
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