From 6fc5c70ace43219710983f6d9640f4b01d620908 Mon Sep 17 00:00:00 2001 From: Jermolene Date: Mon, 10 Nov 2014 20:59:15 +0000 Subject: [PATCH] First pass at export button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- core/language/en-GB/Buttons.multids | 6 ++ core/modules/macros/csvtiddlers.js | 75 ++++++++++++++++++++++ core/modules/macros/jsontiddlers.js | 44 +++++++++++++ core/templates/exporters/CsvFile.tid | 9 +++ core/templates/exporters/JsonFile.tid | 9 +++ core/templates/exporters/Static.tid | 33 ++++++++++ core/templates/exporters/StaticContent.tid | 8 +++ core/templates/exporters/TidFile.tid | 9 +++ core/ui/AdvancedSearch/Filter.tid | 14 +++- core/ui/PageControls/export-page.tid | 6 ++ core/ui/ViewToolbar/export-tiddler.tid | 9 +++ core/wiki/macros/export.tid | 26 ++++++++ core/wiki/tags/PageControls.tid | 2 +- core/wiki/tags/ViewToolbar.tid | 2 +- 14 files changed, 249 insertions(+), 3 deletions(-) create mode 100644 core/modules/macros/csvtiddlers.js create mode 100644 core/modules/macros/jsontiddlers.js create mode 100644 core/templates/exporters/CsvFile.tid create mode 100644 core/templates/exporters/JsonFile.tid create mode 100644 core/templates/exporters/Static.tid create mode 100644 core/templates/exporters/StaticContent.tid create mode 100644 core/templates/exporters/TidFile.tid create mode 100644 core/ui/PageControls/export-page.tid create mode 100644 core/ui/ViewToolbar/export-tiddler.tid create mode 100644 core/wiki/macros/export.tid diff --git a/core/language/en-GB/Buttons.multids b/core/language/en-GB/Buttons.multids index 2888f4768..cd37e963f 100644 --- a/core/language/en-GB/Buttons.multids +++ b/core/language/en-GB/Buttons.multids @@ -24,6 +24,12 @@ Encryption/ClearPassword/Caption: clear password Encryption/ClearPassword/Hint: Clear the password and save this wiki without encryption Encryption/SetPassword/Caption: set password Encryption/SetPassword/Hint: Set a password for saving this wiki with encryption +ExportPage/Caption: export all +ExportPage/Hint: Export all tiddlers +ExportTiddler/Caption: export tiddler +ExportTiddler/Hint: Export tiddler +ExportTiddlers/Caption: export tiddlers +ExportTiddlers/Hint: Export tiddlers FullScreen/Caption: full-screen FullScreen/Hint: Enter or leave full-screen mode Import/Caption: import diff --git a/core/modules/macros/csvtiddlers.js b/core/modules/macros/csvtiddlers.js new file mode 100644 index 000000000..7b34ce04d --- /dev/null +++ b/core/modules/macros/csvtiddlers.js @@ -0,0 +1,75 @@ +/*\ +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>/> +\end +<> diff --git a/core/templates/exporters/JsonFile.tid b/core/templates/exporters/JsonFile.tid new file mode 100644 index 000000000..08fd98638 --- /dev/null +++ b/core/templates/exporters/JsonFile.tid @@ -0,0 +1,9 @@ +title: $:/core/templates/exporters/JsonFile +tags: $:/tags/Exporter +description: JSON tiddlers file +filename: tiddlers.json + +\define renderContent() +<$text text=<>/> +\end +<> diff --git a/core/templates/exporters/Static.tid b/core/templates/exporters/Static.tid new file mode 100644 index 000000000..5861837a9 --- /dev/null +++ b/core/templates/exporters/Static.tid @@ -0,0 +1,33 @@ +title: $:/core/templates/exporters/Static +tags: $:/tags/Exporter +description: Tiddlers as static HTML +filename: static.tiddlers.html + +\define tv-wikilink-template() #$uri_encoded$ +\define tv-config-toolbar-icons() no +\define tv-config-toolbar-text() no +\define tv-config-toolbar-class() tc-btn-invisible +\rules only filteredtranscludeinline transcludeinline + + + + + + + + +{{$:/core/wiki/title}} +
+{{$:/boot/boot.css||$:/core/templates/css-tiddler}} +
+ + + +{{$:/StaticBanner||$:/core/templates/html-tiddler}} +
+{{$:/core/templates/exporters/Static/Content||$:/core/templates/html-tiddler}} +
+ + diff --git a/core/templates/exporters/StaticContent.tid b/core/templates/exporters/StaticContent.tid new file mode 100644 index 000000000..af5a8f846 --- /dev/null +++ b/core/templates/exporters/StaticContent.tid @@ -0,0 +1,8 @@ +title: $:/core/templates/exporters/Static/Content + +\define renderContent() +{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}} +\end +<$importvariables filter="[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]"> +<> + diff --git a/core/templates/exporters/TidFile.tid b/core/templates/exporters/TidFile.tid new file mode 100644 index 000000000..86ac0fd7f --- /dev/null +++ b/core/templates/exporters/TidFile.tid @@ -0,0 +1,9 @@ +title: $:/core/templates/exporters/TidFile +tags: $:/tags/Exporter +description: Plain text .tid tiddler file +filename: tiddler.tid + +\define renderContent() +{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}} +\end +<$importvariables filter="[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]"><> \ No newline at end of file diff --git a/core/ui/AdvancedSearch/Filter.tid b/core/ui/AdvancedSearch/Filter.tid index ca4b2cd80..93179bbaa 100644 --- a/core/ui/AdvancedSearch/Filter.tid +++ b/core/ui/AdvancedSearch/Filter.tid @@ -7,7 +7,19 @@ caption: {{$:/language/Search/Filter/Caption}} <> - +
<$reveal state=<> type="nomatch" text="" default=""> diff --git a/core/ui/PageControls/export-page.tid b/core/ui/PageControls/export-page.tid new file mode 100644 index 000000000..53f06a4bc --- /dev/null +++ b/core/ui/PageControls/export-page.tid @@ -0,0 +1,6 @@ +title: $:/core/ui/Buttons/export-page +tags: $:/tags/PageControls +caption: {{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}} +description: {{$:/language/Buttons/ExportPage/Hint}} + +<$macrocall $name="exportButton" exportFilter="[!is[system]sort[title]]" lingoBase="$:/language/Buttons/ExportPage/"/> diff --git a/core/ui/ViewToolbar/export-tiddler.tid b/core/ui/ViewToolbar/export-tiddler.tid new file mode 100644 index 000000000..445c7931d --- /dev/null +++ b/core/ui/ViewToolbar/export-tiddler.tid @@ -0,0 +1,9 @@ +title: $:/core/ui/Buttons/export-tiddler +tags: $:/tags/ViewToolbar +caption: {{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}} +description: {{$:/language/Buttons/ExportTiddler/Hint}} + +\define makeExportFilter() +[[$(currentTiddler)$]] +\end +<$macrocall $name="exportButton" exportFilter=<> lingoBase="$:/language/Buttons/ExportTiddler/"/> diff --git a/core/wiki/macros/export.tid b/core/wiki/macros/export.tid new file mode 100644 index 000000000..10a32b5a0 --- /dev/null +++ b/core/wiki/macros/export.tid @@ -0,0 +1,26 @@ +title: $:/core/macros/export +tags: $:/tags/Macro + +\define exportButton(exportFilter:"[!is[system]sort[title]]",lingoBase) +<$button popup=<> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<> selectedClass="tc-selected"> +<$list filter="[prefix[yes]]"> +{{$:/core/images/export-button}} + +<$list filter="[prefix[yes]]"> +<$text text={{$lingoBase$Caption}}/> + + +<$reveal state=<> type="popup" position="below" animate="yes"> +
+<$list filter="[all[shadows+tiddlers]tag[$:/tags/Exporter]]"> +<$set name="filename" value={{!!filename}}> +<$button class="tc-btn-invisible"> +<$action-sendmessage $message="tm-download-file" $param=<> exportFilter="""$exportFilter$""" filename=<>/> +<$action-deletetiddler $tiddler=<>/> +<$transclude field="description"/> + + + +
+ +\end diff --git a/core/wiki/tags/PageControls.tid b/core/wiki/tags/PageControls.tid index d26d51f68..d860bf702 100644 --- a/core/wiki/tags/PageControls.tid +++ b/core/wiki/tags/PageControls.tid @@ -1,2 +1,2 @@ title: $:/tags/PageControls -list: [[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]] +list: [[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]] diff --git a/core/wiki/tags/ViewToolbar.tid b/core/wiki/tags/ViewToolbar.tid index aebed7cdd..53a83dc3c 100644 --- a/core/wiki/tags/ViewToolbar.tid +++ b/core/wiki/tags/ViewToolbar.tid @@ -1,2 +1,2 @@ title: $:/tags/ViewToolbar -list: [[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] +list: [[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]]