1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-26 11:37:20 +00:00
TiddlyWiki5/core/modules/macros/csvtiddlers.js
Jermolene 6fc5c70ace First pass at export button
New export button appears as a page control toolbar button, a tiddler
toolbar button, and a button in the advanced search filter tab.

Initially supports exporting as static HTML, CSV, JSON or `.tid` file.

Still to do:

* Made the exporter descriptions translatable
* Hide the export button by default
* User docs
* Cleaning up the existing templates (eg,
`$:/core/templates/alltiddlers.template.html` should work by
transcluding `$:/core/templates/exporters/Static`)
* Docs for the new macros `exportButton`, `csvtiddlers` and
`jsontiddlers`

Issues:

* OS X Numbers refuses to open CSV files that have been generated in
Chrome, because it thinks they’ve been downloaded from the Internet.
Firefox works OK
* The export button won’t work within the tiddler info panel, or from
the *more* popup (this is because we don’t support nested popups)
2014-11-10 20:59:15 +00:00

76 lines
1.5 KiB
JavaScript

/*\
title: $:/core/modules/macros/csvtiddlers.js
type: application/javascript
module-type: macro
Macro to output tiddlers matching a filter to CSV
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Information about this macro
*/
exports.name = "csvtiddlers";
exports.params = [
{name: "filter"},
{name: "format"},
];
/*
Run the macro
*/
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]);
for(f in tiddler.fields) {
if(fields.indexOf(f) === -1) {
fields.push(f);
}
}
}
// Sort the fields and bring the standard ones to the front
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]);
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,"\"\"") + "\"";
}
})();