TiddlyWiki5/core/modules/macros/csvtiddlers.js
2026-02-19 12:45:27 +00:00

64 lines
1.4 KiB
JavaScript

/*\
title: $:/core/modules/macros/csvtiddlers.js
type: application/javascript
module-type: macro
\*/
"use strict";
exports.name = "csvtiddlers";
exports.params = [
{name: "filter"},
{name: "format"},
];
exports.run = function(filter,format) {
var self = this,
tiddlers = this.wiki.filterTiddlers(filter),
tiddler,
fields = [],
t,f;
// Collect all the fields
for(t=0;t<tiddlers.length; t++) {
tiddler = this.wiki.getTiddler(tiddlers[t]);
if(tiddler) {
for(f in tiddler.fields) {
if(fields.indexOf(f) === -1) {
fields.push(f);
}
}
}
}
fields.sort();
"title text modified modifier created creator".split(" ").reverse().forEach(function(value,index) {
var p = fields.indexOf(value);
if(p !== -1) {
fields.splice(p,1);
fields.unshift(value)
}
});
// Output the column headings
var output = [], row = [];
fields.forEach(function(value) {
row.push(quoteAndEscape(value))
});
output.push(row.join(","));
// Output each tiddler
for(var t=0;t<tiddlers.length; t++) {
row = [];
tiddler = this.wiki.getTiddler(tiddlers[t]);
if(tiddler) {
for(f=0; f<fields.length; f++) {
row.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || "" : ""));
}
}
output.push(row.join(","));
}
return output.join("\n");
};
function quoteAndEscape(value) {
return "\"" + value.replace(/"/mg,"\"\"") + "\"";
}