Thanks Steve, your suggestions are really useful, I try to include them and review my dekiscript code
DekiScript Code
Code:
/* ------------------- CONFIG ----------------------------- */
var template = 'Template:AggregateTables';
var key = 'AggregateTables';
var search = 'path:Wiki/* AND content:'..key;
var fields = [];
/* ---------------------------------------------------- */
var xpath = '//table[normalize-space(tbody/tr/th/button)=\''.. key ..'\']';
if (#fields == 0) {
var page = wiki.page(template);
var tables = xml.list(page,xpath, nil, true);
let fields = xml.list(web.xml(tables[0]),'//tr/td/button',nil,false);
}
var r = wiki.getsearch(search,1000,'title');
var output = "<table border='1' cellpadding='4' cellspacing='0'>";
let output ..= "<tr bgcolor='#dddddd'><td></td>";
foreach (var i in fields) {
let output ..= "<td><strong>" .. i .. "</strong></td>";
}
let output ..= "</tr>";
foreach (var p in r) {
var tables = xml.list(wiki.Page(p.path),"//table[normalize-space(tbody/tr/th/button)='".. key .."']", nil, true);
foreach (var tab in tables) {
let output ..= "<tr>";
let output ..= "<td>" .. web.link(p.uri, "V") .."</td>";
foreach ( var field in fields) {
var row = web.list(tab, "//tr[normalize-space(td/button)='".. field .."']",nil,true);
if ( (string.Length(row[0])) == 0) {
let output ..= "<td></td>";
} else {
var cell = web.text(row[0],"/tr/td[2]",nil,true);
let output ..= "" .. cell .. "";
}
}
let output ..= "</tr>";
}
}
let output ..= "</table>";
web.html(output);
Html-DekiScript code
HTML Code:
<table border="1" cellpadding="4" cellspacing="0" block="
var template = 'Template:AggregateTables';
var fields = [ ];
var key = 'AggregateTables';
var search = 'path:Wiki/* AND content:'..key;
var xpath = '//table[normalize-space(tbody/tr/th/button)=\''.. key ..'\']';
if (#fields == 0) {
var page = wiki.page(template);
var tables = xml.list(page,xpath, nil, true);
let fields = xml.list(web.xml(tables[0]),'//tr/td/button',nil,false);
}
var r = wiki.getsearch(search,1000,'title');
var tables = [ ];
var arr = [ ];
foreach (var p in r) {
let tables = xml.list(wiki.Page(p.path),xpath, nil, true) ;
if (#tables) {
foreach (var tab in tables) {
let arr ..= [[tab,web.link(p.uri, 'V') ]];
}
}
}">
<tbody>
<tr bgcolor="#dddddd">
<td>-</td>
<td foreach="var i in fields"><strong>{{ i }}</strong></td>
</tr>
<tr foreach="var a in arr">
<td>{{web.html(a[1])}}</td>
<td foreach="var field in fields" block="var row = web.list(a[0], '//tr[normalize-space(td/button)=\''.. field ..'\']',nil,true)">{{ #row[0] ? web.text(row[0],"/tr/td[2]",nil,false) : nil }}</td>
</tr>
</tbody>
</table>