Changes for page Helpers

Last modified by Benjamin Fischer on 2025/06/17 11:57

From version 1.9
edited by Benjamin Fischer
on 2025/05/15 16:21
Change comment: There is no comment for this version
To version 1.1
edited by Benjamin Fischer
on 2025/05/15 13:30
Change comment: There is no comment for this version

Summary

Details

XWiki.JavaScriptExtension[0]
Caching policy
... ... @@ -1,1 +1,0 @@
1 -default
Code
... ... @@ -1,85 +1,0 @@
1 -const livetableRowHook = {};
2 -
3 -((() => {
4 - const tagCols = {};
5 -
6 - document.observe('xwiki:livetable:loading', () => {
7 - for (const tab of document.querySelectorAll(".xwiki-livetable")) {
8 - const tableId = tab.id;
9 - if (!tableId) continue;
10 - console.debug("loading", tableId);
11 -
12 - // coulmn data sources
13 - const conf = JSON.parse(tab.dataset.settings);
14 -
15 - tagCols[tableId] = (conf.columnDescriptors.tags ?? { aux: [] }).aux ?? [["Tags", true]];
16 - tagCols[tableId].forEach(([name], i) => {
17 - const cn = `tags-${i}`;
18 - conf.columns.splice(conf.columns.indexOf("tags"), 1, cn);
19 - conf.columnDescriptors[cn] = {
20 - displayName: name,
21 - headerClass: "tagsCol",
22 - html: true,
23 - sortable: false,
24 - };
25 - });
26 - tab.dataset.settings = JSON.stringify(conf);
27 -
28 - // column headers
29 - tab.querySelectorAll(".xwiki-livetable-display-header .tagsCol").forEach(
30 - (v, i) => v.textContent = tagCols[tableId][i][0]
31 - );
32 -
33 - // column tooltips
34 - tab.querySelectorAll(".xwiki-livetable-display-header-text").forEach(
35 - el => {
36 - const t = el.textContent.trim();
37 - const c = conf.columnDescriptors[t]?.tooltip;
38 - if (c) {
39 - el.title = t;
40 - el.dataset.content = c;
41 - el.dataset.toggle = "popover";
42 - el.dataset.placement = "top";
43 - }
44 - }
45 - )
46 -
47 - // handle clicks for tags
48 - tab.getElementsByClassName("xwiki-livetable-display-body")[0].addEventListener("click", ev => {
49 - if (ev.button) return; // only left click
50 - if (ev.target.nodeName !== "SPAN") return;
51 - if (!ev.target.classList.contains("ltTag")) return;
52 - const tag = ev.target.textContent;
53 - ev.preventDefault();
54 - const lt = tab.__liveTable;
55 - const st = lt.tagCloud.selectedTags;
56 - if (tag in st) delete st[tag];
57 - else st[tag] = {};
58 - lt.tags = Object.keys(st);
59 - lt.clearCache();
60 - lt.showRows(1, lt.limit);
61 - });
62 -
63 - }
64 - });
65 -
66 - document.observe("xwiki:livetable:receivedEntries", ({ memo: { data, tableId } }) => {
67 - console.debug("receivedEntries", tableId, data);
68 - const rf = livetableRowHook[tableId];
69 - for (const row of data.rows) {
70 - if (rf) rf(row);
71 -
72 - // tags
73 - const tags = new Set(row.tags_value.slice(1, -1).split(", "));
74 - tagCols[tableId]?.forEach(([name, ...want], i) =>
75 - row[`tags-${i}`] = (
76 - want[0] === true
77 - ? Array.from(tags)
78 - : want.filter(tag => tags.delete(tag))
79 - ).sort().map(tag => `<span class="ltTag" style="cursor:pointer;">${tag}</span>`).join(", ")
80 - );
81 - }
82 - });
83 -
84 -})());
85 -
Name
... ... @@ -1,1 +1,0 @@
1 -Global Helpers
Parse content
... ... @@ -1,1 +1,0 @@
1 -No
Use this extension
... ... @@ -1,1 +1,0 @@
1 -always