Changes for page Nice Display
Last modified by Benjamin Fischer on 2025/06/04 11:55
From version 47.1
edited by Benjamin Fischer
on 2025/06/04 11:55
on 2025/06/04 11:55
Change comment:
There is no comment for this version
To version 46.1
edited by Benjamin Fischer
on 2025/05/30 11:12
on 2025/05/30 11:12
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Objects (0 modified, 1 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -11,7 +11,7 @@ 11 11 "content": {"type": "hidden"}, 12 12 "coopDetails": {"type": "hidden"}, 13 13 "coop": {"html": true}, 14 - "Community": {"tooltip": "KAT - Astroparticle Physics<br/>KET - Elementary Particles Physics<br/>KfB - Accelerator Physics<br/>KFN - Research with neutrons<br/>KF S- Research with synchrotron radiation<br/>KFSI - Research with nuclear probes and ion beams<br/>KHuK - Hadron and nuclear physics<br/>RDS - German Observatory Council"},14 + "Community": {"tooltip": "KAT - Astroparticle Physics<br/>KET - Elementary Particles Physics<br/>KfB - Accelerator Physics<br/>KFN - Research with neutrons<br/>KFN - Research with synchrotron radiation<br/>KFSI - Research with nuclear probes and ion beams<br/>KHuK - Hadron and nuclear physics<br/>RDS - German Observatory Council"}, 15 15 "tags": {"sortable": false, "filterable": false, "html": true, "headerClass": "tagsCol", "aux": $ntrg_tagCols}, 16 16 "doc.date": {"filterable": false, "displayName": "Last Updated"}, 17 17 '_actions': {"actions":["view","edit"]}
- XWiki.JavaScriptExtension[0]
-
- Caching policy
-
... ... @@ -1,0 +1,1 @@ 1 +default - Code
-
... ... @@ -1,0 +1,126 @@ 1 +(()=>{ 2 + const tabName = "research_groups"; 3 + const coopDetailsLabel = "Cooperation Details"; 4 + const colTT = { 5 + "Community": [ 6 + "KAT - Astroparticle Physics", 7 + "KET - Elementary Particles Physics", 8 + "KfB - Accelerator Physics", 9 + "KFN - Research with neutrons", 10 + "KFN - Research with synchrotron radiation", 11 + "KFSI - Research with nuclear probes and ion beams", 12 + "KHuK - Hadron and nuclear physics", 13 + "RDS - German Observatory Council" 14 + ].join("<br/>"), 15 + "Cooperation": "...", 16 + }; 17 + let tagCols; 18 + 19 + document.observe('xwiki:livetable:loading', () => { 20 + const mats = document.getElementById(tabName); 21 + if (!mats) return; 22 + 23 + // coulmn data sources 24 + const conf = JSON.parse(mats.dataset.settings); 25 + tagCols = (conf.columnDescriptors.tags ?? {aux: []}).aux ?? [["Tags", true]]; 26 + tagCols.forEach(([name], i) => { 27 + const cn = `tags-${i}`; 28 + conf.columns.splice(conf.columns.indexOf("tags"), 1, cn); 29 + conf.columnDescriptors[cn] = { 30 + displayName: name, 31 + headerClass: "tagsCol", 32 + html: true, 33 + sortable: false, 34 + }; 35 + }); 36 + mats.dataset.settings = JSON.stringify(conf); 37 + 38 + // column headers 39 + mats.querySelectorAll(".xwiki-livetable-display-header .tagsCol").forEach( 40 + (v, i) => v.textContent = tagCols[i][0] 41 + ); 42 + 43 + // column tooltips 44 + mats.querySelectorAll(".xwiki-livetable-display-header-text").forEach( 45 + el => { 46 + const t = el.textContent.trim(); 47 + const c = colTT[t] 48 + if (c) { 49 + el.title = t; 50 + el.dataset.content = c; 51 + el.dataset.toggle = "popover"; 52 + el.dataset.placement = "top"; 53 + } 54 + } 55 + ) 56 + 57 + // handle clicks for tags 58 + document.getElementById(`${tabName}-display`).addEventListener("click", ev => { 59 + if (ev.button) return; // only left click 60 + if (ev.target.nodeName !== "SPAN") return; 61 + if (!ev.target.classList.contains("ltTag")) return; 62 + const tag = ev.target.textContent; 63 + ev.preventDefault(); 64 + const lt = mats.__liveTable; 65 + const st = lt.tagCloud.selectedTags; 66 + if (tag in st) delete st[tag]; 67 + else st[tag] = {}; 68 + lt.tags = Object.keys(st); 69 + lt.clearCache(); 70 + lt.showRows(1, lt.limit); 71 + }) 72 + }); 73 + 74 + document.observe(`xwiki:livetable:${tabName}:receivedEntries`, ({memo: {data}}) => { 75 + for (const row of data.rows) { 76 + const a = new Element("a", { href: row.URL }); 77 + a.innerHTML = row.affiliation_value.split("\n").map((a, i) => i ? a : `<b class="wikiexternallink">${a}</b>`).join("<br/>"); 78 + a.title = row.doc_title; 79 + if (row.content !== "-") { 80 + let c = row.content; 81 + if (row.coopDetails !== "-") 82 + c = `${c}<br/><b>${coopDetailsLabel}:</b> ${row.coopDetails}`; 83 + a.dataset.content = c; 84 + a.dataset.toggle = "popover"; 85 + } 86 + row.affiliation = a.outerHTML; 87 + 88 + row.coop = row.coop.replace(/\b \.\.\. \b/g, " ...<br/>"); 89 + if (row.coopDetails !== "-") { 90 + const d = new Element("div"); 91 + d.innerHTML = row.coop; 92 + d.title = coopDetailsLabel; 93 + d.dataset.content = row.coopDetails; 94 + d.dataset.toggle = "popover"; 95 + row.coop = d.outerHTML; 96 + } 97 + 98 + row.doc_date = row.doc_date.split(" ")[0].split("/").slice(0, 2).join("/"); 99 + 100 + // tags 101 + const tags = new Set(row.tags_value.slice(1, -1).split(", ")); 102 + tagCols.forEach(([name, ...want], i) => 103 + row[`tags-${i}`] = ( 104 + want[0] === true 105 + ? Array.from(tags) 106 + : want.filter(tag => tags.delete(tag)) 107 + ).sort().map(tag => `<span class="ltTag" style="cursor:pointer;">${tag}</span>`).join(", ") 108 + ); 109 + } 110 + }); 111 + 112 + require(['jquery', 'bootstrap'], function($) { 113 + document.styleSheets[0].insertRule(`#mainContentArea .popover {max-width: 50%;}`); 114 + 115 + const ttApply = () => { 116 + $(`#${tabName} [data-toggle="popover"]`).popover({ 117 + html: true, 118 + container: `#mainContentArea`, 119 + trigger: "hover", 120 + }); 121 + }; 122 + 123 + document.observe(`xwiki:livetable:${tabName}:displayComplete`, ttApply); 124 + ttApply(); 125 + }); 126 +})(); - Name
-
... ... @@ -1,0 +1,1 @@ 1 +Nice Table - Research Groups - Parse content
-
... ... @@ -1,0 +1,1 @@ 1 +No - Use this extension
-
... ... @@ -1,0 +1,1 @@ 1 +onDemand