mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-18 07:44:51 +00:00
6fc5c70ace
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)
76 lines
1.5 KiB
JavaScript
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,"\"\"") + "\"";
|
|
}
|
|
|
|
})();
|