Changes for page Home
Last modified by Benjamin Fischer on 2025/06/04 14:20
From version 112.6
edited by Benjamin Fischer
on 2025/05/15 13:20
on 2025/05/15 13:20
Change comment:
There is no comment for this version
To version 113.1
edited by Benjamin Fischer
on 2025/06/04 14:07
on 2025/06/04 14:07
Change comment:
Upload new image "BMFTR_en_DTP_CMYK_gef_durch.jpg", version 1.1
Summary
-
Attachments (0 modified, 1 added, 0 removed)
-
Objects (0 modified, 0 added, 1 removed)
Details
- BMFTR_en_DTP_CMYK_gef_durch.jpg
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.fischer - Size
-
... ... @@ -1,0 +1,1 @@ 1 +69.6 KB - Content
- XWiki.JavaScriptExtension[1]
-
- Caching policy
-
... ... @@ -1,1 +1,0 @@ 1 -default - Code
-
... ... @@ -1,79 +1,0 @@ 1 -define("xwiki-custom-livetable", [], function () { 2 - const func = (tabName, rowFunc, colTT = {}) => { 3 - let tagCols; 4 - 5 - document.observe('xwiki:livetable:loading', () => { 6 - const tab = document.getElementById(tabName); 7 - if (!tab) return; 8 - 9 - // coulmn data sources 10 - const conf = JSON.parse(tab.dataset.settings); 11 - tagCols = (conf.columnDescriptors.tags ?? { aux: [] }).aux ?? [["Tags", true]]; 12 - tagCols.forEach(([name], i) => { 13 - const cn = `tags-${i}`; 14 - conf.columns.splice(conf.columns.indexOf("tags"), 1, cn); 15 - conf.columnDescriptors[cn] = { 16 - displayName: name, 17 - headerClass: "tagsCol", 18 - html: true, 19 - sortable: false, 20 - }; 21 - }); 22 - tab.dataset.settings = JSON.stringify(conf); 23 - 24 - // column headers 25 - tab.querySelectorAll(".xwiki-livetable-display-header .tagsCol").forEach( 26 - (v, i) => v.textContent = tagCols[i][0] 27 - ); 28 - 29 - // column tooltips 30 - tab.querySelectorAll(".xwiki-livetable-display-header-text").forEach( 31 - el => { 32 - const t = el.textContent.trim(); 33 - const c = conf.columnDescriptors[t].tooltip ?? colTT[t]; 34 - if (c) { 35 - el.title = t; 36 - el.dataset.content = c; 37 - el.dataset.toggle = "popover"; 38 - el.dataset.placement = "top"; 39 - } 40 - } 41 - ) 42 - 43 - // handle clicks for tags 44 - document.getElementById(`${tabName}-display`).addEventListener("click", ev => { 45 - if (ev.button) return; // only left click 46 - if (ev.target.nodeName !== "SPAN") return; 47 - if (!ev.target.classList.contains("ltTag")) return; 48 - const tag = ev.target.textContent; 49 - ev.preventDefault(); 50 - const lt = tab.__liveTable; 51 - const st = lt.tagCloud.selectedTags; 52 - if (tag in st) delete st[tag]; 53 - else st[tag] = {}; 54 - lt.tags = Object.keys(st); 55 - lt.clearCache(); 56 - lt.showRows(1, lt.limit); 57 - }) 58 - }); 59 - 60 - document.observe(`xwiki:livetable:${tabName}:receivedEntries`, ({ memo: { data } }) => { 61 - for (const row of data.rows) { 62 - if (rowFunc) rowFunc(row) 63 - 64 - // tags 65 - const tags = new Set(row.tags_value.slice(1, -1).split(", ")); 66 - tagCols.forEach(([name, ...want], i) => 67 - row[`tags-${i}`] = ( 68 - want[0] === true 69 - ? Array.from(tags) 70 - : want.filter(tag => tags.delete(tag)) 71 - ).sort().map(tag => `<span class="ltTag" style="cursor:pointer;">${tag}</span>`).join(", ") 72 - ); 73 - } 74 - }); 75 - }; 76 - 77 - func.func = func; 78 - return func; 79 -}); - Name
-
... ... @@ -1,1 +1,0 @@ 1 -Livetable - Common Stuff - Parse content
-
... ... @@ -1,1 +1,0 @@ 1 -No - Use this extension
-
... ... @@ -1,1 +1,0 @@ 1 -always