Changes for page Material Collection
Last modified by Judith Steinfeld on 2025/06/03 11:13
From version 108.1
edited by Judith Steinfeld
on 2025/06/03 11:13
on 2025/06/03 11:13
Change comment:
There is no comment for this version
To version 106.1
edited by Judith Steinfeld
on 2025/05/15 11:48
on 2025/05/15 11:48
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 0 added, 1 removed)
-
Objects (0 modified, 1 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -8,7 +8,7 @@ 8 8 {{displayIcon name="world"/}} [[LHC Masterclasses (Netzwerk Teilchenwelt)>>https://www.teilchenwelt.de/angebote/neue-links-zu-materialien/]] 9 9 {{/box}} 10 10 11 -== Learning and Teaching Materials for ErUM-Data-Scientists == 11 +== Learning and Teaching Materials for ErUM-Data-Scientists [[{{icon name="question-circle"}}{{/icon}}>>attach:material_collection_final.mp4]] == 12 12 13 13 Are you an ErUM-Data-Scientist looking to expand your digital skills or do you want to support (young/prospective) ErUM-Scientists in pursuing digital transformation? With our material collection we want to provide an overview of existing materials and contacts by outlining where to find what. 14 14 ... ... @@ -27,10 +27,7 @@ 27 27 'link': {"type": "hidden"}, 28 28 'date': {"html": true}, 29 29 'author': {}, 30 - "tags": {"sortable": false, "filterable": false, "html": true, "headerClass": "tagsCol", "aux": [ 31 - ["Type", "lecture", "exercise", "hands-on", "solution", "tutorial", "talk", "course", "video", "paper"], 32 - ["Tags", true] 33 - ]}, 30 + "tags": {"sortable": false, "filterable": false, "html": true, "headerClass": "tagsCol"}, 34 34 "_actions": {"actions": ["view", "edit"]} 35 35 }) 36 36 #set ($options = {
- Radio_calibration_Alex_17082023.pdf
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.AlexReuzki - Size
-
... ... @@ -1,1 +1,0 @@ 1 -2.4 MB - Content
- XWiki.JavaScriptExtension[0]
-
- Caching policy
-
... ... @@ -1,0 +1,1 @@ 1 +default - Code
-
... ... @@ -1,0 +1,101 @@ 1 +const tabName = "materials"; 2 +const tagCols = [ 3 + ["Type", "lecture", "exercise", "hands-on", "solution", "tutorial", "talk", "course", "video", "paper"], 4 + ["Tags", true], 5 +] 6 + 7 +document.observe('xwiki:livetable:loading', () => { 8 + const mats = document.getElementById(tabName); 9 + 10 + // coulmn data sources 11 + const conf = JSON.parse(mats.dataset.settings); 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 + mats.dataset.settings = JSON.stringify(conf); 23 + 24 + // column headers 25 + mats.querySelectorAll(".xwiki-livetable-display-header .tagsCol").forEach( 26 + (v, i) => v.textContent = tagCols[i][0] 27 + ); 28 + 29 + // handle clicks for tags 30 + document.getElementById(`${tabName}-display`).addEventListener("click", ev => { 31 + if (ev.button) return; // only left click 32 + if (ev.target.nodeName !== "SPAN") return; 33 + if (!ev.target.classList.contains("ltTag")) return; 34 + const tag = ev.target.textContent; 35 + ev.preventDefault(); 36 + const lt = mats.__liveTable; 37 + const st = lt.tagCloud.selectedTags; 38 + if (tag in st) delete st[tag]; 39 + else st[tag] = {}; 40 + lt.tags = Object.keys(st); 41 + lt.clearCache(); 42 + lt.showRows(1, lt.limit); 43 + }) 44 +}); 45 + 46 +document.observe(`xwiki:livetable:${tabName}:receivedEntries`, ({memo: {data}}) => { 47 + for (const row of data.rows) { 48 + const ol = new DOMParser().parseFromString(row.doc_location, "text/xml").documentElement; 49 + const li = ol.children; 50 + 51 + switch (li[0].textContent) { 52 + case "MoccaCalendar": 53 + li[1].remove(); // the sub calendar 54 + case "Material collection": 55 + li[0].remove(); // the "app" 56 + } 57 + for (let i = 1; i < li.length - 1; i++) // intermediate 58 + li[i].textContent = li[i].textContent; // remove link 59 + 60 + const a = li[li.length - 1].children[0]; 61 + const b = a.ownerDocument.createElement("b"); 62 + a.replaceWith(b); 63 + b.appendChild(a); 64 + a.textContent = row.doc_title; 65 + 66 + const u = new URL(row.link_value); 67 + let icon; 68 + if (u.hostname.includes("github")) icon = "github"; 69 + if (u.hostname.includes("github.io")) icon = "book"; 70 + if (u.hostname.includes("gitlab")) icon = "gitlab"; 71 + if (u.hostname.includes("google")) icon = "google"; 72 + if (u.hostname.includes("colab")) icon = "code"; 73 + if (u.hostname.includes("youtube")) icon = "youtube-play"; 74 + if (u.pathname.endsWith(".pdf")) icon = "file-pdf-o"; 75 + if (u.pathname.endsWith(".pptx")) icon = "file-powerpoint-o"; 76 + if (icon) { 77 + const s = a.ownerDocument.createElement("span"); 78 + s.appendChild(a.ownerDocument.createElement("wbr")); 79 + s.setAttribute("class", `fa fa-${icon}`); 80 + s.setAttribute("style", "padding-right: .3em;"); 81 + a.insertBefore(s, a.firstChild); 82 + } 83 + a.setAttribute("class", "wikiexternallink"); 84 + a.setAttribute("href", u.href); 85 + 86 + row.doc_location = ol.outerHTML; 87 + 88 + // tags 89 + const tags = new Set(row.tags_value.slice(1, -1).split(", ")); 90 + tagCols.forEach(([name, ...want], i) => 91 + row[`tags-${i}`] = ( 92 + want[0] === true 93 + ? Array.from(tags) 94 + : want.filter(tag => tags.delete(tag)) 95 + ).sort().map(tag => `<span class="ltTag" style="cursor:pointer;white-space:nowrap;">${tag}</span>`).join(", ") 96 + ); 97 + } 98 +}); 99 + 100 + 101 + - Name
-
... ... @@ -1,0 +1,1 @@ 1 +Live Table - Materials - Parse content
-
... ... @@ -1,0 +1,1 @@ 1 +No - Use this extension
-
... ... @@ -1,0 +1,1 @@ 1 +currentPage