From 7f93cea6d0a528dd89218ce36741f8c8154c7159 Mon Sep 17 00:00:00 2001 From: Erwan Moreau Date: Sun, 13 Sep 2015 18:47:55 +0100 Subject: [PATCH 001/242] Create TWCommunitySearch.tid --- .../community/resources/TWCommunitySearch.tid | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 editions/tw5.com/tiddlers/community/resources/TWCommunitySearch.tid diff --git a/editions/tw5.com/tiddlers/community/resources/TWCommunitySearch.tid b/editions/tw5.com/tiddlers/community/resources/TWCommunitySearch.tid new file mode 100644 index 000000000..1a66a8656 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/resources/TWCommunitySearch.tid @@ -0,0 +1,22 @@ +created: 20150913184230499 +modified: 20150913184230499 +tags: Resources +title: TWCommunitySearch +type: text/vnd.tiddlywiki +url: http://erwanm.github.io/tw-community-search + +The ~CommunitySearch wiki aggregates the content of many wikis from the community. It is updated automatically every day. + +It lets you search for some specific content among a preselected list of wikis. The indexed content is mostly focused on TW usage, so you would typically use this search system to find information about a particular aspect of TiddlyWiki. Say for example that you want to learn how to make a table of content, type "table of content" in the [[CommunitySearch box|http://erwanm.github.io/tw-community-search/#CommunitySearch]] (also accessible in the default tiddler http://erwanm.github.io/tw-community-search/#GettingStarted). The search results are links to various wikis, and point directly to the specific tiddlers containing your request. + +!! Features + +The ~CommunitySearch wiki also lets you: + +* Browse the [[list of wikis|http://erwanm.github.io/tw-community-search/#CommunityWikis]] +* Browse the [[list of author|http://erwanm.github.io/tw-community-search/#CommunityAuthors]] +* Browse the [[list of plugins|http://erwanm.github.io/tw-community-search/#CommunityPlugins]] +* Access content by [[tag|http://erwanm.github.io/tw-community-search/#CommunityTags]] (see also [[~BookmarkingTags|http://erwanm.github.io/tw-community-search/#BookmarkingTags]]) + + + From fb69a43325d3adb8a814cb82b2fb9760e5e7d076 Mon Sep 17 00:00:00 2001 From: Erwan Moreau Date: Sun, 13 Sep 2015 19:23:25 +0100 Subject: [PATCH 002/242] Update TWCommunitySearch.tid --- .../tiddlers/community/resources/TWCommunitySearch.tid | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/editions/tw5.com/tiddlers/community/resources/TWCommunitySearch.tid b/editions/tw5.com/tiddlers/community/resources/TWCommunitySearch.tid index 1a66a8656..d116f8027 100644 --- a/editions/tw5.com/tiddlers/community/resources/TWCommunitySearch.tid +++ b/editions/tw5.com/tiddlers/community/resources/TWCommunitySearch.tid @@ -5,18 +5,18 @@ title: TWCommunitySearch type: text/vnd.tiddlywiki url: http://erwanm.github.io/tw-community-search -The ~CommunitySearch wiki aggregates the content of many wikis from the community. It is updated automatically every day. +The [[CommunitySearch wiki|http://erwanm.github.io/tw-community-search]] aggregates many public wikis from the community. It is updated automatically every day. At the time of writing, more than 5000 tiddlers are indexed, thus giving access to the largest known collection of TW content. -It lets you search for some specific content among a preselected list of wikis. The indexed content is mostly focused on TW usage, so you would typically use this search system to find information about a particular aspect of TiddlyWiki. Say for example that you want to learn how to make a table of content, type "table of content" in the [[CommunitySearch box|http://erwanm.github.io/tw-community-search/#CommunitySearch]] (also accessible in the default tiddler http://erwanm.github.io/tw-community-search/#GettingStarted). The search results are links to various wikis, and point directly to the specific tiddlers containing your request. +It lets you search for some specific content among a preselected list of wikis. The indexed content is mostly focused on TW usage, so you would typically use this search system to find information about a particular aspect of TiddlyWiki. Say for example that you want to learn how to make a table of content, type "table of content" in the [[CommunitySearch box|http://erwanm.github.io/tw-community-search/#CommunitySearch]] (also accessible in the default tiddler [[GettingStarted|http://erwanm.github.io/tw-community-search/#GettingStarted]]). The search results are links to various wikis, and point directly to the specific tiddlers containing your request. -!! Features The ~CommunitySearch wiki also lets you: * Browse the [[list of wikis|http://erwanm.github.io/tw-community-search/#CommunityWikis]] * Browse the [[list of author|http://erwanm.github.io/tw-community-search/#CommunityAuthors]] * Browse the [[list of plugins|http://erwanm.github.io/tw-community-search/#CommunityPlugins]] -* Access content by [[tag|http://erwanm.github.io/tw-community-search/#CommunityTags]] (see also [[~BookmarkingTags|http://erwanm.github.io/tw-community-search/#BookmarkingTags]]) +* Access content by [[tag|http://erwanm.github.io/tw-community-search/#CommunityTags]] (see also [[BookmarkingTags|http://erwanm.github.io/tw-community-search/#BookmarkingTags]]) +* Follow the [[latest news|http://erwanm.github.io/tw-community-search/#CommunityNews]] from the community (and [[publish your own news|http://erwanm.github.io/tw-community-search/#PublishingInCommunityNews]] if you are a wiki author) From bbc802e2281eb7d02a8fd3c8f734ed4319ef9421 Mon Sep 17 00:00:00 2001 From: "Florent V." Date: Wed, 16 Sep 2015 04:55:07 +0200 Subject: [PATCH 003/242] Fix the title to match the one required by the "FieldManglerWidget" tiddler's link to examples, broken for now. (pointing to a non existant tiddler because of the wrong name) --- .../tw5.com/tiddlers/widgets/FieldMangler Widget (Examples).tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/widgets/FieldMangler Widget (Examples).tid b/editions/tw5.com/tiddlers/widgets/FieldMangler Widget (Examples).tid index a49fbf82a..54c4fb621 100644 --- a/editions/tw5.com/tiddlers/widgets/FieldMangler Widget (Examples).tid +++ b/editions/tw5.com/tiddlers/widgets/FieldMangler Widget (Examples).tid @@ -1,7 +1,7 @@ created: 20150706160301163 modified: 20150706172915783 tags: [[Widget Examples]] FieldManglerWidget -title: FieldMangler Widget Example +title: FieldMangler Widget (Examples) type: text/vnd.tiddlywiki <$macrocall $name=".example" n="1" From 99c5fa46dd74fe814c52ef7f7b06738cd07ef02a Mon Sep 17 00:00:00 2001 From: Andreas Hahn Date: Sun, 27 Sep 2015 15:35:54 +0200 Subject: [PATCH 004/242] fixed bug in $action-setfield introduced by #1963: At least one of '$field', '$value' or '$index' must be specified in order to act upon the information from the fields. Prevents default deletion of the 'text' field when none are specified. --- core/modules/widgets/action-setfield.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/modules/widgets/action-setfield.js b/core/modules/widgets/action-setfield.js index 1e1ba6d8e..98079f00c 100644 --- a/core/modules/widgets/action-setfield.js +++ b/core/modules/widgets/action-setfield.js @@ -61,7 +61,9 @@ SetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) { var self = this, options = {}; options.suppressTimestamp = !this.actionTimestamp; - this.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options); + if((typeof this.actionField == "string") || (typeof this.actionIndex == "string") || (typeof this.actionValue == "string")) { + this.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options); + } $tw.utils.each(this.attributes,function(attribute,name) { if(name.charAt(0) !== "$") { self.wiki.setText(self.actionTiddler,name,undefined,attribute,options); From 88c1a1e0628576e217742b840733e7ea70055bd4 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Fri, 2 Oct 2015 11:36:07 +0200 Subject: [PATCH 005/242] no delete confirmation for alerts --- core/modules/widgets/navigator.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/modules/widgets/navigator.js b/core/modules/widgets/navigator.js index c6aab7aee..8c6951b68 100755 --- a/core/modules/widgets/navigator.js +++ b/core/modules/widgets/navigator.js @@ -258,12 +258,12 @@ NavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) { confirmationTitle = title; } // Seek confirmation - if((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || "") !== "") && !confirm($tw.language.getString( + if(!tiddler.hasTag("$:/tags/Alert") && ((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || "") !== "") && !confirm($tw.language.getString( "ConfirmDeleteTiddler", {variables: {title: confirmationTitle} } - ))) { + )))) { return false; } // Delete the original tiddler From 3853a76c9a4aa2706c4de18cf2c56712f455979a Mon Sep 17 00:00:00 2001 From: Bram Chen Date: Thu, 8 Oct 2015 09:09:31 +0800 Subject: [PATCH 006/242] Add chinese translations of clarification about password command --- languages/zh-Hans/Help/password.tid | 1 + languages/zh-Hant/Help/password.tid | 1 + 2 files changed, 2 insertions(+) diff --git a/languages/zh-Hans/Help/password.tid b/languages/zh-Hans/Help/password.tid index 61443f6e3..b9ad8bfec 100644 --- a/languages/zh-Hans/Help/password.tid +++ b/languages/zh-Hans/Help/password.tid @@ -7,3 +7,4 @@ description: 设置用以加密的密码 --password ``` +''请注意'':这不是用于提供 TiddlyWiki 具有密码保护功能。相反地,请看 [[ServerCommand]] 的密码选项说明。 diff --git a/languages/zh-Hant/Help/password.tid b/languages/zh-Hant/Help/password.tid index 0fec1c8dc..e35381a51 100644 --- a/languages/zh-Hant/Help/password.tid +++ b/languages/zh-Hant/Help/password.tid @@ -7,3 +7,4 @@ description: 設定用以加密的密碼 --password ``` +''請注意'':這不是用於提供 TiddlyWiki 具有密碼保護功能。相反地,請看 [[ServerCommand]] 的密碼選項說明。 From a42dff1a41d3139b1cf53cb45f68fb5381c6dc44 Mon Sep 17 00:00:00 2001 From: Bram Chen Date: Thu, 8 Oct 2015 09:21:01 +0800 Subject: [PATCH 007/242] Add chinese translations of Tiddler/DateFormat --- languages/zh-Hans/Misc.multids | 1 + languages/zh-Hant/Misc.multids | 1 + 2 files changed, 2 insertions(+) diff --git a/languages/zh-Hans/Misc.multids b/languages/zh-Hans/Misc.multids index aa8290ba9..8cc476752 100644 --- a/languages/zh-Hans/Misc.multids +++ b/languages/zh-Hans/Misc.multids @@ -31,4 +31,5 @@ TagManager/Count/Heading: 计数 TagManager/Icon/Heading: 图标 TagManager/Info/Heading: 信息 TagManager/Tag/Heading: 标签 +Tiddler/DateFormat: YYYY年0MM月0DD日 0hh:0mm UnsavedChangesWarning: 在此 TiddlyWiki 您有尚未保存的变更 diff --git a/languages/zh-Hant/Misc.multids b/languages/zh-Hant/Misc.multids index b4270e7c7..0f9982ed9 100644 --- a/languages/zh-Hant/Misc.multids +++ b/languages/zh-Hant/Misc.multids @@ -31,4 +31,5 @@ TagManager/Count/Heading: 計數 TagManager/Icon/Heading: 圖示 TagManager/Info/Heading: 資訊 TagManager/Tag/Heading: 標籤 +Tiddler/DateFormat: YYYY年0MM月0DD日 0hh:0mm UnsavedChangesWarning: 在此 TiddlyWiki 您有尚未儲存的變更 From baca2703f11021649c2487e8247d0191e9257ddf Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Mon, 26 Jan 2015 13:39:04 +0100 Subject: [PATCH 008/242] added list suffix for each filter implements #1369 when the suffix is `list`, interprets the field as a list of individual tiddler titles and returns all titles referenced in the list field of the source list, existing or not --- core/modules/filters/each.js | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index 591dfeae0..8126d5821 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -3,7 +3,8 @@ title: $:/core/modules/filters/each.js type: application/javascript module-type: filteroperator -Filter operator that selects one tiddler for each unique value of the specified field +Filter operator that selects one tiddler for each unique value of the specified field. +With suffix "list", selects all tiddlers that are values in a specified list field. \*/ (function(){ @@ -17,19 +18,23 @@ Export our filter function */ exports.each = function(source,operator,options) { var results = [], - values = {}; + values = {}, + list = "list" === operator.suffix; source(function(tiddler,title) { if(tiddler) { - var value; - if((operator.operand === "") || (operator.operand === "title")) { - value = title; - } else { - value = tiddler.getFieldString(operator.operand); - } - if(!$tw.utils.hop(values,value)) { - values[value] = true; - results.push(title); - } + var value, + field = operator.operand || "title"; + $tw.utils.each( + list ? + options.wiki.getTiddlerList(title,field) : + [ "title" === field ? title : tiddler.getFieldString(operator.operand)], + function(value){ + if(!$tw.utils.hop(values,value)) { + values[value] = true; + results.push(list ? value : title); + } + } + ) } }); return results; From f9464dfaf8151adfff3c028182236340fe267ce0 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Mon, 26 Jan 2015 18:58:08 +0100 Subject: [PATCH 009/242] using variable declaration for readability --- core/modules/filters/each.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index 8126d5821..7458eab2c 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -22,12 +22,12 @@ exports.each = function(source,operator,options) { list = "list" === operator.suffix; source(function(tiddler,title) { if(tiddler) { - var value, - field = operator.operand || "title"; + var field = operator.operand || "title", + value = list ? + options.wiki.getTiddlerList(title,field) : + [ "title" === field ? title : tiddler.getFieldString(operator.operand)]; $tw.utils.each( - list ? - options.wiki.getTiddlerList(title,field) : - [ "title" === field ? title : tiddler.getFieldString(operator.operand)], + value, function(value){ if(!$tw.utils.hop(values,value)) { values[value] = true; From c3cbbc3f66a08e67ca2c833bb960839daea614b1 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Mon, 26 Jan 2015 19:00:49 +0100 Subject: [PATCH 010/242] renamed value to items --- core/modules/filters/each.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index 7458eab2c..b492ed1e1 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -23,18 +23,15 @@ exports.each = function(source,operator,options) { source(function(tiddler,title) { if(tiddler) { var field = operator.operand || "title", - value = list ? + items = list ? options.wiki.getTiddlerList(title,field) : [ "title" === field ? title : tiddler.getFieldString(operator.operand)]; - $tw.utils.each( - value, - function(value){ - if(!$tw.utils.hop(values,value)) { - values[value] = true; - results.push(list ? value : title); - } + $tw.utils.each(items,function(value){ + if(!$tw.utils.hop(values,value)) { + values[value] = true; + results.push(list ? value : title); } - ) + }); } }); return results; From a88ead9c0f857c34ae5d9ee27146386aee133b81 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Tue, 27 Jan 2015 01:17:14 +0100 Subject: [PATCH 011/242] removed conditional from iterator I'd really like to see a profiler run against the two to see the performance impact of one over the other --- core/modules/filters/each.js | 40 ++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index b492ed1e1..79a3981b9 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -19,21 +19,31 @@ Export our filter function exports.each = function(source,operator,options) { var results = [], values = {}, - list = "list" === operator.suffix; - source(function(tiddler,title) { - if(tiddler) { - var field = operator.operand || "title", - items = list ? - options.wiki.getTiddlerList(title,field) : - [ "title" === field ? title : tiddler.getFieldString(operator.operand)]; - $tw.utils.each(items,function(value){ - if(!$tw.utils.hop(values,value)) { - values[value] = true; - results.push(list ? value : title); - } - }); - } - }); + field = operator.operand || "title", + add = function(v) { + if(!$tw.utils.hop(values,v)) { + values[v] = true; + results.push(v); + } + }; + if("list" !== operator.suffix) { + source(function(tiddler,title) { + if(tiddler) { + add("title" === field ? title : tiddler.getFieldString(operator.operand)); + } + }); + } else { + source(function(tiddler,title) { + if(tiddler) { + $tw.utils.each( + options.wiki.getTiddlerList(title,field), + function(value) { + add(value); + } + ); + } + }); + } return results; }; From f684a6beb030092caf0eb55f2b7cd6bdd708e739 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Tue, 27 Jan 2015 02:02:15 +0100 Subject: [PATCH 012/242] fixed helper function and added tests tests: ok --- bin/test.cmd | 4 ++-- core/modules/filters/each.js | 12 ++++++------ editions/test/tiddlers/tests/test-filters.js | 4 ++++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/bin/test.cmd b/bin/test.cmd index 554277b57..4733f200e 100644 --- a/bin/test.cmd +++ b/bin/test.cmd @@ -4,8 +4,8 @@ rem test TiddlyWiki5 for tiddlywiki.com rem Run the test edition to run the node.js tests and to generate test.html for tests in the browser -node .\tiddlywiki.js ^ - .\editions\test ^ +node ..\tiddlywiki.js ^ + ..\editions\test ^ --verbose ^ --rendertiddler $:/core/save/all test.html text/plain ^ || exit 1 diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index 79a3981b9..a046923ad 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -20,16 +20,16 @@ exports.each = function(source,operator,options) { var results = [], values = {}, field = operator.operand || "title", - add = function(v) { - if(!$tw.utils.hop(values,v)) { - values[v] = true; - results.push(v); + add = function(val,title) { + if(!$tw.utils.hop(values,val)) { + values[val] = true; + results.push(title); } }; if("list" !== operator.suffix) { source(function(tiddler,title) { if(tiddler) { - add("title" === field ? title : tiddler.getFieldString(operator.operand)); + add("title" === field ? title : tiddler.getFieldString(field),title); } }); } else { @@ -38,7 +38,7 @@ exports.each = function(source,operator,options) { $tw.utils.each( options.wiki.getTiddlerList(title,field), function(value) { - add(value); + add(value,value); } ); } diff --git a/editions/test/tiddlers/tests/test-filters.js b/editions/test/tiddlers/tests/test-filters.js index 45ea8919e..1b16b117c 100644 --- a/editions/test/tiddlers/tests/test-filters.js +++ b/editions/test/tiddlers/tests/test-filters.js @@ -51,12 +51,14 @@ describe("Filter tests", function() { title: "TiddlerOne", text: "The quick brown fox in $:/TiddlerTwo", tags: ["one"], + authors: "Joe Bloggs", modifier: "JoeBloggs", modified: "201304152222"}); wiki.addTiddler({ title: "$:/TiddlerTwo", text: "The rain in Spain\nfalls mainly on the plain and [[a fourth tiddler]]", tags: ["two"], + authors: "[[John Doe]]", modifier: "JohnDoe", modified: "201304152211"}); wiki.addTiddler({ @@ -217,6 +219,8 @@ describe("Filter tests", function() { it("should handle the each operator", function() { expect(wiki.filterTiddlers("[each[modifier]sort[title]]").join(",")).toBe("$:/TiddlerTwo,TiddlerOne"); + expect(wiki.filterTiddlers("[each:list[tags]sort[title]]").join(",")).toBe("one,two"); + expect(wiki.filterTiddlers("[each:list[authors]sort[title]]").join(",")).toBe("Bloggs,Joe,John Doe"); }); it("should handle the eachday operator", function() { From 4788725ccf4e05ee0d3d7416f7a62fa9ad5a0a6a Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Tue, 27 Jan 2015 02:05:13 +0100 Subject: [PATCH 013/242] reverted test.cmd not sure how handling these files in the console works, reverted back to previous version, to be run from repo folder --- bin/test.cmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/test.cmd b/bin/test.cmd index 4733f200e..554277b57 100644 --- a/bin/test.cmd +++ b/bin/test.cmd @@ -4,8 +4,8 @@ rem test TiddlyWiki5 for tiddlywiki.com rem Run the test edition to run the node.js tests and to generate test.html for tests in the browser -node ..\tiddlywiki.js ^ - ..\editions\test ^ +node .\tiddlywiki.js ^ + .\editions\test ^ --verbose ^ --rendertiddler $:/core/save/all test.html text/plain ^ || exit 1 From d0a24bd9f093e52afe6159f042d758c537943665 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Tue, 27 Jan 2015 19:31:23 +0100 Subject: [PATCH 014/242] added $tw.utils.pushOnce retained check for basic each nonetheless tests pass --- boot/boot.js | 9 +++++++++ core/modules/filters/each.js | 20 +++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/boot/boot.js b/boot/boot.js index acdfa0327..68eb80799 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -84,6 +84,15 @@ $tw.utils.each = function(object,callback) { } }; +/* +Pushes a value to an array only when not yet contained. +*/ +$tw.utils.pushOnce = function(array,value) { + if(0 > array.indexOf(value)){ + array.push(value); + } +} + /* Helper for making DOM elements tag: tag name diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index a046923ad..8307ee31b 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -17,19 +17,17 @@ With suffix "list", selects all tiddlers that are values in a specified list fie Export our filter function */ exports.each = function(source,operator,options) { - var results = [], - values = {}, - field = operator.operand || "title", - add = function(val,title) { - if(!$tw.utils.hop(values,val)) { - values[val] = true; - results.push(title); - } - }; + var results =[] , + value,values = {}, + field = operator.operand || "title"; if("list" !== operator.suffix) { source(function(tiddler,title) { if(tiddler) { - add("title" === field ? title : tiddler.getFieldString(field),title); + value = "title" === field ? title : tiddler.getFieldString(field); + if(!$tw.utils.hop(values,value)) { + values[value] = true; + results.push(title); + } } }); } else { @@ -38,7 +36,7 @@ exports.each = function(source,operator,options) { $tw.utils.each( options.wiki.getTiddlerList(title,field), function(value) { - add(value,value); + $tw.utils.pushOnce(results,value); } ); } From 91b5547cdf5c1cd52797bed246a3eb35fbefa65b Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Thu, 29 Jan 2015 00:45:58 +0100 Subject: [PATCH 015/242] adopted style recommendations --- boot/boot.js | 2 +- core/modules/filters/each.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/boot/boot.js b/boot/boot.js index 68eb80799..56742c89d 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -88,7 +88,7 @@ $tw.utils.each = function(object,callback) { Pushes a value to an array only when not yet contained. */ $tw.utils.pushOnce = function(array,value) { - if(0 > array.indexOf(value)){ + if(array.indexOf(value) == -1) { array.push(value); } } diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index 8307ee31b..cd7584323 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -20,10 +20,10 @@ exports.each = function(source,operator,options) { var results =[] , value,values = {}, field = operator.operand || "title"; - if("list" !== operator.suffix) { + if(operator.suffix !== "list") { source(function(tiddler,title) { if(tiddler) { - value = "title" === field ? title : tiddler.getFieldString(field); + value = (field === "title") ? title : tiddler.getFieldString(field); if(!$tw.utils.hop(values,value)) { values[value] = true; results.push(title); From 95eb8810b66d2c9e9caf5c5ebb83936867a46ed7 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Wed, 11 Feb 2015 19:35:05 +0100 Subject: [PATCH 016/242] removed pushOnce --- boot/boot.js | 9 --------- core/modules/filters/each.js | 7 +++++-- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/boot/boot.js b/boot/boot.js index 56742c89d..acdfa0327 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -84,15 +84,6 @@ $tw.utils.each = function(object,callback) { } }; -/* -Pushes a value to an array only when not yet contained. -*/ -$tw.utils.pushOnce = function(array,value) { - if(array.indexOf(value) == -1) { - array.push(value); - } -} - /* Helper for making DOM elements tag: tag name diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index cd7584323..c60447446 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -29,14 +29,17 @@ exports.each = function(source,operator,options) { results.push(title); } } - }); + }); } else { source(function(tiddler,title) { if(tiddler) { $tw.utils.each( options.wiki.getTiddlerList(title,field), function(value) { - $tw.utils.pushOnce(results,value); + if(!$tw.utils.hop(values,value)) { + values[value] = true; + results.push(value); + } } ); } From 32c41479ccc6433dd4ede4e471d1e4f331251bff Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Mon, 26 Jan 2015 18:58:08 +0100 Subject: [PATCH 017/242] using variable declaration for readability --- core/modules/filters/each.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index c60447446..a1e233a94 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -48,4 +48,4 @@ exports.each = function(source,operator,options) { return results; }; -})(); +})(); \ No newline at end of file From 8b74706e359b0f1ab69cd40d799dee194179b682 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Tue, 27 Jan 2015 02:02:15 +0100 Subject: [PATCH 018/242] fixed helper function and added tests tests: ok --- bin/test.cmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/test.cmd b/bin/test.cmd index 554277b57..4733f200e 100644 --- a/bin/test.cmd +++ b/bin/test.cmd @@ -4,8 +4,8 @@ rem test TiddlyWiki5 for tiddlywiki.com rem Run the test edition to run the node.js tests and to generate test.html for tests in the browser -node .\tiddlywiki.js ^ - .\editions\test ^ +node ..\tiddlywiki.js ^ + ..\editions\test ^ --verbose ^ --rendertiddler $:/core/save/all test.html text/plain ^ || exit 1 From 843f18dc7ed10b2c90ae6db54ffee6f9030a6f7d Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Tue, 27 Jan 2015 02:05:13 +0100 Subject: [PATCH 019/242] reverted test.cmd not sure how handling these files in the console works, reverted back to previous version, to be run from repo folder --- bin/test.cmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/test.cmd b/bin/test.cmd index 4733f200e..554277b57 100644 --- a/bin/test.cmd +++ b/bin/test.cmd @@ -4,8 +4,8 @@ rem test TiddlyWiki5 for tiddlywiki.com rem Run the test edition to run the node.js tests and to generate test.html for tests in the browser -node ..\tiddlywiki.js ^ - ..\editions\test ^ +node .\tiddlywiki.js ^ + .\editions\test ^ --verbose ^ --rendertiddler $:/core/save/all test.html text/plain ^ || exit 1 From 71968e09733753ce0e7d8a03f51ffeed768437d7 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Tue, 27 Jan 2015 19:31:23 +0100 Subject: [PATCH 020/242] added $tw.utils.pushOnce retained check for basic each nonetheless tests pass --- boot/boot.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/boot/boot.js b/boot/boot.js index acdfa0327..68eb80799 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -84,6 +84,15 @@ $tw.utils.each = function(object,callback) { } }; +/* +Pushes a value to an array only when not yet contained. +*/ +$tw.utils.pushOnce = function(array,value) { + if(0 > array.indexOf(value)){ + array.push(value); + } +} + /* Helper for making DOM elements tag: tag name From b34e4f628d5c1f4ebd83c4bde0daf9ae4d7765af Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Thu, 29 Jan 2015 00:45:58 +0100 Subject: [PATCH 021/242] adopted style recommendations --- boot/boot.js | 2 +- core/modules/filters/each.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boot/boot.js b/boot/boot.js index 68eb80799..56742c89d 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -88,7 +88,7 @@ $tw.utils.each = function(object,callback) { Pushes a value to an array only when not yet contained. */ $tw.utils.pushOnce = function(array,value) { - if(0 > array.indexOf(value)){ + if(array.indexOf(value) == -1) { array.push(value); } } diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index a1e233a94..c60447446 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -48,4 +48,4 @@ exports.each = function(source,operator,options) { return results; }; -})(); \ No newline at end of file +})(); From 26114eb3ff4a3039aad9ca4f203a256b7dd37968 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Wed, 11 Feb 2015 19:35:05 +0100 Subject: [PATCH 022/242] removed pushOnce --- boot/boot.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/boot/boot.js b/boot/boot.js index 56742c89d..acdfa0327 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -84,15 +84,6 @@ $tw.utils.each = function(object,callback) { } }; -/* -Pushes a value to an array only when not yet contained. -*/ -$tw.utils.pushOnce = function(array,value) { - if(array.indexOf(value) == -1) { - array.push(value); - } -} - /* Helper for making DOM elements tag: tag name From 2acea55711c76675c3122adc82554df7c2b2fbd4 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Thu, 8 Oct 2015 13:31:09 +0200 Subject: [PATCH 023/242] added example documentation the documentation for the feature seems already there / merged --- editions/tw5.com/tiddlers/filters/examples/each.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/tw5.com/tiddlers/filters/examples/each.tid b/editions/tw5.com/tiddlers/filters/examples/each.tid index 0b5017957..091e1bc37 100644 --- a/editions/tw5.com/tiddlers/filters/examples/each.tid +++ b/editions/tw5.com/tiddlers/filters/examples/each.tid @@ -6,5 +6,6 @@ type: text/vnd.tiddlywiki <<.operator-example 1 "[each[color]]">> <<.operator-example 2 "[sort[title]each[type]]" "the alphabetically first tiddler of each type">> +<<.operator-example 3 "[each:list[list]]" "all tiddlers listed anywhere in the core list field">> For an example of using the <<.op each>> operator to generate a two-tier list of groups and members, see [[GroupedLists]]. From 4c95dc9bbb4972824305ea4aab7b3b4ce5e0af22 Mon Sep 17 00:00:00 2001 From: jed Date: Thu, 8 Oct 2015 20:39:19 +0200 Subject: [PATCH 024/242] Modified fieldmangler to create a tiddler if adding a tag to one that doesn't exist This came up as an issue and I don't have any reason it shouldn't be here. It could be useful. --- core/modules/widgets/fieldmangler.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/modules/widgets/fieldmangler.js b/core/modules/widgets/fieldmangler.js index 1cd0c5aa6..a829b77e3 100644 --- a/core/modules/widgets/fieldmangler.js +++ b/core/modules/widgets/fieldmangler.js @@ -135,6 +135,10 @@ FieldManglerWidget.prototype.handleAddTagEvent = function(event) { $tw.utils.pushTop(modification.tags,tag); this.wiki.addTiddler(new $tw.Tiddler(tiddler,modification)); } + } else if(typeof event.param === "string" && event.param.trim() !== "" && this.mangleTitle.trim() !== "") { + var tag = []; + tag.push(event.param.trim()); + this.wiki.addTiddler({title: this.mangleTitle, tags: tag}); } return true; }; From 51739e3fd2da826c9dce63da96fdbe0e550ea24d Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Fri, 9 Oct 2015 10:39:00 +0200 Subject: [PATCH 025/242] moved if-macro, see #2005 as per #2005 from @Evolena --- editions/tw5.com/tiddlers/{macros => system}/if-macro.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename editions/tw5.com/tiddlers/{macros => system}/if-macro.js (100%) diff --git a/editions/tw5.com/tiddlers/macros/if-macro.js b/editions/tw5.com/tiddlers/system/if-macro.js similarity index 100% rename from editions/tw5.com/tiddlers/macros/if-macro.js rename to editions/tw5.com/tiddlers/system/if-macro.js From e5cef9a5a64a9fc50d336f63228c74eb897a839c Mon Sep 17 00:00:00 2001 From: senevoldsen90 Date: Fri, 9 Oct 2015 15:11:24 +0200 Subject: [PATCH 026/242] Local relative urls in Markdown map to WikiLinks --- plugins/tiddlywiki/markdown/wrapper.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/tiddlywiki/markdown/wrapper.js b/plugins/tiddlywiki/markdown/wrapper.js index debd94c36..0eab2e200 100644 --- a/plugins/tiddlywiki/markdown/wrapper.js +++ b/plugins/tiddlywiki/markdown/wrapper.js @@ -48,6 +48,18 @@ function transformNode(node) { delete widget.attributes.src; } } + // Convert internal links to proper wikilinks + if (widget.tag === "a" && widget.attributes.href.value[0] === "#") { + widget.type = "link"; + widget.attributes.to = widget.attributes.href; + if (widget.attributes.to.type === "string") { + //Remove '#' before conversion to wikilink + widget.attributes.to.value = widget.attributes.to.value.substr(1); + } + //Children is fine + delete widget.tag; + delete widget.attributes.href; + } return widget; } else { return {type: "text", text: node}; From ed1a306f88f3a88562fc081ca9e3028cbb3754ae Mon Sep 17 00:00:00 2001 From: senevoldsen90 Date: Fri, 9 Oct 2015 15:24:59 +0200 Subject: [PATCH 027/242] Signing the CLA --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index b9e7e983e..9bef6e0ba 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -252,3 +252,5 @@ William Jackson, @matabele 2015/09/26 Karl Knechtel, @zahlman, 2015/10/03 Tony Grosinger @tgrosinger 2015/10/03 + +Soeren Enevoldsen, @senevoldsen90, 2015/10/09 From 5d36e17c18e6aa84acda87a0919b58347b2b2a9a Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Sat, 10 Oct 2015 16:35:22 +0200 Subject: [PATCH 028/242] Revert "no delete confirmation for alerts" This reverts commit 88c1a1e0628576e217742b840733e7ea70055bd4. --- core/modules/widgets/navigator.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/modules/widgets/navigator.js b/core/modules/widgets/navigator.js index 8c6951b68..c6aab7aee 100755 --- a/core/modules/widgets/navigator.js +++ b/core/modules/widgets/navigator.js @@ -258,12 +258,12 @@ NavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) { confirmationTitle = title; } // Seek confirmation - if(!tiddler.hasTag("$:/tags/Alert") && ((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || "") !== "") && !confirm($tw.language.getString( + if((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || "") !== "") && !confirm($tw.language.getString( "ConfirmDeleteTiddler", {variables: {title: confirmationTitle} } - )))) { + ))) { return false; } // Delete the original tiddler From 9a23c2471cebf856d9db8295beae402bfd6d82d7 Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Sat, 10 Oct 2015 16:47:11 +0200 Subject: [PATCH 029/242] modified alert template and execute action-deletetiddler on currentTiddler by default --- core/modules/widgets/action-deletetiddler.js | 2 +- core/ui/AlertTemplate.tid | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/core/modules/widgets/action-deletetiddler.js b/core/modules/widgets/action-deletetiddler.js index 816f9f55e..f98346989 100644 --- a/core/modules/widgets/action-deletetiddler.js +++ b/core/modules/widgets/action-deletetiddler.js @@ -36,7 +36,7 @@ Compute the internal state of the widget */ DeleteTiddlerWidget.prototype.execute = function() { this.actionFilter = this.getAttribute("$filter"); - this.actionTiddler = this.getAttribute("$tiddler"); + this.actionTiddler = this.getAttribute("$tiddler",this.getVariable("currentTiddler")); }; /* diff --git a/core/ui/AlertTemplate.tid b/core/ui/AlertTemplate.tid index c4e457b75..59e3bc503 100644 --- a/core/ui/AlertTemplate.tid +++ b/core/ui/AlertTemplate.tid @@ -2,8 +2,7 @@ title: $:/core/ui/AlertTemplate
-<$button message="tm-delete-tiddler" class="tc-btn-invisible"> -{{$:/core/images/delete-button}} +<$button class="tc-btn-invisible"><$action-deletetiddler/>{{$:/core/images/delete-button}}
<$view field="component"/> - <$view field="modified" format="date" template="0hh:0mm:0ss DD MM YYYY"/> <$reveal type="nomatch" state="!!count" text="">(count: <$view field="count"/>) From 00f6aafed6c36f63efb096b4ff20027a712ad43d Mon Sep 17 00:00:00 2001 From: Tobias Beer Date: Sat, 10 Oct 2015 21:01:07 +0200 Subject: [PATCH 030/242] being specific about the tiddler to be deleted via action-deletetiddler --- core/modules/widgets/action-deletetiddler.js | 2 +- core/ui/AlertTemplate.tid | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/modules/widgets/action-deletetiddler.js b/core/modules/widgets/action-deletetiddler.js index f98346989..816f9f55e 100644 --- a/core/modules/widgets/action-deletetiddler.js +++ b/core/modules/widgets/action-deletetiddler.js @@ -36,7 +36,7 @@ Compute the internal state of the widget */ DeleteTiddlerWidget.prototype.execute = function() { this.actionFilter = this.getAttribute("$filter"); - this.actionTiddler = this.getAttribute("$tiddler",this.getVariable("currentTiddler")); + this.actionTiddler = this.getAttribute("$tiddler"); }; /* diff --git a/core/ui/AlertTemplate.tid b/core/ui/AlertTemplate.tid index 59e3bc503..dd51643ff 100644 --- a/core/ui/AlertTemplate.tid +++ b/core/ui/AlertTemplate.tid @@ -2,7 +2,7 @@ title: $:/core/ui/AlertTemplate
-<$button class="tc-btn-invisible"><$action-deletetiddler/>{{$:/core/images/delete-button}} +<$button class="tc-btn-invisible"><$action-deletetiddler tiddler=<>/>{{$:/core/images/delete-button}}
<$view field="component"/> - <$view field="modified" format="date" template="0hh:0mm:0ss DD MM YYYY"/> <$reveal type="nomatch" state="!!count" text="">(count: <$view field="count"/>) From 0703a257f3596b9a96821ba9801cf21661d87d8f Mon Sep 17 00:00:00 2001 From: Bram Chen Date: Wed, 14 Oct 2015 21:07:33 +0800 Subject: [PATCH 031/242] Add chinese translations of Settings/PerformanceInstrumentation --- languages/zh-Hans/ControlPanel.multids | 3 +++ languages/zh-Hant/ControlPanel.multids | 3 +++ 2 files changed, 6 insertions(+) diff --git a/languages/zh-Hans/ControlPanel.multids b/languages/zh-Hans/ControlPanel.multids index c7b340349..d1bcfea4d 100644 --- a/languages/zh-Hans/ControlPanel.multids +++ b/languages/zh-Hans/ControlPanel.multids @@ -99,6 +99,9 @@ Settings/NavigationHistory/Caption: 历史记录导览 Settings/NavigationHistory/Hint: 当导览到条目时,更新浏览器历史记录: Settings/NavigationHistory/No/Description: 不更新历史记录 Settings/NavigationHistory/Yes/Description: 更新历史记录 +Settings/PerformanceInstrumentation/Caption: 性能检测 +Settings/PerformanceInstrumentation/Hint: 在浏览器的开发人员控制台,显示性能统计数据。需要重新加载才能生效。 +Settings/PerformanceInstrumentation/Description: 启用性能检测 Settings/ToolbarButtonStyle/Caption: 工具栏按钮样式 Settings/ToolbarButtonStyle/Hint: 选择工具栏按钮的样式: Settings/ToolbarButtonStyle/Styles/Borderless: 无边框 diff --git a/languages/zh-Hant/ControlPanel.multids b/languages/zh-Hant/ControlPanel.multids index 0a6230c1e..776742594 100644 --- a/languages/zh-Hant/ControlPanel.multids +++ b/languages/zh-Hant/ControlPanel.multids @@ -99,6 +99,9 @@ Settings/NavigationHistory/Caption: 歷史記錄導覽 Settings/NavigationHistory/Hint: 當導覽到條目時,更新瀏覽器歷史記錄: Settings/NavigationHistory/No/Description: 不更新歷史記錄 Settings/NavigationHistory/Yes/Description: 更新歷史記錄 +Settings/PerformanceInstrumentation/Caption: 效能檢測 +Settings/PerformanceInstrumentation/Hint: 在瀏覽器的開發人員主控台,顯示效能統計資訊。需要重新載入才能生效。 +Settings/PerformanceInstrumentation/Description: 啟用效能檢測 Settings/ToolbarButtonStyle/Caption: 工具列按鈕樣式 Settings/ToolbarButtonStyle/Hint: 選擇工具列按鈕的樣式: Settings/ToolbarButtonStyle/Styles/Borderless: 無邊框 From 0a220a09da9e8eeb6f507bad6b695505ba8d44f2 Mon Sep 17 00:00:00 2001 From: Evolena Date: Wed, 14 Oct 2015 20:25:11 +0200 Subject: [PATCH 032/242] Text-slicer: Add support for definition lists --- editions/text-slicer/tiddlers/Sample Text.tid | 7 +++ plugins/tiddlywiki/text-slicer/docs.tid | 26 +++++++++++ .../text-slicer/modules/slicers/def-list.js | 40 +++++++++++++++++ .../text-slicer/modules/slicers/definition.js | 44 +++++++++++++++++++ .../text-slicer/modules/slicers/term.js | 44 +++++++++++++++++++ .../templates/interactive/def-list.tid | 11 +++++ .../templates/interactive/definition.tid | 11 +++++ .../templates/interactive/term.tid | 11 +++++ .../templates/interactive/tiddler.tid | 12 +++++ .../text-slicer/templates/plain/def-list.tid | 11 +++++ .../templates/plain/definition.tid | 11 +++++ .../text-slicer/templates/plain/term.tid | 11 +++++ .../text-slicer/templates/plain/tiddler.tid | 12 +++++ .../text-slicer/templates/static/def-list.tid | 11 +++++ .../templates/static/definition.tid | 9 ++++ .../text-slicer/templates/static/term.tid | 9 ++++ .../text-slicer/templates/static/tiddler.tid | 18 ++++++++ 17 files changed, 298 insertions(+) create mode 100644 plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js create mode 100644 plugins/tiddlywiki/text-slicer/modules/slicers/definition.js create mode 100644 plugins/tiddlywiki/text-slicer/modules/slicers/term.js create mode 100644 plugins/tiddlywiki/text-slicer/templates/interactive/def-list.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/interactive/definition.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/interactive/term.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/plain/def-list.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/plain/definition.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/plain/term.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/static/def-list.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/static/definition.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/static/term.tid diff --git a/editions/text-slicer/tiddlers/Sample Text.tid b/editions/text-slicer/tiddlers/Sample Text.tid index 0c15eb858..b44e6a9ae 100644 --- a/editions/text-slicer/tiddlers/Sample Text.tid +++ b/editions/text-slicer/tiddlers/Sample Text.tid @@ -104,6 +104,13 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor i Dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+
Term being defined
+
Definition of that term
+
Another term
+
Another definition
+
+

Story

    diff --git a/plugins/tiddlywiki/text-slicer/docs.tid b/plugins/tiddlywiki/text-slicer/docs.tid index ddfe508ec..98f5edbf7 100644 --- a/plugins/tiddlywiki/text-slicer/docs.tid +++ b/plugins/tiddlywiki/text-slicer/docs.tid @@ -144,6 +144,32 @@ The tiddlers representing items within the list have the following fields: * ''text'': the text of the list item * ''tags'': any CSS classes found in the HTML are converted into tags +!!! Definition lists + +Definition lists are represented by several tiddlers: one for the definition list itself, and one for each term and definition in the list. + +The tiddler representing the definition list itself has the following fields: + +* ''toc-type'': the text "def-list" +* ''toc-list-filter'': the default filter used to generate the titles of the list-items +* ''title'': an automatically generated unique title +* ''list'': ordered list of titles of tiddlers representing the items (terms and/or definition) in the definition list +* ''tags'': any CSS classes found in the HTML are converted into tags + +The tiddlers representing terms within the definition list have the following fields: + +* ''toc-type'': the text "term" +* ''title'': an automatically generated unique title +* ''text'': the text of the definition list term +* ''tags'': any CSS classes found in the HTML are converted into tags + +The tiddlers representing definitions within the definition list have the following fields: + +* ''toc-type'': the text "definition" +* ''title'': an automatically generated unique title +* ''text'' : the text of the definition list definition +* ''tags'': any CSS classes found in the HTML are converted into tags + !!! Images Tiddlers representing images have the following fields: diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js b/plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js new file mode 100644 index 000000000..bfcdce28e --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js @@ -0,0 +1,40 @@ +/*\ +title: $:/plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js +type: application/javascript +module-type: slicer + +Handle slicing definition list nodes + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +exports.processDefListNode = function(domNode,tagName) { + if(domNode.nodeType === 1 && tagName === "dl") { + var title = this.makeUniqueTitle("def-list-" + tagName), + parentTitle = this.parentStack[this.parentStack.length - 1].title, + tags = []; + if(domNode.className.trim() !== "") { + tags = tags.concat(domNode.className.split(" ")); + } + this.addToList(parentTitle,title); + this.parentStack.push({type: tagName, title: this.addTiddler({ + "toc-type": "def-list", + "toc-list-filter": "[list!has[draft.of]]", + text: "", + title: title, + list: [], + tags: tags + })}); + this.currentTiddler = title; + this.processNodeList(domNode.childNodes); + this.parentStack.pop(); + return true; + } + return false; +}; + +})(); diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js b/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js new file mode 100644 index 000000000..dc9a6d601 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js @@ -0,0 +1,44 @@ +/*\ +title: $:/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js +type: application/javascript +module-type: slicer + +Handle slicing definition list definition nodes + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +exports.processDefinitionItemNode = function(domNode,tagName) { + var text = $tw.utils.htmlEncode(domNode.textContent); + if(domNode.nodeType === 1 && tagName === "dd") { + // if(!this.isBlank(text)) { + var title = this.makeUniqueTitle("definition",text), + parentTitle = this.parentStack[this.parentStack.length - 1].title, + tags = []; + if(domNode.className.trim() !== "") { + tags = tags.concat(domNode.className.split(" ")); + } + this.addToList(parentTitle,title); + this.addTiddler({ + "toc-type": "definition", + title: title, + text: "", + list: [], + tags: tags + }); + this.currentTiddler = title; + this.containerStack.push(title); + // this.containerStack.push("Just testing" + new Date()); + this.processNodeList(domNode.childNodes); + this.containerStack.pop(); + return true; + // } + } + return false; +}; + +})(); diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/term.js b/plugins/tiddlywiki/text-slicer/modules/slicers/term.js new file mode 100644 index 000000000..0f340b60e --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/term.js @@ -0,0 +1,44 @@ +/*\ +title: $:/plugins/tiddlywiki/text-slicer/modules/slicers/term.js +type: application/javascript +module-type: slicer + +Handle slicing definition list term nodes + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +exports.processTermItemNode = function(domNode,tagName) { + var text = $tw.utils.htmlEncode(domNode.textContent); + if(domNode.nodeType === 1 && tagName === "dt") { + // if(!this.isBlank(text)) { + var title = this.makeUniqueTitle("term",text), + parentTitle = this.parentStack[this.parentStack.length - 1].title, + tags = []; + if(domNode.className.trim() !== "") { + tags = tags.concat(domNode.className.split(" ")); + } + this.addToList(parentTitle,title); + this.addTiddler({ + "toc-type": "term", + title: title, + text: "", + list: [], + tags: tags + }); + this.currentTiddler = title; + this.containerStack.push(title); + // this.containerStack.push("Just testing" + new Date()); + this.processNodeList(domNode.childNodes); + this.containerStack.pop(); + return true; + // } + } + return false; +}; + +})(); diff --git a/plugins/tiddlywiki/text-slicer/templates/interactive/def-list.tid b/plugins/tiddlywiki/text-slicer/templates/interactive/def-list.tid new file mode 100644 index 000000000..34550c541 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/interactive/def-list.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/interactive/def-list + +\define body() +
    +<$list filter="""[all[current]] $(tv-exclude-filter)$ +[limit[1]]""" variable="item"> +<$list filter={{!!toc-list-filter}} template="$:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler"/> + +
    +\end + +<> diff --git a/plugins/tiddlywiki/text-slicer/templates/interactive/definition.tid b/plugins/tiddlywiki/text-slicer/templates/interactive/definition.tid new file mode 100644 index 000000000..d4a4b4668 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/interactive/definition.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/interactive/definition + +\define body() +<$link tag="dd" class="tc-document-tiddler-link"> + +<$transclude/> + + +\end + +<> diff --git a/plugins/tiddlywiki/text-slicer/templates/interactive/term.tid b/plugins/tiddlywiki/text-slicer/templates/interactive/term.tid new file mode 100644 index 000000000..ab3f2076e --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/interactive/term.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/interactive/term + +\define body() +<$link tag="dt" class="tc-document-tiddler-link"> + +<$transclude/> + + +\end + +<> diff --git a/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler.tid b/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler.tid index 359bec82e..fd98e761a 100644 --- a/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler.tid +++ b/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler.tid @@ -27,3 +27,15 @@ title: $:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler <$reveal type="match" state="!!toc-type" text="image"> <$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/interactive/image" mode="block"/> + +<$reveal type="match" state="!!toc-type" text="def-list"> +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/interactive/def-list" mode="block"/> + + +<$reveal type="match" state="!!toc-type" text="term"> +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/interactive/term" mode="block"/> + + +<$reveal type="match" state="!!toc-type" text="definition"> +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/interactive/definition" mode="block"/> + diff --git a/plugins/tiddlywiki/text-slicer/templates/plain/def-list.tid b/plugins/tiddlywiki/text-slicer/templates/plain/def-list.tid new file mode 100644 index 000000000..5eb7eb22a --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/plain/def-list.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/plain/def-list + +\define body() +
    +<$list filter="""[all[current]] $(tv-exclude-filter)$ +[limit[1]]""" variable="item"> +<$list filter={{!!toc-list-filter}} template="$:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler"/> + +
    +\end + +<> diff --git a/plugins/tiddlywiki/text-slicer/templates/plain/definition.tid b/plugins/tiddlywiki/text-slicer/templates/plain/definition.tid new file mode 100644 index 000000000..b41f40472 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/plain/definition.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/plain/definition + +\define body() +
    + +<$transclude/> + +
    +\end + +<> diff --git a/plugins/tiddlywiki/text-slicer/templates/plain/term.tid b/plugins/tiddlywiki/text-slicer/templates/plain/term.tid new file mode 100644 index 000000000..3413f9a10 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/plain/term.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/plain/term + +\define body() +
    + +<$transclude/> + +
    +\end + +<> diff --git a/plugins/tiddlywiki/text-slicer/templates/plain/tiddler.tid b/plugins/tiddlywiki/text-slicer/templates/plain/tiddler.tid index b5620c6c0..390c2e308 100644 --- a/plugins/tiddlywiki/text-slicer/templates/plain/tiddler.tid +++ b/plugins/tiddlywiki/text-slicer/templates/plain/tiddler.tid @@ -26,4 +26,16 @@ title: $:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler <$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/plain/image" mode="block"/> +<$list filter="[prefix[def-list]]" variable="item"> +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/plain/def-list" mode="block"/> + + +<$list filter="[prefix[term]]" variable="item"> +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/plain/term" mode="block"/> + + +<$list filter="[prefix[definition]]" variable="item"> +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/plain/definition" mode="block"/> + + diff --git a/plugins/tiddlywiki/text-slicer/templates/static/def-list.tid b/plugins/tiddlywiki/text-slicer/templates/static/def-list.tid new file mode 100644 index 000000000..51467b45b --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/static/def-list.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/static/def-list + +<$list filter="""[all[current]] $(tv-exclude-filter)$ +[limit[1]]""" variable="item"> + +`
    ` + +<$list filter={{!!toc-list-filter}} template="$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler"/> + +`
    ` + + diff --git a/plugins/tiddlywiki/text-slicer/templates/static/definition.tid b/plugins/tiddlywiki/text-slicer/templates/static/definition.tid new file mode 100644 index 000000000..196a27aa2 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/static/definition.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/static/definition + +`
    ` + +<$transclude/> + +`
    ` + +<$list filter="[list!has[draft.of]]" template="$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler"/> diff --git a/plugins/tiddlywiki/text-slicer/templates/static/term.tid b/plugins/tiddlywiki/text-slicer/templates/static/term.tid new file mode 100644 index 000000000..7ffed5900 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/static/term.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/static/term + +`
    ` + +<$transclude/> + +`
    ` + +<$list filter="[list!has[draft.of]]" template="$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler"/> diff --git a/plugins/tiddlywiki/text-slicer/templates/static/tiddler.tid b/plugins/tiddlywiki/text-slicer/templates/static/tiddler.tid index 5bdde1a31..bd8e1e822 100644 --- a/plugins/tiddlywiki/text-slicer/templates/static/tiddler.tid +++ b/plugins/tiddlywiki/text-slicer/templates/static/tiddler.tid @@ -38,4 +38,22 @@ title: $:/plugins/tiddlywiki/text-slicer/templates/static/tiddler +<$list filter="[prefix[def-list]]" variable="item"> + +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/static/def-list" mode="block"/> + + + +<$list filter="[prefix[term]]" variable="item"> + +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/static/term" mode="block"/> + + + +<$list filter="[prefix[definition]]" variable="item"> + +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/static/definition" mode="block"/> + + + From 95f98d36d9a0626d5dadf2cd6e2656111f8d55e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Correia?= Date: Thu, 15 Oct 2015 09:33:42 +0200 Subject: [PATCH 033/242] communicate on a new datepicker plugin --- .../resources/datepicker based on Pikaday.tid | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 editions/tw5.com/tiddlers/community/resources/datepicker based on Pikaday.tid diff --git a/editions/tw5.com/tiddlers/community/resources/datepicker based on Pikaday.tid b/editions/tw5.com/tiddlers/community/resources/datepicker based on Pikaday.tid new file mode 100644 index 000000000..754f634db --- /dev/null +++ b/editions/tw5.com/tiddlers/community/resources/datepicker based on Pikaday.tid @@ -0,0 +1,12 @@ +created: 20151015072304780 +modified: 20151015073121685 +tags: Resources +title: datepicker plugin based on Pikaday, by kixam +type: text/vnd.tiddlywiki +url: http://kixam.github.io/TW5-datePicker/ + +An interactive date picker plugin based on [[Pikaday|https://github.com/dbushell/Pikaday]]. A demo can be found here: {{!!url}}. + +<<< +datepicker is a TiddlyWiki plugin that allows you to use a widget much like EditTextWidget to pick a date (not a time). It shows a nice interactive mini-calendar when clicked, allows you to set a date format for display, and is compatible with core date fields such as `modified` and `created`. +<<< From 49894abaf4c7f8e1f91300dfe6e9d71cef132e60 Mon Sep 17 00:00:00 2001 From: William Jackson Date: Sun, 18 Oct 2015 18:37:08 +0200 Subject: [PATCH 034/242] Create x-listops.js These filters are designed to be used with the action-listops widget. --- core/modules/filters/x-listops.js | 170 ++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 core/modules/filters/x-listops.js diff --git a/core/modules/filters/x-listops.js b/core/modules/filters/x-listops.js new file mode 100644 index 000000000..9b61a8aef --- /dev/null +++ b/core/modules/filters/x-listops.js @@ -0,0 +1,170 @@ +/*\ +title: $:/core/modules/filters/x-listops.js +type: application/javascript +module-type: filteroperator + +Extended filter operators to manipulate the current list. + +\*/ +(function () { + + /*jslint node: true, browser: true */ + /*global $tw: false */ + "use strict"; + + var prepare_results = function (source) { + var results = []; + source(function (tiddler, title) { + results.push(title); + }); + return results; + }; + + /* + Moves a number of items from the tail of the current list before the item named in the operand + */ + exports.putbefore = function (source, operator, options) { + var results = prepare_results(source), + index = results.indexOf(operator.operand), + count = parseInt(operator.suffix) || 1; + if (index === -1) { + return results.slice(0, -1); + } + return results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count)); + }; + + /* + Moves a number of items from the tail of the current list after the item named in the operand + */ + exports.putafter = function (source, operator, options) { + var results = prepare_results(source), + index = results.indexOf(operator.operand), + count = parseInt(operator.suffix) || 1; + if (index === -1) { + return results.slice(0, -1); + } + return results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count)); + }; + + /* + Replaces the item named in the operand with a number of items from the tail of the current list + */ + exports.replace = function (source, operator, options) { + var results = prepare_results(source), + index = results.indexOf(operator.operand), + count = parseInt(operator.suffix) || 1; + if (index === -1) { + return results.slice(0, -count); + } + return results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count)); + }; + + /* + Moves a number of items from the tail of the current list to the head of the list + */ + exports.putfirst = function (source, operator, options) { + var results = prepare_results(source), + count = parseInt(operator.suffix) || 1; + return results.slice(-count).concat(results.slice(0, -count)); + }; + + /* + Moves a number of items from the head of the current list to the tail of the list + */ + exports.putlast = function (source, operator, options) { + var results = prepare_results(source), + count = parseInt(operator.suffix) || 1; + return results.slice(count).concat(results.slice(0, count)); + }; + + /* + Returns the items from the current list that are after the item named in the operand + */ + exports.allafter = function (source, operator, options) { + var results = prepare_results(source), + index = results.indexOf(operator.operand); + if (index === -1 || index > (results.length - 2)) { + return []; + } + if (operator.suffix) { + return results.slice(index - 1); + } + return results.slice(index); + }; + + /* + Returns the items from the current list that are before the item named in the operand + */ + exports.allbefore = function (source, operator, options) { + var results = prepare_results(source), + index = results.indexOf(operator.operand); + if (index <= 0) { + return []; + } + if (operator.suffix) { + return results.slice(0, index + 1); + } + return results.slice(0, index); + }; + + /* + Appends the items listed in the operand array to the tail of the current list + */ + exports.append = function (source, operator, options) { + var results = prepare_results(source), + append = $tw.utils.parseStringArray(operator.operand); + if (append === "") { + return results; + } + return results.concat(append); + }; + + /* + Prepends the items listed in the operand array to the head of the current list + */ + exports.prepend = function (source, operator, options) { + var results = prepare_results(source), + prepend = $tw.utils.parseStringArray(operator.operand); + if (prepend === "") { + return results; + } + return prepend.concat(results); + }; + + /* + Returns all items from the current list except the items listed in the operand array + */ + exports.remove = function (source, operator, options) { + var results = prepare_results(source), + count = parseInt(operator.suffix) || 1, + p, len, index, array = $tw.utils.parseStringArray(operator.operand); + len = array.length - 1; + for (p = 0; p < count; ++p) { + if (operator.prefix) { + index = results.indexOf(array[len - p]); + } else { + index = results.indexOf(array[p]); + } + if (index !== -1) { + results.splice(index, 1); + } + } + return results; + }; + + /* + Returns all items from the current list sorted in the order of the items in the operand array + */ + exports.sortby = function (source, operator, options) { + var results = prepare_results(source); + if (!results || results.length < 2) { + return results; + } + var lookup = $tw.utils.parseStringArray(operator.operand); + results.sort(function (a, b) { + return lookup.indexOf(a) - lookup.indexOf(b); + }); + return results; + }; + +})(); From 56d467fb47cc169c2f63ea5e88fe372aec8db2cf Mon Sep 17 00:00:00 2001 From: William Jackson Date: Sun, 18 Oct 2015 18:41:40 +0200 Subject: [PATCH 035/242] Create action-listops.js Action widget designed to apply filters to the current list and save the modified list back to the list. The widget is able to manipulate lists in any field or any data index of the target tiddler, and includes an option to manipulate the tags of the target tiddler. The widget is used in conjunction with the extended list operator filters (xlistops.js) --- core/modules/widgets/action-listops.js | 89 ++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 core/modules/widgets/action-listops.js diff --git a/core/modules/widgets/action-listops.js b/core/modules/widgets/action-listops.js new file mode 100644 index 000000000..c88130b39 --- /dev/null +++ b/core/modules/widgets/action-listops.js @@ -0,0 +1,89 @@ +/*\ +title: $:/core/modules/widgets/action-listops.js +type: application/javascript +module-type: widget + +Action widget to apply list operations to any tiddler field (defaults to the 'tags' field of the current tiddler) + +\*/ +(function () { + + /*jslint node: true, browser: true */ + /*global $tw: false */ + "use strict"; + + var Widget = require("$:/core/modules/widgets/widget.js").widget; + + var ActionListopsWidget = function (parseTreeNode, options) { + this.initialise(parseTreeNode, options); + }; + + /* + Inherit from the base widget class + */ + ActionListopsWidget.prototype = new Widget(); + + /* + Render this widget into the DOM + */ + ActionListopsWidget.prototype.render = function (parent, nextSibling) { + this.computeAttributes(); + this.execute(); + }; + + /* + Compute the internal state of the widget + */ + ActionListopsWidget.prototype.execute = function () { + // Get our parameters + this.target = this.getAttribute("$tiddler", this.getVariable("currentTiddler")); + this.filter = this.getAttribute("$filter"); + this.subfilter = this.getAttribute("$subfilter"); + this.listField = this.getAttribute("$list", "list"); + this.listIndex = this.getAttribute("$index"); + this.filtertags = this.getAttribute("$tags"); + }; + + /* + Refresh the widget by ensuring our attributes are up to date + */ + ActionListopsWidget.prototype.refresh = function (changedTiddlers) { + var changedAttributes = this.computeAttributes(); + if (changedAttributes.$tiddler || changedAttributes.$filter || changedAttributes.$subfilter || changedAttributes.$list || changedAttributes.$index || changedAttributes.$tags) { + this.refreshSelf(); + return true; + } + return this.refreshChildren(changedTiddlers); + }; + + /* + Invoke the action associated with this widget + */ + ActionListopsWidget.prototype.invokeAction = function (triggeringWidget, event) { + //try this + var field = this.listField, + index = undefined, + type = "!!", + list = this.listField; + if (this.listIndex) { + field = undefined; + index = this.listIndex; type = "##"; + list = this.listIndex; + } + if (this.filter) { + this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(this.filter, this))); + } + if (this.subfilter) { + var subfilter = "[list[" + this.target + type + list + "]] " + this.subfilter; + this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter, this))); + } + if (this.filtertags) { + var tagfilter = "[list[" + this.target + "!!tags]] " + this.filtertags; + this.wiki.setText(this.target, "tags", undefined, $tw.utils.stringifyList(this.wiki.filterTiddlers(tagfilter, this))); + } + return true; // Action was invoked + }; + + exports["action-listops"] = ActionListopsWidget; + +})(); From 5232d5a0a76cd0daa573a45f224dca0194fac852 Mon Sep 17 00:00:00 2001 From: afeldspar Date: Tue, 20 Oct 2015 21:04:35 -0400 Subject: [PATCH 036/242] Update cla-individual.md --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index b9e7e983e..50d82fbb7 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -252,3 +252,5 @@ William Jackson, @matabele 2015/09/26 Karl Knechtel, @zahlman, 2015/10/03 Tony Grosinger @tgrosinger 2015/10/03 + +Antaeus Feldspar @afeldspar 2015/10/20 From 7492086f313940e7e8f86c8f3c91ef030e09fa4b Mon Sep 17 00:00:00 2001 From: afeldspar Date: Tue, 20 Oct 2015 21:15:58 -0400 Subject: [PATCH 037/242] add explanation on 'set' attribute Attempted a fix for the problem I raised in #2038, by adding an explanation of why a TextReference in a button widget's 'set' attribute will lack the curly braces seen nearly anywhere else a TextReference is used as a widget attribute. --- editions/tw5.com/tiddlers/widgets/ButtonWidget.tid | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid b/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid index 3e40b75e0..28c1f6822 100644 --- a/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid @@ -37,4 +37,14 @@ The content of the `<$button>` widget is displayed within the button. |tag |An optional html tag to use instead of the default "button" | |default |Default value if `set` tiddler is missing for testing against `setTo` to determine `selectedClass` | -''Tip:'' Set ''class'' to `tc-btn-invisible tc-tiddlylink` to have a button look like an internal link. \ No newline at end of file +''Note:'' In almost all other cases where a TextReference is used as a widget attribute, it will be placed between curly brackets, to [[transclude|Transclusion in WikiText]] the value currently stored there. However, when we use a TextReference as the value of a button widget's `set` attribute, we are referencing //the storage location itself//, rather than the value stored there, so we do ''not'' use curly brackets there. //Example:// we could code a button widget that sets the `caption` field of TiddlerA to be the same as that of TiddlerB as: + +``` +<$button set="TiddlerA!!caption" setTo={{TiddlerB!!caption}} > + +Press me! + + +``` + +''Tip:'' Set ''class'' to `tc-btn-invisible tc-tiddlylink` to have a button look like an internal link. From 3e445b8853aecfeeefa3626800c06ce0ba3f807a Mon Sep 17 00:00:00 2001 From: William Jackson Date: Thu, 22 Oct 2015 16:40:36 +0200 Subject: [PATCH 038/242] Update x-listops.js Corrected the logic of the 'allafter' filter and added a new 'move' filter. --- core/modules/filters/x-listops.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/core/modules/filters/x-listops.js b/core/modules/filters/x-listops.js index 9b61a8aef..f6fde4ee0 100644 --- a/core/modules/filters/x-listops.js +++ b/core/modules/filters/x-listops.js @@ -77,6 +77,17 @@ Extended filter operators to manipulate the current list. return results.slice(count).concat(results.slice(0, count)); }; +/* + Moves the item named in the operand a number of places forward or backward in the list + */ + exports.move = function (source, operator, options) { + var results = prepare_results(source), + index = results.indexOf(operator.operand), + count = parseInt(operator.suffix) || 1, + marker = results.splice(index, 1); + return results.slice(0, index + count).concat(marker).concat(results.slice(index + count)); + }; + /* Returns the items from the current list that are after the item named in the operand */ @@ -87,9 +98,9 @@ Extended filter operators to manipulate the current list. return []; } if (operator.suffix) { - return results.slice(index - 1); + return results.slice(index); } - return results.slice(index); + return results.slice(index + 1); }; /* From a089fb94a6b3bb6ba923eb39b8cdf020a1f5498f Mon Sep 17 00:00:00 2001 From: Jermolene Date: Thu, 22 Oct 2015 22:46:47 +0100 Subject: [PATCH 039/242] Add clean.sh for removing build output We use a regex to delete all files in `./editions/*/output/*` --- bin/clean.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 bin/clean.sh diff --git a/bin/clean.sh b/bin/clean.sh new file mode 100755 index 000000000..b282f332c --- /dev/null +++ b/bin/clean.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Remove any output files + +find . -regex "^./editions/[a-z\.-]*/output/.*" -delete From 52022691f95d8d8a9fb49009fddee3d5d91f17e2 Mon Sep 17 00:00:00 2001 From: Myeongjin Lee Date: Fri, 23 Oct 2015 17:24:55 +0900 Subject: [PATCH 040/242] Update korean translation --- languages/ko-KR/Buttons.multids | 12 +++++++++++- languages/ko-KR/ControlPanel.multids | 3 +++ languages/ko-KR/GettingStarted.tid | 17 ++++++++++------- languages/ko-KR/Help/password.tid | 1 + languages/ko-KR/Help/rendertiddler.tid | 4 ++-- languages/ko-KR/Help/rendertiddlers.tid | 2 +- languages/ko-KR/Help/savetiddlers.tid | 4 +++- languages/ko-KR/Misc.multids | 5 ++++- languages/ko-KR/SiteTitle.tid | 2 +- 9 files changed, 36 insertions(+), 14 deletions(-) diff --git a/languages/ko-KR/Buttons.multids b/languages/ko-KR/Buttons.multids index ae4ec2962..9077cf850 100644 --- a/languages/ko-KR/Buttons.multids +++ b/languages/ko-KR/Buttons.multids @@ -30,6 +30,12 @@ ExportTiddler/Caption: 티들러 내보내기 ExportTiddler/Hint: 티들러를 내보냅니다 ExportTiddlers/Caption: 여러 티들러 내보내기 ExportTiddlers/Hint: 여러 티들러를 내보냅니다 +Fold/Caption: 티들러 접기 +Fold/Hint: 이 티들러의 본문을 접습니다 +FoldAll/Caption: 모든 티들러 접기 +FoldAll/Hint: 모든 열린 티들러의 본문을 접습니다 +FoldOthers/Caption: 다른 티들러 접기 +FoldOthers/Hint: 다른 열린 티들러의 본문을 접습니다 FullScreen/Caption: 전체 화면 FullScreen/Hint: 전체 화면 모드에 들어가거나 떠납니다 Help/Caption: 도움말 @@ -39,7 +45,7 @@ HideSideBar/Hint: 사이드바를 숨깁니다 Home/Caption: 홈 Home/Hint: 기본 티들러를 엽니다 Import/Caption: 가져오기 -Import/Hint: 파일을 가져옵니다 +Import/Hint: 텍스트, 그림, TiddlyWiki 또는 JSON을 포함한 여러 파일의 형식을 가져옵니다 Info/Caption: 정보 Info/Hint: 이 티들러에 대한 정보를 보여줍니다 Language/Caption: 언어 @@ -76,3 +82,7 @@ TagManager/Caption: 태그 관리자 TagManager/Hint: 태그 관리자를 엽니다 Theme/Caption: 테마 Theme/Hint: 보일 테마를 선택합니다 +Unfold/Caption: 티들러 펼치기 +Unfold/Hint: 이 티들러의 본문을 펼칩니다 +UnfoldAll/Caption: 모든 티들러 펼치기 +UnfoldAll/Hint: 모든 열린 티들러의 본문을 펼칩니다 diff --git a/languages/ko-KR/ControlPanel.multids b/languages/ko-KR/ControlPanel.multids index a2edb0f3c..3297a14f8 100644 --- a/languages/ko-KR/ControlPanel.multids +++ b/languages/ko-KR/ControlPanel.multids @@ -101,6 +101,9 @@ Settings/NavigationHistory/Caption: 둘러보기 역사 Settings/NavigationHistory/Hint: 티들러로 둘러보기할 때 둘러보기 역사를 업데이트합니다: Settings/NavigationHistory/No/Description: 역사를 업데이트하지 않음 Settings/NavigationHistory/Yes/Description: 역사를 업데이트 +Settings/PerformanceInstrumentation/Caption: 성능 계측 +Settings/PerformanceInstrumentation/Description: 성능 계측 활성화 +Settings/PerformanceInstrumentation/Hint: 브라우저 개발자 콘솔에서 성능 통계를 보여줍니다. 적용하려면 다시 불러와야 합니다 Settings/TitleLinks/Caption: 티들러 제목 Settings/TitleLinks/Hint: 티들러 제목을 링크로 선택적으로 보여줍니다 Settings/TitleLinks/No/Description: 티들러 제목을 링크로 보여주지 않음 diff --git a/languages/ko-KR/GettingStarted.tid b/languages/ko-KR/GettingStarted.tid index a5c5f3f96..aa1a0357c 100644 --- a/languages/ko-KR/GettingStarted.tid +++ b/languages/ko-KR/GettingStarted.tid @@ -1,14 +1,17 @@ title: GettingStarted -TiddlyWiki와 TiddlyWiki 공동체에 오신 것을 환영합니다 +\define lingo-base() $:/language/ControlPanel/Basics/ +~TiddlyWiki와 ~TiddlyWiki 공동체에 오신 것을 환영합니다 -TiddlyWiki에 중요한 정보를 저장하는 것을 시작하기 전에 확실히 바뀜을 저장할 수 있는지 확인하는 것이 중요합니다. 자세한 사항은 http://tiddlywiki.com/#GettingStarted 를 참조하세요 +~TiddlyWiki에 중요한 정보를 저장하는 것을 시작하기 전에 확실히 바뀜을 저장할 수 있는지 확인하는 것이 중요합니다. 자세한 사항은 http://tiddlywiki.com/#GettingStarted 를 참조하세요 -!! 이 TiddlyWiki 설정하기 +!! 이 ~TiddlyWiki 설정하기 - HelloThere -$:/Translators -$:/plugins/tiddlywiki/translators/readme +
    +|<$link to="$:/SiteTitle"><> |<$edit-text tiddler="$:/SiteTitle" default="" tag="input"/> | +|<$link to="$:/SiteSubtitle"><> |<$edit-text tiddler="$:/SiteSubtitle" default="" tag="input"/> | +|<$link to="$:/DefaultTiddlers"><> |<>
    <$edit-text tag="textarea" tiddler="$:/DefaultTiddlers"/>
    //<>// | +
    -더 많은 옵션에 대해서는 제어판을 보세요. +더 많은 옵션에 대해서는 [[제어판|$:/ControlPanel]]을 보세요. diff --git a/languages/ko-KR/Help/password.tid b/languages/ko-KR/Help/password.tid index daeca801b..95b9307d6 100644 --- a/languages/ko-KR/Help/password.tid +++ b/languages/ko-KR/Help/password.tid @@ -7,3 +7,4 @@ description: 후속 암호화 조작을 하기 위해 비밀번호를 설정합 --password <비밀번호> ``` +''참고'': 이것은 비밀번호로 보호된 TiddlyWiki를 서버에 넣어 사용해서는 안됩니다. 대신, [[ServerCommand]]에 따른 비밀번호 옵션을 보세요. diff --git a/languages/ko-KR/Help/rendertiddler.tid b/languages/ko-KR/Help/rendertiddler.tid index 8597257a5..274df90ac 100644 --- a/languages/ko-KR/Help/rendertiddler.tid +++ b/languages/ko-KR/Help/rendertiddler.tid @@ -1,10 +1,10 @@ title: $:/language/Help/rendertiddler description: 지정된 내용형식으로 개별 티들러를 렌더합니다 -지정된 내용형식으로 개별 티들러를 렌더합니다, 기본값은 `text/html`이며 지정된 파일이름으로 저장합니다: +지정된 내용형식으로 개별 티들러를 렌더합니다, 기본값은 `text/html`이며 지정된 파일이름으로 저장합니다. 선택적으로 틀을 지정할 수 있으며, 이 경우 틀 티들러가 렌더되는 티들러로 "currentTiddler" 변수 집합으로 렌더됩니다. (첫 매개변수 값) ``` ---rendertiddler <제목> <파일이름> [<형식>] +--rendertiddler <제목> <파일이름> [<형식>] [<틀>] ``` 기본적으로, 파일이름은 에디션 디렉터리의 `output` 하위 디렉터리로 상대적으로 해석됩니다. `--output` 명령은 다른 디렉터리로 직접 출력하는 데 사용할 수 있습니다. diff --git a/languages/ko-KR/Help/rendertiddlers.tid b/languages/ko-KR/Help/rendertiddlers.tid index b9eb62fd7..1c8653ae3 100644 --- a/languages/ko-KR/Help/rendertiddlers.tid +++ b/languages/ko-KR/Help/rendertiddlers.tid @@ -15,4 +15,4 @@ description: 지정된 내용형식으로 필터와 일치하는 티들러를 기본적으로, 경로이름은 에디션 디렉터리의 `output` 하위 디렉터리로 상대적으로 해석됩니다. `--output` 명령은 다른 디렉터리로 직접 출력하는 데 사용할 수 있습니다. -noclean 매개변수를 지정하지 않는 한 대상 디렉터리의 모든 파일이 삭제됩니다. 대상 디렉터리가 없으면 재귀적으로 만들어집니다. +''noclean'' 플래그를 지정하지 않는 한 대상 디렉터리의 모든 파일이 삭제됩니다. 대상 디렉터리가 없으면 재귀적으로 만들어집니다. diff --git a/languages/ko-KR/Help/savetiddlers.tid b/languages/ko-KR/Help/savetiddlers.tid index ab8207b94..026a14019 100644 --- a/languages/ko-KR/Help/savetiddlers.tid +++ b/languages/ko-KR/Help/savetiddlers.tid @@ -4,9 +4,11 @@ description: 디렉터리로의 raw 티들러의 그룹을 저장합니다 지정한 디렉터리로 raw 텍스트 또는 바이너리 형식의 티들러의 그룹을 저장합니다. ``` ---savetiddlers <필터> <경로이름> +--savetiddlers <필터> <경로이름> ["noclean"] ``` 기본적으로, 경로이름은 에디션 디렉터리의 `output` 하위 디렉터리로 상대적으로 해석됩니다. `--output` 명령은 다른 디렉터리로 직접 출력하는 데 사용할 수 있습니다. +출력 디렉터리에는 지정된 파일을 저장하기 전에 기존 파일이 지워집니다. 삭제는 ''noclean'' 플래그를 지정하여 비활성화할 수 있습니다. + 경로이름에 없는 디렉터리는 자동으로 만들어집니다. diff --git a/languages/ko-KR/Misc.multids b/languages/ko-KR/Misc.multids index 22c3b9eb4..a9855b6d9 100644 --- a/languages/ko-KR/Misc.multids +++ b/languages/ko-KR/Misc.multids @@ -1,5 +1,6 @@ title: $:/language/ +AboveStory/ClassicPlugin/Warning: ~TiddlyWiki 클래식용으로 설계된 플러그인을 불러오려고 하는 것 같아 보입니다. [[이러한 플러그인은 TiddlyWiki 버전 5.x.x에 동작하지 않음|http://tiddlywiki.com/#TiddlyWikiClassic]]을 참고하세요. ~TiddlyWiki 클래식 플러그인이 감지되었습니다: BinaryWarning/Prompt: 이 티들러는 바이너리 데이터를 포함합니다 ClassicWarning/Hint: 이 티들러는 TiddlyWiki 클래식 위키 텍스트 형식으로 쓰여져 있으며, TiddlyWiki 버전 5와 완전히 호환되지 않습니다. 자세한 사항은 http://tiddlywiki.com/static/Upgrading.html 을 참조하세요. ClassicWarning/Upgrade/Caption: 업그레이드 @@ -22,9 +23,10 @@ Exporters/CsvFile: CSV 파일 Exporters/JsonFile: JSON 파일 Exporters/StaticRiver: 정적 HTML Exporters/TidFile: ".tid" 파일 -InternalJavaScriptError/Title: 내부 자바스크립트 오류 InternalJavaScriptError/Hint: 아이 창피해. 브라우저를 새로 고쳐 TiddlyWiki를 다시 시작할 것을 권장합니다 +InternalJavaScriptError/Title: 내부 자바스크립트 오류 InvalidFieldName: "<$text text=<>/>" 필드 이름에 잘못된 문자가 있습니다. 필드는 소문자, 숫자 및 밑줄 문자 (`_`), 하이픈 (`-`) 및 마침표 (`.`)만을 포함할 수 있습니다. +LazyLoadingWarning:

    ''<$text text={{!!_canonical_uri}}/>''에서 바깥 텍스트를 불러오는 중입니다

    이 메시지가 사라지지 않으면 이 구성에서 바깥 텍스트를 지원하지 않는 브라우저를 사용하고 있을 수 있습니다. http://tiddlywiki.com/#ExternalText 를 보세요

    MissingTiddler/Hint: "<$text text=<>/>" 티들러가 없습니다 - 만드려면 {{$:/core/images/edit-button}}을 클릭하세요 OfficialPluginLibrary: 공식 ~TiddlyWiki 플러그인 라이브러리 OfficialPluginLibrary/Hint: tiddlywiki.com에서의 공식 ~TiddlyWiki 플러그인 라이브러리입니다. 플러그인, 테마 및 언어 팩은 코어 팀이 유지 관리하고 있습니다. @@ -36,4 +38,5 @@ TagManager/Count/Heading: 횟수 TagManager/Icon/Heading: 아이콘 TagManager/Info/Heading: 정보 TagManager/Tag/Heading: 태그 +Tiddler/DateFormat: YYYY년 MMM DD일 am hh12:mm UnsavedChangesWarning: TiddlyWiki에 저장하지 않은 바뀜이 있습니다 diff --git a/languages/ko-KR/SiteTitle.tid b/languages/ko-KR/SiteTitle.tid index bb2ac6d58..677110f30 100644 --- a/languages/ko-KR/SiteTitle.tid +++ b/languages/ko-KR/SiteTitle.tid @@ -1,3 +1,3 @@ title: $:/SiteTitle -내 TiddlyWiki \ No newline at end of file +내 ~TiddlyWiki \ No newline at end of file From ba15086381c9ffae589e82f1b0dff9bd596f41b9 Mon Sep 17 00:00:00 2001 From: Jermolene Date: Fri, 23 Oct 2015 17:54:59 +0100 Subject: [PATCH 041/242] Remove extraneous apostrophe Thanks @paul-cross (2354271723243753a8a19c6181d4822592d02a3e) --- editions/tw5.com/tiddlers/hellothere/Discover TiddlyWiki.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/hellothere/Discover TiddlyWiki.tid b/editions/tw5.com/tiddlers/hellothere/Discover TiddlyWiki.tid index ca8d25c5c..d1b0adc64 100644 --- a/editions/tw5.com/tiddlers/hellothere/Discover TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/hellothere/Discover TiddlyWiki.tid @@ -1,5 +1,5 @@ created: 20140904121000000 -modified: 20150414072046785 +modified: 20151023165341339 tags: HelloThere title: Discover TiddlyWiki type: text/vnd.tiddlywiki @@ -13,7 +13,7 @@ You've never seen //anything// like ~TiddlyWiki. ~TiddlyWiki is: ! ~TiddlyWiki is a Tool -''~TiddlyWiki is first and foremost a tool:'' it is a free downloadable tool for capturing and organising content from the web, from your documents or from your brain. Its a tool for note-taking, bookmarking, pinning, writing, managing to-do lists and projects, collaborating, blogging, and publishing. +''~TiddlyWiki is first and foremost a tool:'' it is a free downloadable tool for capturing and organising content from the web, from your documents or from your brain. It is a tool for note-taking, bookmarking, pinning, writing, managing to-do lists and projects, collaborating, blogging, and publishing. In ~TiddlyWiki you create or paste content into notes called tiddlers, then connect your tiddlers with hyperlinks and tags. You can then quickly retrieve your notes through features such as tag pills, sidebar tabs, and ~TiddlyWiki's lightning fast search window. You can even dynamically include one tiddler's content inside another - similar to using building blocks - to create articles, lists, presentations and more. From 717e9ae9137fad687b74eae88e454ed55fb633b8 Mon Sep 17 00:00:00 2001 From: Evolena Date: Sat, 24 Oct 2015 12:01:43 +0200 Subject: [PATCH 042/242] Better wording and naming --- plugins/tiddlywiki/text-slicer/docs.tid | 2 +- plugins/tiddlywiki/text-slicer/modules/slicers/definition.js | 4 ++-- plugins/tiddlywiki/text-slicer/modules/slicers/term.js | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/tiddlywiki/text-slicer/docs.tid b/plugins/tiddlywiki/text-slicer/docs.tid index 98f5edbf7..f08e5c9d7 100644 --- a/plugins/tiddlywiki/text-slicer/docs.tid +++ b/plugins/tiddlywiki/text-slicer/docs.tid @@ -151,7 +151,7 @@ Definition lists are represented by several tiddlers: one for the definition lis The tiddler representing the definition list itself has the following fields: * ''toc-type'': the text "def-list" -* ''toc-list-filter'': the default filter used to generate the titles of the list-items +* ''toc-list-filter'': the default filter used to generate the titles of the definition list items * ''title'': an automatically generated unique title * ''list'': ordered list of titles of tiddlers representing the items (terms and/or definition) in the definition list * ''tags'': any CSS classes found in the HTML are converted into tags diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js b/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js index dc9a6d601..dc4d064c6 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js @@ -3,7 +3,7 @@ title: $:/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js type: application/javascript module-type: slicer -Handle slicing definition list definition nodes +Handle slicing definition nodes in definition lists \*/ (function(){ @@ -12,7 +12,7 @@ Handle slicing definition list definition nodes /*global $tw: false */ "use strict"; -exports.processDefinitionItemNode = function(domNode,tagName) { +exports.processDefinitionNode = function(domNode,tagName) { var text = $tw.utils.htmlEncode(domNode.textContent); if(domNode.nodeType === 1 && tagName === "dd") { // if(!this.isBlank(text)) { diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/term.js b/plugins/tiddlywiki/text-slicer/modules/slicers/term.js index 0f340b60e..d72875e18 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/term.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/term.js @@ -3,7 +3,7 @@ title: $:/plugins/tiddlywiki/text-slicer/modules/slicers/term.js type: application/javascript module-type: slicer -Handle slicing definition list term nodes +Handle slicing term nodes in definition lists \*/ (function(){ @@ -12,7 +12,7 @@ Handle slicing definition list term nodes /*global $tw: false */ "use strict"; -exports.processTermItemNode = function(domNode,tagName) { +exports.processTermNode = function(domNode,tagName) { var text = $tw.utils.htmlEncode(domNode.textContent); if(domNode.nodeType === 1 && tagName === "dt") { // if(!this.isBlank(text)) { From 0d6450cfb5e51915416449143bef1c4ae2517251 Mon Sep 17 00:00:00 2001 From: afeldspar Date: Sat, 24 Oct 2015 09:52:03 -0400 Subject: [PATCH 043/242] fix typo in FilterRun.tid diagram corrected typo in the railroad diagram, which showed a double-quote where a single-quote should have been. --- editions/tw5.com/tiddlers/filters/syntax/FilterRun.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/filters/syntax/FilterRun.tid b/editions/tw5.com/tiddlers/filters/syntax/FilterRun.tid index 640891906..e3843b492 100644 --- a/editions/tw5.com/tiddlers/filters/syntax/FilterRun.tid +++ b/editions/tw5.com/tiddlers/filters/syntax/FilterRun.tid @@ -11,7 +11,7 @@ type: text/vnd.tiddlywiki | '"' [:{/'anything but "'/}] '"' | - "'" [:{/"anything but '"/}] '"' + "'" [:{/"anything but '"/}] "'" ) """/> From 7ecaba9a65de232adc19a47d7a307b1aa97e612c Mon Sep 17 00:00:00 2001 From: Jermolene Date: Sat, 24 Oct 2015 19:14:29 +0100 Subject: [PATCH 044/242] Update release note --- editions/prerelease/tiddlers/Release 5.1.10.tid | 2 ++ 1 file changed, 2 insertions(+) diff --git a/editions/prerelease/tiddlers/Release 5.1.10.tid b/editions/prerelease/tiddlers/Release 5.1.10.tid index af1488fb2..7b394fa7a 100644 --- a/editions/prerelease/tiddlers/Release 5.1.10.tid +++ b/editions/prerelease/tiddlers/Release 5.1.10.tid @@ -114,6 +114,7 @@ Revert [[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki: +* [[@afeldspar|https://github.com/afeldspar]] * [[@araname|https://github.com/araname]] * [[@BramChen|https://github.com/BramChen]] * [[@danielo515|https://github.com/danielo515]] @@ -123,6 +124,7 @@ Revert * [[@inmysocks|https://github.com/inmysocks]] * [[@matabele|https://github.com/matabele]] * [[@nameanyone|https://github.com/nameanyone]] +* [[@senevoldsen90|https://github.com/senevoldsen90]] * [[@SuperDOS|https://github.com/SuperDOS]] * [[@tgrosinger|https://github.com/tgrosinger]] * [[@tobibeer|https://github.com/tobibeer]] From e6963cbccd5846869cc6deb8963771fe326e86da Mon Sep 17 00:00:00 2001 From: Bram Chen Date: Sun, 25 Oct 2015 11:25:09 +0800 Subject: [PATCH 045/242] Remove extraneous spaces --- languages/zh-Hans/Help/server.tid | 2 +- languages/zh-Hans/Help/verbose.tid | 2 +- languages/zh-Hant/Help/server.tid | 2 +- languages/zh-Hant/Help/verbose.tid | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/languages/zh-Hans/Help/server.tid b/languages/zh-Hans/Help/server.tid index ca7fadbcc..8ac221f41 100644 --- a/languages/zh-Hans/Help/server.tid +++ b/languages/zh-Hans/Help/server.tid @@ -12,7 +12,7 @@ description: 提供一个 HTTP 服务器介面到 TiddlyWiki 参数说明: * ''port'' - 服务的埠号 (默认为 "8080") -* ''roottiddler'' - 服务的基本条目 (默认为 "$:/core/save/all") +* ''roottiddler'' - 服务的基本条目 (默认为 "$:/core/save/all") * ''rendertype'' - 呈现的基本条目内容类型 (默认为 "text/plain") * ''servetype'' - 服务的基本条目内容类型(默认为 "text/html") * ''username'' - 默认的编辑者署名 diff --git a/languages/zh-Hans/Help/verbose.tid b/languages/zh-Hans/Help/verbose.tid index dfa8f5ed2..955e640b1 100644 --- a/languages/zh-Hans/Help/verbose.tid +++ b/languages/zh-Hans/Help/verbose.tid @@ -1,7 +1,7 @@ title: $:/language/Help/verbose description: 触发详细的输出模式 -触发显示详细的命令执行过程,可用于调试 +触发显示详细的命令执行过程,可用于调试 ``` --verbose diff --git a/languages/zh-Hant/Help/server.tid b/languages/zh-Hant/Help/server.tid index 4911bf974..1ac2224cd 100644 --- a/languages/zh-Hant/Help/server.tid +++ b/languages/zh-Hant/Help/server.tid @@ -12,7 +12,7 @@ description: 提供一個 HTTP 伺服器介面到 TiddlyWiki 參數說明: * ''port'' - 服務的埠號 (預設為 "8080") -* ''roottiddler'' - 服務的基本條目 (預設為 "$:/core/save/all") +* ''roottiddler'' - 服務的基本條目 (預設為 "$:/core/save/all") * ''rendertype'' - 呈現的基本條目內容類型 (預設為 "text/plain") * ''servetype'' - 服務的基本條目內容類型(預設為 "text/html") * ''username'' - 預設的編輯者署名 diff --git a/languages/zh-Hant/Help/verbose.tid b/languages/zh-Hant/Help/verbose.tid index d54b84ad9..702b3508d 100644 --- a/languages/zh-Hant/Help/verbose.tid +++ b/languages/zh-Hant/Help/verbose.tid @@ -1,7 +1,7 @@ title: $:/language/Help/verbose description: 觸發詳細的輸出模式 -觸發顯示詳細的命令執行過程,可用於偵錯 +觸發顯示詳細的命令執行過程,可用於偵錯 ``` --verbose From a6fe696269f11b89b43a7fa35414c78da18afa40 Mon Sep 17 00:00:00 2001 From: Bram Chen Date: Sun, 25 Oct 2015 12:24:36 +0800 Subject: [PATCH 046/242] Update chinese translations for the recently new localisable strings --- languages/zh-Hans/ControlPanel.multids | 3 +++ languages/zh-Hans/Import.multids | 1 + languages/zh-Hans/Misc.multids | 5 ++++- languages/zh-Hans/Search.multids | 3 +++ languages/zh-Hant/ControlPanel.multids | 3 +++ languages/zh-Hant/Import.multids | 1 + languages/zh-Hant/Misc.multids | 5 ++++- languages/zh-Hant/Search.multids | 3 +++ 8 files changed, 22 insertions(+), 2 deletions(-) diff --git a/languages/zh-Hans/ControlPanel.multids b/languages/zh-Hans/ControlPanel.multids index d1bcfea4d..d2b25b534 100644 --- a/languages/zh-Hans/ControlPanel.multids +++ b/languages/zh-Hans/ControlPanel.multids @@ -47,11 +47,14 @@ Plugins/Disabled/Status: (已禁用) Plugins/Empty/Hint: 无 Plugins/Enable/Caption: 启用 Plugins/Enable/Hint: 重新加载页面时启用此插件 +Plugins/Install: 安装 Plugins/Installed/Hint: 当前已安装的插件: Plugins/Languages/Caption: 语言 Plugins/Languages/Hint: 语言包插件 +Plugins/OpenPluginLibrary: 开启插件程式库 Plugins/Plugins/Caption: 插件 Plugins/Plugins/Hint: 插件 +Plugins/Reinstall: 重新安装 Plugins/Themes/Caption: 布景主题 Plugins/Themes/Hint: 布景主题插件 Parsing/Caption: 解析 diff --git a/languages/zh-Hans/Import.multids b/languages/zh-Hans/Import.multids index 1a28d3f83..f01383b87 100644 --- a/languages/zh-Hans/Import.multids +++ b/languages/zh-Hans/Import.multids @@ -1,5 +1,6 @@ title: $:/language/Import/ +Imported: 下列条目已被导入: Listing/Cancel/Caption: 取消 Listing/Hint: 这些条目已备妥导入: Listing/Import/Caption: 导入 diff --git a/languages/zh-Hans/Misc.multids b/languages/zh-Hans/Misc.multids index 8cc476752..b05898fad 100644 --- a/languages/zh-Hans/Misc.multids +++ b/languages/zh-Hans/Misc.multids @@ -19,10 +19,13 @@ Encryption/PromptSetPassword: 为此 TiddlyWiki 设置一个新密码 Encryption/RepeatPassword: 重复输入密码 Encryption/PasswordNoMatch: 密码不匹配 Encryption/SetPassword: 设定密码 +InternalJavaScriptError/Title: 内部的 JavaScript 错误 +InternalJavaScriptError/Hint: 喔,真是令人尴尬。建议刷新您的浏览器,重新启动 TiddlyWiki InvalidFieldName: 栏位名称 "<$text text=<>/>" 包含无效字符,栏位名称只能包含小写字母、数字、底线 (`_`)、 连字号 (`-`) 和小数点 (`.`) LazyLoadingWarning:

    正在从 ''<$text text={{!!_canonical_uri}}/>'' 加载外部条目 ...

    如果此信息未消失,可能您使用的浏览器不支援此配置的外部条目。请参阅 http://tiddlywiki.com/#ExternalText

    MissingTiddler/Hint: 佚失条目 "<$text text=<>/>" - 点击 {{$:/core/images/edit-button}} 可创建此条目 -OfficialPluginLibrary: 官方 ~TiddlyWiki 插件程式库 +OfficialPluginLibrary: ~TiddlyWiki 官方插件程式库 +OfficialPluginLibrary/Hint: 此为在 tiddlywiki.com 的 ~TiddlyWiki 官方插件程式库。由核心团队维护的插件、主题和语言包。 PluginReloadWarning: 请保存 {{$:/core/ui/Buttons/save-wiki}} 并刷新页面 {{$:/core/ui/Buttons/refresh}} 允许更改插件才能生效 RecentChanges/DateFormat: YYYY年0MM月0DD日 SystemTiddler/Tooltip: 此为系统条目 diff --git a/languages/zh-Hans/Search.multids b/languages/zh-Hans/Search.multids index e7e3a4aad..d3e2f570e 100644 --- a/languages/zh-Hans/Search.multids +++ b/languages/zh-Hans/Search.multids @@ -5,6 +5,9 @@ Filter/Caption: 筛选 Filter/Hint: 以[[筛选表达式|http://tiddlywiki.com/static/Filters.html]]查找 Filter/Matches: //<> 个条目符合条件// Matches: //<> 个条目符合条件// +Matches/All: 所有匹配: +Matches/Title: 条目名称匹配: +Search: 查找 Shadows/Caption: 默认 Shadows/Hint: 查找默认条目 Shadows/Matches: //<> 个条目符合条件// diff --git a/languages/zh-Hant/ControlPanel.multids b/languages/zh-Hant/ControlPanel.multids index 776742594..7871cda11 100644 --- a/languages/zh-Hant/ControlPanel.multids +++ b/languages/zh-Hant/ControlPanel.multids @@ -47,11 +47,14 @@ Plugins/Disabled/Status: (已停用) Plugins/Empty/Hint: 無 Plugins/Enable/Caption: 啟用 Plugins/Enable/Hint: 重新載入頁面時啟用此插件 +Plugins/Install: 安裝 Plugins/Installed/Hint: 當前已安裝的插件: Plugins/Languages/Caption: 語言 Plugins/Languages/Hint: 語言包插件 +Plugins/OpenPluginLibrary: 開啟插件程式庫 Plugins/Plugins/Caption: 插件 Plugins/Plugins/Hint: 插件 +Plugins/Reinstall: 重新安裝 Plugins/Themes/Caption: 佈景主題 Plugins/Themes/Hint: 佈景主題插件 Parsing/Caption: 解析 diff --git a/languages/zh-Hant/Import.multids b/languages/zh-Hant/Import.multids index df05389aa..c19b5288b 100644 --- a/languages/zh-Hant/Import.multids +++ b/languages/zh-Hant/Import.multids @@ -1,5 +1,6 @@ title: $:/language/Import/ +Imported: 下列條目已被導入: Listing/Cancel/Caption: 取消 Listing/Hint: 這些條目已備妥導入: Listing/Import/Caption: 導入 diff --git a/languages/zh-Hant/Misc.multids b/languages/zh-Hant/Misc.multids index 0f9982ed9..4a8d92f13 100644 --- a/languages/zh-Hant/Misc.multids +++ b/languages/zh-Hant/Misc.multids @@ -19,10 +19,13 @@ Encryption/PromptSetPassword: 為此 TiddlyWiki 設定一個新密碼 Encryption/RepeatPassword: 重複輸入密碼 Encryption/PasswordNoMatch: 密碼不匹配 Encryption/SetPassword: 設定密碼 +InternalJavaScriptError/Title: 內部的 JavaScript 錯誤 +InternalJavaScriptError/Hint: 喔,真是令人尷尬。建議刷新您的瀏覽器,重新啟動 TiddlyWiki InvalidFieldName: 欄位名稱 "<$text text=<>/>" 包含無效字元,欄位名稱只能包含小寫字母、數字、底線 (`_`)、 連接號 (`-`) 和小數點 (`.`) LazyLoadingWarning:

    正在從 ''<$text text={{!!_canonical_uri}}/>'' 載入外部條目 ...

    如果此訊息未消失,可能您使用的瀏覽器不支援此配置的外部條目。請參閱 http://tiddlywiki.com/#ExternalText

    MissingTiddler/Hint: 佚失條目 "<$text text=<>/>" - 點擊 {{$:/core/images/edit-button}} 可建立此條目 -OfficialPluginLibrary: 官方 ~TiddlyWiki 插件程式庫 +OfficialPluginLibrary: ~TiddlyWiki 官方插件程式庫 +OfficialPluginLibrary/Hint: 此為在 tiddlywiki.com 的 ~TiddlyWiki 官方插件程式庫。由核心團隊維護的插件、主題和語言包。 PluginReloadWarning: 請儲存 {{$:/core/ui/Buttons/save-wiki}} 並刷新頁面 {{$:/core/ui/Buttons/refresh}} 允許更改插件才能生效 RecentChanges/DateFormat: YYYY年0MM月0DD日 SystemTiddler/Tooltip: 此為系統條目 diff --git a/languages/zh-Hant/Search.multids b/languages/zh-Hant/Search.multids index 30682aeff..ba33cd35e 100644 --- a/languages/zh-Hant/Search.multids +++ b/languages/zh-Hant/Search.multids @@ -5,6 +5,9 @@ Filter/Caption: 篩選 Filter/Hint: 以[[篩選表達式|http://tiddlywiki.com/static/Filters.html]]搜尋 Filter/Matches: //<> 個條目符合條件// Matches: //<> 個條目符合條件// +Matches/All: 所有匹配: +Matches/Title: 條目名稱匹配: +Search: 搜尋 Shadows/Caption: 預設 Shadows/Hint: 尋找預設條目 Shadows/Matches: //<> 個條目符合條件// From c0de553370a7984f8e8b79b2c97fce7ec7100646 Mon Sep 17 00:00:00 2001 From: Tony Grosinger Date: Sun, 25 Oct 2015 13:56:21 -0700 Subject: [PATCH 047/242] Fix typo which prevented example from working --- editions/dev/tiddlers/from Heigele and Jurke/Parser.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/dev/tiddlers/from Heigele and Jurke/Parser.tid b/editions/dev/tiddlers/from Heigele and Jurke/Parser.tid index 6d9ac1b58..3b132dc47 100644 --- a/editions/dev/tiddlers/from Heigele and Jurke/Parser.tid +++ b/editions/dev/tiddlers/from Heigele and Jurke/Parser.tid @@ -12,7 +12,7 @@ The parse-tree consists of nested nodes like ```js {type: "element", tag: , attributes: {}, children: []} - an HTML element {type: "text", text: } - a text node -{type: "entity", value: } - an HTML entity like © for a copyright symbol +{type: "entity", entity: } - an HTML entity like © for a copyright symbol {type: "raw", html: } - raw HTML ``` @@ -37,4 +37,4 @@ Attributes in the parse-tree are not stored as simple strings but they are nodes ```js {type: "string", value: } - literal string {type: "indirect", textReference: } - indirect through a text reference -``` \ No newline at end of file +``` From 41287d785975dcbb159e2e0b8f974b1067e9c580 Mon Sep 17 00:00:00 2001 From: Jermolene Date: Sun, 25 Oct 2015 23:13:26 +0000 Subject: [PATCH 048/242] Update Russian translation --- languages/ru-RU/Buttons.multids | 35 ++++++---- languages/ru-RU/ControlPanel.multids | 33 +++++++++- languages/ru-RU/CoreReadMe.tid | 8 +++ languages/ru-RU/Dates.multids | 66 +++++++++---------- languages/ru-RU/Docs/Fields.multids | 6 +- languages/ru-RU/Docs/PaletteColours.multids | 48 +++++++------- languages/ru-RU/EditTemplate.multids | 8 ++- languages/ru-RU/Filters.multids | 13 ++-- languages/ru-RU/GettingStarted.tid | 6 +- languages/ru-RU/Misc.multids | 15 ++++- languages/ru-RU/NewJournal.multids | 2 +- languages/ru-RU/SiteTitle.tid | 2 +- languages/ru-RU/TiddlerInfo.multids | 2 +- ...cript.tid => application%2Fjavascript.tid} | 0 ...cation_json.tid => application%2Fjson.tid} | 0 ...=> application%2Fx-tiddler-dictionary.tid} | 0 .../Types/{image_gif.tid => image%2Fgif.tid} | 0 .../{image_jpeg.tid => image%2Fjpeg.tid} | 0 .../Types/{image_png.tid => image%2Fpng.tid} | 0 ...mage_svg_xml.tid => image%2Fsvg%2Bxml.tid} | 0 .../{image_x-icon.tid => image%2Fx-icon.tid} | 0 .../Types/{text_css.tid => text%2Fcss.tid} | 0 .../Types/{text_html.tid => text%2Fhtml.tid} | 0 .../{text_plain.tid => text%2Fplain.tid} | 0 ...ddlywiki.tid => text%2Fvnd.tiddlywiki.tid} | 0 ...tiddlywiki.tid => text%2Fx-tiddlywiki.tid} | 0 languages/ru-RU/plugin.info | 2 +- 27 files changed, 156 insertions(+), 90 deletions(-) create mode 100644 languages/ru-RU/CoreReadMe.tid rename languages/ru-RU/Types/{application_javascript.tid => application%2Fjavascript.tid} (100%) rename languages/ru-RU/Types/{application_json.tid => application%2Fjson.tid} (100%) rename languages/ru-RU/Types/{application_x_tiddler_dictionary.tid => application%2Fx-tiddler-dictionary.tid} (100%) rename languages/ru-RU/Types/{image_gif.tid => image%2Fgif.tid} (100%) rename languages/ru-RU/Types/{image_jpeg.tid => image%2Fjpeg.tid} (100%) rename languages/ru-RU/Types/{image_png.tid => image%2Fpng.tid} (100%) rename languages/ru-RU/Types/{image_svg_xml.tid => image%2Fsvg%2Bxml.tid} (100%) rename languages/ru-RU/Types/{image_x-icon.tid => image%2Fx-icon.tid} (100%) rename languages/ru-RU/Types/{text_css.tid => text%2Fcss.tid} (100%) rename languages/ru-RU/Types/{text_html.tid => text%2Fhtml.tid} (100%) rename languages/ru-RU/Types/{text_plain.tid => text%2Fplain.tid} (100%) rename languages/ru-RU/Types/{text_vnd.tiddlywiki.tid => text%2Fvnd.tiddlywiki.tid} (100%) rename languages/ru-RU/Types/{text_x-tiddlywiki.tid => text%2Fx-tiddlywiki.tid} (100%) diff --git a/languages/ru-RU/Buttons.multids b/languages/ru-RU/Buttons.multids index 911553b25..7e5a13917 100644 --- a/languages/ru-RU/Buttons.multids +++ b/languages/ru-RU/Buttons.multids @@ -1,5 +1,10 @@ title: $:/language/Buttons/ ++ExportPage/Hint: Экспортировать все заметки ++ExportTiddler/Caption: экспортировать заметку ++ExportTiddler/Hint: Экспортировать заметку ++ExportTiddlers/Caption: экспортировать заметки ++ExportTiddlers/Hint: Экспортировать заметки AdvancedSearch/Caption: расширенный поиск AdvancedSearch/Hint: Расширенный поиск Cancel/Caption: отмена @@ -19,25 +24,29 @@ Delete/Hint: Удалить заметку Edit/Caption: редактировать Edit/Hint: Редактировать заметку Encryption/Caption: шифрование -Encryption/Hint: Установить или сбросить пароль Encryption/ClearPassword/Caption: сбросить пароль Encryption/ClearPassword/Hint: Сбросить пароль и сохранить без использования шифрования +Encryption/Hint: Установить или сбросить пароль Encryption/SetPassword/Caption: установить пароль Encryption/SetPassword/Hint: Установить пароль и включить шифрование ExportPage/Caption: экспортировать всё -+ExportPage/Hint: Экспортировать все заметки -+ExportTiddler/Caption: экспортировать заметку -+ExportTiddler/Hint: Экспортировать заметку -+ExportTiddlers/Caption: экспортировать заметки -+ExportTiddlers/Hint: Экспортировать заметки +ExportPage/Hint: Экспортировать все тиддлеры +ExportTiddler/Caption: экспорт тиддлера +ExportTiddler/Hint: Экспорт тиддлера +ExportTiddlers/Caption: экспорт тиддлеров +ExportTiddlers/Hint: Экспорт тиддлеров FullScreen/Caption: полный экран FullScreen/Hint: Включить или выключить полноэкранный режим +Help/Caption: помощь +Help/Hint: Показать панель помощи +HideSideBar/Caption: скрыть боковую панель +HideSideBar/Hint: Скрыть боковую панель +Home/Caption: главная +Home/Hint: Открыть заметки по умолчанию Import/Caption: импортировать Import/Hint: Импорт файлов Info/Caption: информация Info/Hint: Показать информацию об этой заметке -Home/Caption: главная -Home/Hint: Открыть заметки по умолчанию Language/Caption: язык Language/Hint: Выбрать язык пользовательского интерфейса More/Caption: ещё @@ -50,6 +59,10 @@ NewJournalHere/Caption: дневник здесь NewJournalHere/Hint: Создать новую заметку в дневник, помеченную этой заметкой NewTiddler/Caption: новая заметка NewTiddler/Hint: Создать новую заметку +OpenWindow/Caption: открыть в новом окне +OpenWindow/Hint: Открыть тиддлер в новом окне +Palette/Caption: цветовая схема +Palette/Hint: Выбрать цветовую схему Permalink/Caption: прямая ссылка Permalink/Hint: Показать прямую ссылку на заметку в адресной строке браузера Permaview/Caption: прямая ссылка @@ -60,12 +73,10 @@ Save/Caption: сохранить Save/Hint: Сохранить заметку SaveWiki/Caption: сохранить изменения SaveWiki/Hint: Сохранить изменения -StoryView/Caption: отображение заметок -StoryView/Hint: Выбрать способ отображения заметок -HideSideBar/Caption: скрыть боковую панель -HideSideBar/Hint: Скрыть боковую панель ShowSideBar/Caption: показать боковую панель ShowSideBar/Hint: Показать боковую панель +StoryView/Caption: отображение заметок +StoryView/Hint: Выбрать способ отображения заметок TagManager/Caption: управление метками TagManager/Hint: Открыть панель управления метками Theme/Caption: тема diff --git a/languages/ru-RU/ControlPanel.multids b/languages/ru-RU/ControlPanel.multids index 05f860c7a..d9f57ae85 100644 --- a/languages/ru-RU/ControlPanel.multids +++ b/languages/ru-RU/ControlPanel.multids @@ -10,8 +10,8 @@ Basics/DefaultTiddlers/BottomHint: Заметки, содержащие проб Basics/DefaultTiddlers/Prompt: Открывать при старте: Basics/DefaultTiddlers/TopHint: Выберите заметки открытые при запуске: Basics/Language/Prompt: Привет! Текущий язык: -Basics/NewJournal/Title/Prompt: Заголовок новых заметок дневника Basics/NewJournal/Tags/Prompt: Метки новых заметок дневника +Basics/NewJournal/Title/Prompt: Заголовок новых заметок дневника Basics/OverriddenShadowTiddlers/Prompt: Количество переопределённых встроенных заметок: Basics/ShadowTiddlers/Prompt: Количество встроенных заметок: Basics/Subtitle/Prompt: Подзаголовок: @@ -28,16 +28,18 @@ EditorTypes/Type/Caption: Тип содержимого Info/Caption: Сведения Info/Hint: Сведения об этой TiddlyWiki LoadedModules/Caption: Загруженные модули -LoadedModules/Hint: Это загруженные в настоящий момент модули, ссылающиеся на их исходные заметки. Модули, обозначенные курсивом, не имеют исходных заметок (typically because they were setup during the boot process). +LoadedModules/Hint: Это загруженные в настоящий момент модули, ссылающиеся на их исходные заметки. Модули, обозначенные курсивом, не имеют исходных заметок (обычно, потому что они были установлены во время процесса загрузки). Palette/Caption: Цветовая схема Palette/Editor/Clone/Caption: скопировать Palette/Editor/Clone/Prompt: Перед редактированием рекомендуется скопировать встроенную цветовую схему -Palette/Editor/Prompt/Modified: Эта встроенная цветовая схема изменена Palette/Editor/Prompt: Редактирование +Palette/Editor/Prompt/Modified: Эта встроенная цветовая схема изменена Palette/Editor/Reset/Caption: сброс Palette/HideEditor/Caption: скрыть редактор Palette/Prompt: Текущая цветовая схема: Palette/ShowEditor/Caption: показать редактор +Plugins/Add/Caption: Другие плагины +Plugins/Add/Hint: Установить официальные плагины Plugins/Caption: Плагины Plugins/Disable/Caption: выключить Plugins/Disable/Hint: Выключить этот плагин @@ -45,9 +47,16 @@ Plugins/Disabled/Status: (выключен) Plugins/Empty/Hint: Нет Plugins/Enable/Caption: включить Plugins/Enable/Hint: Выключить этот плагин +Plugins/Installed/Hint: Список установленных плагинов: Plugins/Language/Prompt: Языки +Plugins/Languages/Caption: Языки +Plugins/Languages/Hint: Плагины языковых пакетов Plugins/Plugin/Prompt: Плагины +Plugins/Plugins/Caption: Плагины +Plugins/Plugins/Hint: Плагины Plugins/Theme/Prompt: Темы +Plugins/Themes/Caption: Темы +Plugins/Themes/Hint: Плагины тем Saving/Caption: Сохранение Saving/Heading: Сохранение Saving/TiddlySpot/Advanced/Heading: Расширенные настройки @@ -66,7 +75,16 @@ Settings/AutoSave/Disabled/Description: Не сохранять изменени Settings/AutoSave/Enabled/Description: Сохранять изменения автоматически Settings/AutoSave/Hint: Сохранять изменения автоматически в процессе редактирования Settings/Caption: Настройки +Settings/DefaultSidebarTab/Caption: Стандартная боковая панель +Settings/DefaultSidebarTab/Hint: Определяет какую боковую панель показывать по умолчанию Settings/Hint: Эти настройки позволяют изменить поведение TiddlyWiki. +Settings/LinkToBehaviour/Caption: Открытие Тиддлера +Settings/LinkToBehaviour/InsideRiver/Hint: По ссылке //из// открытых тиддлеров +Settings/LinkToBehaviour/OpenAbove: Открывать выше открытого тиддлера +Settings/LinkToBehaviour/OpenAtBottom: Открывать ниже всех открытых тиддлеров +Settings/LinkToBehaviour/OpenAtTop: Открывать выше всех открытых тиддлеров +Settings/LinkToBehaviour/OpenBelow: Открывать ниже открытого тиддлера +Settings/LinkToBehaviour/OutsideRiver/Hint: По ссылке //вне// открытых тиддлеров Settings/NavigationAddressBar/Caption: Адресная строка браузера Settings/NavigationAddressBar/Hint: Поведение адресной строки браузера при открытии заметки: Settings/NavigationAddressBar/No/Description: Не изменять адресную строку @@ -76,10 +94,19 @@ Settings/NavigationHistory/Caption: История браузера Settings/NavigationHistory/Hint: Обновлять историю браузера при открытии заметки: Settings/NavigationHistory/No/Description: Не обновлять историю Settings/NavigationHistory/Yes/Description: Обновлять историю +Settings/TitleLinks/Caption: Заголовки Тиддлеров +Settings/TitleLinks/Hint: Выборочно показывает заголовки тиддеров как ссылки +Settings/TitleLinks/No/Description: Не показывать заголовки тиддлеров как ссылки +Settings/TitleLinks/Yes/Description: Показывать заголовки тиддлеров как ссылки Settings/ToolbarButtons/Caption: Кнопки Settings/ToolbarButtons/Hint: Внешний вид кнопок: Settings/ToolbarButtons/Icons/Description: Показывать значок Settings/ToolbarButtons/Text/Description: Показывать текст +Settings/ToolbarButtonStyle/Caption: Стиль кнопок панелей +Settings/ToolbarButtonStyle/Hint: Выберите стиль кнопок панелей: +Settings/ToolbarButtonStyle/Styles/Borderless: Без границ +Settings/ToolbarButtonStyle/Styles/Boxed: Внутри квадрата +Settings/ToolbarButtonStyle/Styles/Rounded: Внутри круга StoryView/Caption: Поведение открытых заметок StoryView/Prompt: Текущий вид: Theme/Caption: Тема diff --git a/languages/ru-RU/CoreReadMe.tid b/languages/ru-RU/CoreReadMe.tid new file mode 100644 index 000000000..69f6ccc00 --- /dev/null +++ b/languages/ru-RU/CoreReadMe.tid @@ -0,0 +1,8 @@ +title: $:/core/readme + +Этот плагин содержит компоненты ядра TiddlyWiki, содержащие: + +* коды модуля JavaScript +* Изображения +* Шаблоны, необходимые для создания пользовательского интерфейса TiddlyWiki +* British English (en-GB) переводы локализуемых строк используемых в ядре \ No newline at end of file diff --git a/languages/ru-RU/Dates.multids b/languages/ru-RU/Dates.multids index ad79d0da1..1e53d5a94 100644 --- a/languages/ru-RU/Dates.multids +++ b/languages/ru-RU/Dates.multids @@ -1,36 +1,5 @@ title: $:/language/ -Date/DaySuffix/1: -Date/DaySuffix/2: -Date/DaySuffix/3: -Date/DaySuffix/4: -Date/DaySuffix/5: -Date/DaySuffix/6: -Date/DaySuffix/7: -Date/DaySuffix/8: -Date/DaySuffix/9: -Date/DaySuffix/10: -Date/DaySuffix/11: -Date/DaySuffix/12: -Date/DaySuffix/13: -Date/DaySuffix/14: -Date/DaySuffix/15: -Date/DaySuffix/16: -Date/DaySuffix/17: -Date/DaySuffix/18: -Date/DaySuffix/19: -Date/DaySuffix/20: -Date/DaySuffix/21: -Date/DaySuffix/22: -Date/DaySuffix/23: -Date/DaySuffix/24: -Date/DaySuffix/25: -Date/DaySuffix/26: -Date/DaySuffix/27: -Date/DaySuffix/28: -Date/DaySuffix/29: -Date/DaySuffix/30: -Date/DaySuffix/31: Date/Long/Day/0: Воскресенье Date/Long/Day/1: Понедельник Date/Long/Day/2: Вторник @@ -50,8 +19,8 @@ Date/Long/Month/9: сентября Date/Long/Month/10: октября Date/Long/Month/11: ноября Date/Long/Month/12: декабря -Date/Period/am: am -Date/Period/pm: pm +Date/Period/am: до полудня +Date/Period/pm: после полудня Date/Short/Day/0: Вс Date/Short/Day/1: Пн Date/Short/Day/2: Вт @@ -71,6 +40,37 @@ Date/Short/Month/9: сен Date/Short/Month/10: окт Date/Short/Month/11: нбр Date/Short/Month/12: дек +Date/DaySuffix/1: -й +Date/DaySuffix/10: -й +Date/DaySuffix/11: -й +Date/DaySuffix/12: -й +Date/DaySuffix/13: -й +Date/DaySuffix/14: -й +Date/DaySuffix/15: -й +Date/DaySuffix/16: -й +Date/DaySuffix/17: -й +Date/DaySuffix/18: -й +Date/DaySuffix/19: -й +Date/DaySuffix/2: -й +Date/DaySuffix/20: -й +Date/DaySuffix/21: -й +Date/DaySuffix/22: -й +Date/DaySuffix/23: -й +Date/DaySuffix/24: -й +Date/DaySuffix/25: -й +Date/DaySuffix/26: -й +Date/DaySuffix/27: -й +Date/DaySuffix/28: -й +Date/DaySuffix/29: -й +Date/DaySuffix/3: -й +Date/DaySuffix/30: -й +Date/DaySuffix/31: -й +Date/DaySuffix/4: -й +Date/DaySuffix/5: -й +Date/DaySuffix/6: -й +Date/DaySuffix/7: -й +Date/DaySuffix/8: -й +Date/DaySuffix/9: -й RelativeDate/Future/Days: через <> дней RelativeDate/Future/Hours: через <> часов RelativeDate/Future/Minutes: через <> минут diff --git a/languages/ru-RU/Docs/Fields.multids b/languages/ru-RU/Docs/Fields.multids index b4dbe745f..f1c70a211 100644 --- a/languages/ru-RU/Docs/Fields.multids +++ b/languages/ru-RU/Docs/Fields.multids @@ -5,9 +5,9 @@ bag: Название "мешка" заметки из TiddlyWeb caption: Текст на вкладке или кнопке color: CSS значение цвета заметки component: Название компонента, ответственного за [[заметку-тревогу|AlertMechanism]] -current-tiddler: Использовалось для хранения верхней заметки в [[списке истории|HistoryMechanism]] created: Дата создания заметки creator: Имя создателя заметки +current-tiddler: Использовалось для хранения верхней заметки в [[списке истории|HistoryMechanism]] dependents: Для плагина, перечисляет названия зависимых плагинов description: Описание плагина или модального окна draft.of: Для черновиков, содержит название редактируемой заметки @@ -17,15 +17,15 @@ hack-to-give-us-something-to-compare-against: Временное поле исп icon: Название заметки, содержащей значок заметки library: Если "yes", то заметка сохраняется как библиотека JavaScript list: Упорядоченный список названий связанных заметок -list-before: Название заметки, перед которой эта заметка добавляется в упорядоченный список; если это поле создано и имеет пустое значение, то заметка добавляется в начало списка list-after: Название заметки, после которой эта заметка добавляется в упорядоченный список +list-before: Название заметки, перед которой эта заметка добавляется в упорядоченный список; если это поле создано и имеет пустое значение, то заметка добавляется в начало списка modified: Дата последнего изменения заметки modifier: Имя редактора заметки name: Название плагина plugin-priority: Число - приоритет плагина plugin-type: Тип плагина -revision: Версия заметки на сервере released: Дата выпуска TiddlyWiki +revision: Версия заметки на сервере source: Исходный URL связанный с заметкой subtitle: Подзаголовок мастера tags: Список меток связанный с заметкой diff --git a/languages/ru-RU/Docs/PaletteColours.multids b/languages/ru-RU/Docs/PaletteColours.multids index 9024da21d..ac4c575ed 100644 --- a/languages/ru-RU/Docs/PaletteColours.multids +++ b/languages/ru-RU/Docs/PaletteColours.multids @@ -6,25 +6,28 @@ alert-highlight: Подсветка сообщения об ошибке alert-muted-foreground: Приглушенный цвет текста сообщения об ошибке background: Общий фон blockquote-bar: Оформление цитаты -dirty-indicator: Индикатор несохранённых изменений +button-background: Фон кнопки по умолчанию +button-border: Граница кнопки по умолчанию +button-foreground: Цвет кнопки по умолчанию code-background: Фон блоков кода code-border: Граница блоков кода code-foreground: Цвет текста блоков кода +dirty-indicator: Индикатор несохранённых изменений download-background: Фон кнопки Скачать download-foreground: Цвет текста кнопки Скачать dragger-background: Фон перетаскиваемой ссылки dragger-foreground: Цвет текста перетаскиваемой ссылки dropdown-background: Фон выпадающего меню dropdown-border: Граница выпадающего меню -dropdown-tab-background-selected: Фон выбранных вкладок выпадающего меню dropdown-tab-background: Фон вкладок выпадающего меню +dropdown-tab-background-selected: Фон выбранных вкладок выпадающего меню dropzone-background: Фон области перетаскивания +external-link-background: фон внешней ссылки external-link-background-hover: Фон внешней ссылки при наведении external-link-background-visited: Фон посещённой внешней ссылки -external-link-background: фон внешней ссылки +external-link-foreground: Цвет текста внешней ссылки external-link-foreground-hover: Цвет текста внешней ссылки при наведении external-link-foreground-visited: Цвет текста посещённой внешней ссылки -external-link-foreground: Цвет текста внешней ссылки foreground: Общий цвет текста message-background: Фон сообщений message-border: Граница сообщений @@ -43,29 +46,30 @@ pre-background: Фон неформатированного текста pre-border: Граница неформатированного текста primary: Первичный цвет sidebar-button-foreground: Цвет текста кнопок боковой панели -sidebar-controls-foreground-hover: Цвет элементов управления боковой панели при наведении sidebar-controls-foreground: Цвет элементов управления боковой панели -sidebar-foreground-shadow: Цвет тени текста на боковой панели +sidebar-controls-foreground-hover: Цвет элементов управления боковой панели при наведении sidebar-foreground: Цвет текста на боковой панели -sidebar-muted-foreground-hover: Приглушенный цвет текста на боковой панели при наведении +sidebar-foreground-shadow: Цвет тени текста на боковой панели sidebar-muted-foreground: Приглушенный цвет текста на боковой панели -sidebar-tab-background-selected: Фон выбранных вкладок на боковой панели +sidebar-muted-foreground-hover: Приглушенный цвет текста на боковой панели при наведении sidebar-tab-background: Фон вкладок на боковой панели -sidebar-tab-border-selected: Граница выбранных вкладок на боковой панели +sidebar-tab-background-selected: Фон выбранных вкладок на боковой панели sidebar-tab-border: Граница вкладок на боковой панели +sidebar-tab-border-selected: Граница выбранных вкладок на боковой панели sidebar-tab-divider: Разделитель вкладок на боковой панели -sidebar-tab-foreground-selected: Цвет текста выбранных вкладок на боковой панели sidebar-tab-foreground: Цвет текста вкладок на боковой панели -sidebar-tiddler-link-foreground-hover: Цвет ссылок на заметки на боковой панели при наведении +sidebar-tab-foreground-selected: Цвет текста выбранных вкладок на боковой панели sidebar-tiddler-link-foreground: Цвет ссылок на заметки на боковой панели +sidebar-tiddler-link-foreground-hover: Цвет ссылок на заметки на боковой панели при наведении +site-title-foreground: Цвет заголовка сайта static-alert-foreground: Цвет текста статической версии сообщения об ошибке -tab-background-selected: Фон выбранных вкладок tab-background: Фон вкладок -tab-border-selected: Граница выбранных вкладок +tab-background-selected: Фон выбранных вкладок tab-border: Граница вкладок +tab-border-selected: Граница выбранных вкладок tab-divider: Разделитель вкладок -tab-foreground-selected: Цвет текста выбранных вкладок tab-foreground: Цвет текста вкладок +tab-foreground-selected: Цвет текста выбранных вкладок table-border: Граница таблиц table-footer-background: Фон подвала таблиц table-header-background: Фон шапки таблиц @@ -73,12 +77,12 @@ tag-background: Фон меток tag-foreground: Цвет текста меток tiddler-background: Фон заметок tiddler-border: Граница заметок +tiddler-controls-foreground: Цвет элементов управления заметки tiddler-controls-foreground-hover: Цвет элементов управления заметки при наведении tiddler-controls-foreground-selected: Цвет выбранных элементов управления заметки -tiddler-controls-foreground: Цвет элементов управления заметки tiddler-editor-background: Фон редактора заметок -tiddler-editor-border-image: Граница редактора изображений tiddler-editor-border: Граница редактора заметок +tiddler-editor-border-image: Граница редактора изображений tiddler-editor-fields-even: Фон четных полей tiddler-editor-fields-odd: Фон нечётных полей tiddler-info-background: Фон информационной панели заметки @@ -88,14 +92,14 @@ tiddler-link-background: Фон ссылок на заметку tiddler-link-foreground: Цвет текста ссылок на заметку tiddler-subtitle-foreground: Цвет текста подзаголовка заметки tiddler-title-foreground: Цвет текста заголовка заметки +toolbar-cancel-button: Цвет кнопки 'отменить' +toolbar-close-button: Цвет кнопки 'закрыть' +toolbar-delete-button: Цвет кнопки 'удалить' +toolbar-done-button: Цвет кнопки 'готово' +toolbar-edit-button: Цвет кнопки 'редактировать' +toolbar-info-button: Цвет кнопки 'информация' toolbar-new-button: Цвет кнопки 'создать' toolbar-options-button: Цвет кнопки 'настройки' toolbar-save-button: Цвет кнопки 'сохранить' -toolbar-info-button: Цвет кнопки 'информация' -toolbar-edit-button: Цвет кнопки 'редактировать' -toolbar-close-button: Цвет кнопки 'закрыть' -toolbar-delete-button: Цвет кнопки 'удалить' -toolbar-cancel-button: Цвет кнопки 'отменить' -toolbar-done-button: Цвет кнопки 'готово' untagged-background: Фон метки 'без метки' very-muted-foreground: Очень приглушенный цвет текста diff --git a/languages/ru-RU/EditTemplate.multids b/languages/ru-RU/EditTemplate.multids index 2269cd923..7c8f97594 100644 --- a/languages/ru-RU/EditTemplate.multids +++ b/languages/ru-RU/EditTemplate.multids @@ -8,18 +8,20 @@ Body/Preview/Button/Show: предпросмотр Field/Remove/Caption: удалить поле Field/Remove/Hint: Удалить поле Fields/Add/Button: добавить +Fields/Add/Dropdown/System: Системные поля +Fields/Add/Dropdown/User: Пользовательские поля Fields/Add/Name/Placeholder: название поля Fields/Add/Prompt: Добавить новое поле: Fields/Add/Value/Placeholder: значение -Shadow/Warning: Это встроенная заметка. Любое изменение переопределит стандартное значение Shadow/OverriddenWarning: Это переопределённая встроенная заметка. Для восстановления стандартного значения просто удалите её +Shadow/Warning: Это встроенная заметка. Любое изменение переопределит стандартное значение Tags/Add/Button: добавить Tags/Add/Placeholder: название метки Tags/Dropdown/Caption: список меток Tags/Dropdown/Hint: Показать список меток -Type/Dropdown/Caption: список типов содержимого -Type/Dropdown/Hint: Показать список типов содержимого Type/Delete/Caption: удалить тип содержимого Type/Delete/Hint: Удалить тип содержимого +Type/Dropdown/Caption: список типов содержимого +Type/Dropdown/Hint: Показать список типов содержимого Type/Placeholder: тип содержимого Type/Prompt: Тип: diff --git a/languages/ru-RU/Filters.multids b/languages/ru-RU/Filters.multids index bf7658c5a..5a02a71a8 100644 --- a/languages/ru-RU/Filters.multids +++ b/languages/ru-RU/Filters.multids @@ -1,13 +1,14 @@ title: $:/language/Filters/ +AllTags: Все метки, кроме системных AllTiddlers: Все заметки, кроме системных +Drafts: Черновики +Missing: Отсутствующие заметки +Orphans: Потерянные заметки +OverriddenShadowTiddlers: Переопределённые встроенные заметки RecentSystemTiddlers: Недавно измененные заметки, включая системные RecentTiddlers: Недавно измененные заметки -AllTags: Все метки, кроме системных -Missing: Отсутствующие заметки -Drafts: Черновики -Orphans: Потерянные заметки -SystemTiddlers: Системные заметки ShadowTiddlers: Встроенные заметки -OverriddenShadowTiddlers: Переопределённые встроенные заметки SystemTags: Системные метки +SystemTiddlers: Системные заметки +TypedTiddlers: Не вики-текстовые тиддлеры diff --git a/languages/ru-RU/GettingStarted.tid b/languages/ru-RU/GettingStarted.tid index 32f08558f..b8e2a8ae1 100644 --- a/languages/ru-RU/GettingStarted.tid +++ b/languages/ru-RU/GettingStarted.tid @@ -7,7 +7,7 @@ title: GettingStarted Затем вы можете: * Создать новые заметки, используя кнопку 'плюс' на боковой панели -* Зайти в [[панель управления|$:/ControlPanel]], используя кнопку с изображением 'шестерёнки' на боковой панели и настроить TiddlyWiki на свой вкус -** Убрать это сообщение, изменив настройку 'заметки по умолчанию' на вкладке ''Основные'' +* Зайти в панель управления, используя кнопку с изображением 'шестерёнки' на боковой панели и настроить TiddlyWiki на свой вкус +** Убрать это сообщение, изменив настройку 'заметки по умолчанию' на вкладке Основные * Сохранить изменения при помощи кнопки 'скачать' на боковой панели -* Изучить подробнее [[WikiText|http://tiddlywiki.com/static/WikiText.html]] +* Изучить подробнее WikiText diff --git a/languages/ru-RU/Misc.multids b/languages/ru-RU/Misc.multids index 2129e8c31..430bd27e1 100644 --- a/languages/ru-RU/Misc.multids +++ b/languages/ru-RU/Misc.multids @@ -6,17 +6,30 @@ ClassicWarning/Upgrade/Caption: обновление CloseAll/Button: закрыть все ConfirmCancelTiddler: Отменить изменения заметки "<$text text=<>/>"? ConfirmDeleteTiddler: Удалить заметку "<$text text=<<title>>/>"? -ConfirmOverwriteTiddler: Заменить заметку "<$text text=<<title>>/>"? ConfirmEditShadowTiddler: Вы собираетесь редактировать встроенную заметку. Любое изменение переопределит стандартное значение и может привести к проблемам при обновлении TiddlyWiki. Вы действительно хотите редактировать "<$text text=<<title>>/>"? +ConfirmOverwriteTiddler: Заменить заметку "<$text text=<<title>>/>"? DefaultNewTiddlerTitle: Новая заметка DropMessage: Перетащите сюда (или нажмите escape для отмены) +Encryption/Cancel: Отмена Encryption/ConfirmClearPassword: Вы действительно хотите сбросить пароль? Это действие отменит шифрование при следующем сохранении +Encryption/Password: Пароль +Encryption/PasswordNoMatch: Пароли не совпадают Encryption/PromptSetPassword: Установить новый пароль для TiddlyWiki +Encryption/RepeatPassword: Повторите пароль +Encryption/SetPassword: Введите пароль +Encryption/Username: Имя пользователя +Exporters/CsvFile: Заметки в формате CSV +Exporters/JsonFile: Заметки в формате JSON +Exporters/StaticRiver: Показываемые заметки в виде статического HTML файла +Exporters/TidFile: Одна заметка в формате ".tid" InvalidFieldName: Недопустимые символы в названии поля "<$text text=<<fieldName>>/>". Поля могут содержать только латинские буквы нижнего регистра, цифры и символы: подчеркивание (`_`), дефис (`-`) и точку (`.`) MissingTiddler/Hint: Заметка "<$text text=<<currentTiddler>>/>" отсутствует - нажмите {{$:/core/images/edit-button}} чтобы её создать +OfficialPluginLibrary: Официальная Библиотека Плагинов ~TiddlyWiki +PluginReloadWarning: Пожалуйста, сохраните {{$:/core/ui/Buttons/save-wiki}} и перезапустите {{$:/core/ui/Buttons/refresh}} вики, чтобы изменения в плагинах возымели эффект. RecentChanges/DateFormat: DD MMM YYYY SystemTiddler/Tooltip: Это системная заметка TagManager/Colour/Heading: Цвет +TagManager/Count/Heading: Номер TagManager/Icon/Heading: Значок TagManager/Info/Heading: Детали TagManager/Tag/Heading: Метка diff --git a/languages/ru-RU/NewJournal.multids b/languages/ru-RU/NewJournal.multids index bb517bab4..6da84d926 100644 --- a/languages/ru-RU/NewJournal.multids +++ b/languages/ru-RU/NewJournal.multids @@ -1,4 +1,4 @@ title: $:/config/NewJournal/ +Tags: Дневник Title: DD MMM YYYY -Tags: Journal diff --git a/languages/ru-RU/SiteTitle.tid b/languages/ru-RU/SiteTitle.tid index cae6a8a7d..4dc133715 100644 --- a/languages/ru-RU/SiteTitle.tid +++ b/languages/ru-RU/SiteTitle.tid @@ -1,3 +1,3 @@ title: $:/SiteTitle -Моя ~TiddlyWiki \ No newline at end of file +Моя TiddlyWiki \ No newline at end of file diff --git a/languages/ru-RU/TiddlerInfo.multids b/languages/ru-RU/TiddlerInfo.multids index 0457eaa74..502e1b1f0 100644 --- a/languages/ru-RU/TiddlerInfo.multids +++ b/languages/ru-RU/TiddlerInfo.multids @@ -6,9 +6,9 @@ Advanced/PluginInfo/Heading: Сведения о плагине Advanced/PluginInfo/Hint: Плагин содержит следующие встроенные заметки: Advanced/ShadowInfo/Heading: Встроенность Advanced/ShadowInfo/NotShadow/Hint: Заметка <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> не является встроенной +Advanced/ShadowInfo/OverriddenShadow/Hint: Она переопределена обычной заметкой Advanced/ShadowInfo/Shadow/Hint: Заметка <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> является встроенной Advanced/ShadowInfo/Shadow/Source: Она принадлежит плагину <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link> -Advanced/ShadowInfo/OverriddenShadow/Hint: Она переопределена обычной заметкой Fields/Caption: Поля List/Caption: Список List/Empty: У этой заметки нет списка diff --git a/languages/ru-RU/Types/application_javascript.tid b/languages/ru-RU/Types/application%2Fjavascript.tid similarity index 100% rename from languages/ru-RU/Types/application_javascript.tid rename to languages/ru-RU/Types/application%2Fjavascript.tid diff --git a/languages/ru-RU/Types/application_json.tid b/languages/ru-RU/Types/application%2Fjson.tid similarity index 100% rename from languages/ru-RU/Types/application_json.tid rename to languages/ru-RU/Types/application%2Fjson.tid diff --git a/languages/ru-RU/Types/application_x_tiddler_dictionary.tid b/languages/ru-RU/Types/application%2Fx-tiddler-dictionary.tid similarity index 100% rename from languages/ru-RU/Types/application_x_tiddler_dictionary.tid rename to languages/ru-RU/Types/application%2Fx-tiddler-dictionary.tid diff --git a/languages/ru-RU/Types/image_gif.tid b/languages/ru-RU/Types/image%2Fgif.tid similarity index 100% rename from languages/ru-RU/Types/image_gif.tid rename to languages/ru-RU/Types/image%2Fgif.tid diff --git a/languages/ru-RU/Types/image_jpeg.tid b/languages/ru-RU/Types/image%2Fjpeg.tid similarity index 100% rename from languages/ru-RU/Types/image_jpeg.tid rename to languages/ru-RU/Types/image%2Fjpeg.tid diff --git a/languages/ru-RU/Types/image_png.tid b/languages/ru-RU/Types/image%2Fpng.tid similarity index 100% rename from languages/ru-RU/Types/image_png.tid rename to languages/ru-RU/Types/image%2Fpng.tid diff --git a/languages/ru-RU/Types/image_svg_xml.tid b/languages/ru-RU/Types/image%2Fsvg%2Bxml.tid similarity index 100% rename from languages/ru-RU/Types/image_svg_xml.tid rename to languages/ru-RU/Types/image%2Fsvg%2Bxml.tid diff --git a/languages/ru-RU/Types/image_x-icon.tid b/languages/ru-RU/Types/image%2Fx-icon.tid similarity index 100% rename from languages/ru-RU/Types/image_x-icon.tid rename to languages/ru-RU/Types/image%2Fx-icon.tid diff --git a/languages/ru-RU/Types/text_css.tid b/languages/ru-RU/Types/text%2Fcss.tid similarity index 100% rename from languages/ru-RU/Types/text_css.tid rename to languages/ru-RU/Types/text%2Fcss.tid diff --git a/languages/ru-RU/Types/text_html.tid b/languages/ru-RU/Types/text%2Fhtml.tid similarity index 100% rename from languages/ru-RU/Types/text_html.tid rename to languages/ru-RU/Types/text%2Fhtml.tid diff --git a/languages/ru-RU/Types/text_plain.tid b/languages/ru-RU/Types/text%2Fplain.tid similarity index 100% rename from languages/ru-RU/Types/text_plain.tid rename to languages/ru-RU/Types/text%2Fplain.tid diff --git a/languages/ru-RU/Types/text_vnd.tiddlywiki.tid b/languages/ru-RU/Types/text%2Fvnd.tiddlywiki.tid similarity index 100% rename from languages/ru-RU/Types/text_vnd.tiddlywiki.tid rename to languages/ru-RU/Types/text%2Fvnd.tiddlywiki.tid diff --git a/languages/ru-RU/Types/text_x-tiddlywiki.tid b/languages/ru-RU/Types/text%2Fx-tiddlywiki.tid similarity index 100% rename from languages/ru-RU/Types/text_x-tiddlywiki.tid rename to languages/ru-RU/Types/text%2Fx-tiddlywiki.tid diff --git a/languages/ru-RU/plugin.info b/languages/ru-RU/plugin.info index af78ee47a..46bb50ab3 100644 --- a/languages/ru-RU/plugin.info +++ b/languages/ru-RU/plugin.info @@ -3,6 +3,6 @@ "name": "ru-RU", "plugin-type": "language", "description": "Russian (Russia)", - "author": "AndreyYankin aka andrey013", + "author": "AndreyYankin aka andrey013, Глеб Прохожев <glebujka@gmail.com>", "core-version": ">=5.0.0" } From bcb49b64f6ff4627510e4e202d2630ad5c1f67f1 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Mon, 26 Oct 2015 17:16:43 +0000 Subject: [PATCH 049/242] Update for TiddlyDesktop v0.0.5 --- .../TiddlyDesktop_Release_0.0.5.tid | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.5.tid diff --git a/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.5.tid b/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.5.tid new file mode 100644 index 000000000..f9e30a96b --- /dev/null +++ b/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.5.tid @@ -0,0 +1,26 @@ +caption: 0.0.5 +created: 20151026171331736 +modified: 20151026171331736 +tags: TiddlyDesktopReleaseNotes +title: TiddlyDesktop Release 0.0.5 +type: text/vnd.tiddlywiki +released: 20151026 + +<a href="https://github.com/Jermolene/TiddlyDesktop/releases/tag/v0.0.5" class="tc-btn-big-green" target="_blank"> +{{$:/core/images/github}} Download from ~GitHub +</a> + +[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyDesktop/compare/v0.0.4...v0.0.5]] + +This is an important bug fix release. + +Please report any problems or suggestions via GitHub issues, or post to the TiddlyWiki discussion group: + +http://groups.google.com/group/TiddlyWiki + +* Upgraded to the latest stable v12.0.3 of nw.js, fixing a number of bugs in the process, including one that prevented v0.0.4 from being used successfully under Windows +** Bugs fixed: <a href="https://github.com/Jermolene/TiddlyDesktop/issues/66">#66</a>, <a href="https://github.com/Jermolene/TiddlyDesktop/issues/65">#65</a>, <a href="https://github.com/Jermolene/TiddlyDesktop/issues/61">#61</a>, <a href="https://github.com/Jermolene/TiddlyDesktop/issues/57">#57</a>, <a href="https://github.com/Jermolene/TiddlyDesktop/issues/53">#53</a>, <a href="https://github.com/Jermolene/TiddlyDesktop/issues/52">#52</a> +* Added a warning about disrupting the backstage wiki +* Switched to using "Settings" instead of "Control Panel", to reduce confusion with TiddlyWiki's control panel +* Updated app icon +* Cleaned up TiddlyWiki build products, fixing <a href="https://github.com/Jermolene/TiddlyDesktop/issues/67">#67</a> From e55c5b06697062c42d318ffed1d10ab366ff0851 Mon Sep 17 00:00:00 2001 From: jed <inmysocks@gmail.com> Date: Mon, 26 Oct 2015 20:23:09 +0100 Subject: [PATCH 050/242] Let $keyboard trigger action-widgets Because of the refresh problems with the other widgets triggering action-widgets I am doing this one by itself. I hadn't included it before. This shouldn't have any more problems than the button widget does, and any problems caused by it should be fixed by any fix we use for the button widget. See #1564 for more background --- core/modules/widgets/keyboard.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/modules/widgets/keyboard.js b/core/modules/widgets/keyboard.js index 2eb392a75..004dddbd6 100644 --- a/core/modules/widgets/keyboard.js +++ b/core/modules/widgets/keyboard.js @@ -42,6 +42,10 @@ KeyboardWidget.prototype.render = function(parent,nextSibling) { // Add a keyboard event handler domNode.addEventListener("keydown",function (event) { if($tw.utils.checkKeyDescriptor(event,self.keyInfo)) { + var handled = false; + if(self.invokeActions(this,event)) { + handled = true; + } self.dispatchMessage(event); event.preventDefault(); event.stopPropagation(); From d3ab4144d431865c70ee51de350d93434a858d83 Mon Sep 17 00:00:00 2001 From: Felix Hayashi <ninshinobi@msn.com> Date: Mon, 26 Oct 2015 21:22:10 +0100 Subject: [PATCH 051/242] Allows text areas to be auto-height while being wrapped in an element that has scrollbars. The wrapper element with the scroll bar does not need to be a direct parent of the text area. **update:** fixed a bug that came up in the discussion This is fixed now: https://github.com/Jermolene/TiddlyWiki5/pull/1933#issuecomment-141774881 The problem was the check in getScrollContainer() --- core/modules/widgets/edit-text.js | 32 +++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/core/modules/widgets/edit-text.js b/core/modules/widgets/edit-text.js index 835e0ce9d..975547890 100644 --- a/core/modules/widgets/edit-text.js +++ b/core/modules/widgets/edit-text.js @@ -211,18 +211,31 @@ EditTextWidget.prototype.updateEditorDomNode = function(text) { } }; +/* +Get the first parent element that has scrollbars or use the body as fallback. +*/ +EditTextWidget.prototype.getScrollContainer = function(el) { + while(el.parentNode) { + el = el.parentNode; + if(el.scrollTop) { + return el; + } + } + return this.document.body; +}; + /* Fix the height of textareas to fit their content */ EditTextWidget.prototype.fixHeight = function() { - var self = this, - domNode = this.domNodes[0]; + var domNode = this.domNodes[0]; if(this.editAutoHeight && domNode && !domNode.isTiddlyWikiFakeDom && this.editTag === "textarea") { // Resize the textarea to fit its content, preserving scroll position - var scrollPosition = $tw.utils.getScrollPosition(), - scrollTop = scrollPosition.y; - // Measure the specified minimum height - domNode.style.height = self.editMinHeight; + // Get the scroll container and register the current scroll position + var container = this.getScrollContainer(domNode), + scrollTop = container.scrollTop; + // Measure the specified minimum height + domNode.style.height = this.editMinHeight; var minHeight = domNode.offsetHeight; // Set its height to auto so that it snaps to the correct height domNode.style.height = "auto"; @@ -230,12 +243,11 @@ EditTextWidget.prototype.fixHeight = function() { var newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,minHeight); // Only try to change the height if it has changed if(newHeight !== domNode.offsetHeight) { - domNode.style.height = newHeight + "px"; + domNode.style.height = newHeight + "px"; // Make sure that the dimensions of the textarea are recalculated $tw.utils.forceLayout(domNode); - // Check that the scroll position is still visible before trying to scroll back to it - scrollTop = Math.min(scrollTop,self.document.body.scrollHeight - window.innerHeight); - window.scrollTo(scrollPosition.x,scrollTop); + // Set the container to the position we registered at the beginning + container.scrollTop = scrollTop; } } }; From 817882a4042e6d8d84ba509f2d49d84829c66ceb Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Tue, 27 Oct 2015 10:17:07 +0200 Subject: [PATCH 052/242] Update x-listops.js Added prefix and suffix options to 'append' and 'prepend' operators --- core/modules/filters/x-listops.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/modules/filters/x-listops.js b/core/modules/filters/x-listops.js index f6fde4ee0..8b66a24c6 100644 --- a/core/modules/filters/x-listops.js +++ b/core/modules/filters/x-listops.js @@ -123,11 +123,16 @@ Extended filter operators to manipulate the current list. */ exports.append = function (source, operator, options) { var results = prepare_results(source), + count = parseInt(operator.suffix) || 1, append = $tw.utils.parseStringArray(operator.operand); if (append === "") { return results; } - return results.concat(append); + if (operator.prefix) { + return results.concat(append.slice(-count)); + } else { + return results.concat(append.slice(0, count)); + } }; /* @@ -135,11 +140,16 @@ Extended filter operators to manipulate the current list. */ exports.prepend = function (source, operator, options) { var results = prepare_results(source), + count = parseInt(operator.suffix) || 1, prepend = $tw.utils.parseStringArray(operator.operand); if (prepend === "") { return results; } - return prepend.concat(results); + if (operator.prefix) { + return prepend.slice(-count).concat(results); + } else { + return prepend.slice(0, count).concat(results); + } }; /* From 41480968ac3b0bc54647a35c323e47265018c9e3 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 28 Oct 2015 18:11:52 +0000 Subject: [PATCH 053/242] Add spiral icon --- core/images/spiral.tid | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 core/images/spiral.tid diff --git a/core/images/spiral.tid b/core/images/spiral.tid new file mode 100644 index 000000000..05244e3b7 --- /dev/null +++ b/core/images/spiral.tid @@ -0,0 +1,8 @@ +title: $:/core/images/spiral +tags: $:/tags/Image + +<svg class="tc-image-spiral tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"> + <g fill-rule="nonzero"> + <path d="M58.716 64.613c3.7 0 6.656-2.86 7.07-6.515l-5.19-.587 5.184.64c.412-3.35-1.303-6.61-4.246-8.49-3.01-1.933-6.92-2.19-10.443-.76-3.77 1.53-6.69 4.79-8.02 8.89l-.01.03c-1.41 4.46-.78 9.435 1.73 13.675 2.73 4.59 7.39 7.86 12.844 9.027 5.87 1.254 12.136-.052 17.28-3.61 5.503-3.825 9.233-9.85 10.323-16.695 1.15-7.306-.777-14.874-5.37-20.945l.02.025c-4.83-6.47-12.233-10.724-20.507-11.77-8.693-1.103-17.605 1.428-24.66 7.026-7.427 5.89-12.207 14.646-13.22 24.304-1.074 10.118 2.037 20.36 8.655 28.4 6.9 8.405 17.027 13.72 28.1 14.717 11.5 1.05 23.08-2.64 32.14-10.256l.014-.01c9.364-7.915 15.22-19.405 16.224-31.885 1.03-12.93-3.23-25.866-11.858-35.916-8.94-10.373-21.78-16.77-35.69-17.763C44.716 5.116 30.44 9.954 19.42 19.61l.012-.01C8.062 29.506 1.102 43.714.12 59.054-.89 74.82 4.524 90.46 15.174 102.484c10.952 12.357 26.51 19.868 43.238 20.84 17.178 1.005 34.18-4.977 47.2-16.63 13.354-11.96 21.413-28.87 22.38-47.026.154-2.88-2.057-5.34-4.938-5.495-2.88-.153-5.34 2.058-5.494 4.94-.82 15.39-7.64 29.695-18.918 39.797-10.95 9.804-25.23 14.826-39.622 13.987-13.963-.814-26.924-7.07-36.027-17.34-8.81-9.948-13.28-22.858-12.447-35.833.806-12.572 6.49-24.18 15.75-32.248l.01-.01c8.93-7.825 20.464-11.734 32.04-10.91 11.146.794 21.402 5.904 28.507 14.15 6.814 7.94 10.173 18.13 9.363 28.268-.782 9.716-5.326 18.63-12.557 24.74l.01-.01c-6.94 5.836-15.77 8.646-24.48 7.852-8.3-.746-15.86-4.71-20.98-10.946-4.848-5.89-7.113-13.347-6.337-20.67.723-6.88 4.104-13.075 9.324-17.212 4.866-3.862 10.966-5.595 16.853-4.848 5.48.694 10.327 3.477 13.445 7.657l.02.028c2.89 3.82 4.09 8.53 3.382 13.012-.645 4.05-2.82 7.56-5.958 9.74-2.79 1.93-6.12 2.625-9.148 1.98-2.644-.565-4.825-2.097-6.04-4.14-1.01-1.708-1.25-3.606-.748-5.19l-4.98-1.577L53 60.995c.394-1.22 1.164-2.08 2.01-2.423.277-.113.53-.154.73-.14.066.003.12.013.155.025.01.002 0 0-.017-.012-.02-.014-.06-.046-.103-.093-.065-.07-.128-.157-.185-.265-.167-.317-.25-.736-.19-1.213-.005.016-.006.033-.008.05.165-1.458 1.507-2.758 3.31-2.758-2.884 0-5.223 2.34-5.223 5.224 0 2.885 2.34 5.223 5.22 5.223z"></path> + </g> +</svg> \ No newline at end of file From eb25fdc4725931947972ce37094feb7231678dbe Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Thu, 29 Oct 2015 10:49:07 +0100 Subject: [PATCH 054/242] update german translation texts --- languages/de-DE/Buttons.multids | 12 +++++++++++- languages/de-DE/ControlPanel.multids | 19 +++++++++++++++++++ languages/de-DE/EditTemplate.multids | 2 ++ languages/de-DE/Help/password.tid | 1 + languages/de-DE/Help/rendertiddler.tid | 6 ++++-- languages/de-DE/Help/savetiddlers.tid | 4 +++- languages/de-DE/Import.multids | 1 + languages/de-DE/Misc.multids | 7 +++++++ languages/de-DE/Search.multids | 3 +++ 9 files changed, 51 insertions(+), 4 deletions(-) diff --git a/languages/de-DE/Buttons.multids b/languages/de-DE/Buttons.multids index ed2aca707..585f400b4 100644 --- a/languages/de-DE/Buttons.multids +++ b/languages/de-DE/Buttons.multids @@ -30,12 +30,22 @@ ExportTiddler/Caption: Exportieren ExportTiddler/Hint: Diesen Tiddler Exportieren ExportTiddlers/Caption: Mehrere Exportieren ExportTiddlers/Hint: Mehrere Tiddler Exportieren +Fold/Caption: Ausblenden Textbereich +Fold/Hint: Der Tiddler Textbereich wird ausgeblendet +Unfold/Caption: Einblenden Textbereich +Unfold/Hint: Der Tiddler Textbereich wird eingeblendet +FoldOthers/Caption: Ausblenden Andere Textbereiche +FoldOthers/Hint: Die Textbereiche aller anderen Tiddler wird ausgeblendet +FoldAll/Caption: Ausblenden Aller Textbereiche +FoldAll/Hint: Ausblenden der Textbereiche aller Tiddler +UnfoldAll/Caption: Einblenden Aller Textbereiche +UnfoldAll/Hint: Einblenden der Textbereiche aller Tiddler FullScreen/Caption: Vollbild FullScreen/Hint: Aktivieren oder deaktivieren des Vollbild-Modus Help/Caption: Hilfe Help/Hint: Hilfe anzeigen Import/Caption: Import -Import/Hint: Importiere Dateien +Import/Hint: Importiere unterschiedliche Dateitypen. zB: Text, Bilder, TiddlyWiki oder JSON Info/Caption: Info Info/Hint: Informationen zu diesem Tiddler anzeigen Home/Caption: Home diff --git a/languages/de-DE/ControlPanel.multids b/languages/de-DE/ControlPanel.multids index d3f4364b1..2cf29808c 100755 --- a/languages/de-DE/ControlPanel.multids +++ b/languages/de-DE/ControlPanel.multids @@ -38,6 +38,11 @@ Palette/Editor/Reset/Caption: Palette zurücksetzen Palette/HideEditor/Caption: Editor ausblenden Palette/Prompt: Ausgewählte Farbpalette: Palette/ShowEditor/Caption: Editor zeigen +Parsing/Caption: Parser +Parsing/Hint: Hier können Sie die globalen Parser Einstellungen ändern. ACHTUNG: Manche Einstellungen können dazu führen, dass ~TiddlyWiki nicht mehr richtig funktioniert. Sollte das der Fall sein, dann können Sie die Änderungen im [["safe mode"|http://tiddlywiki.com/#SafeMode]] rückgängig machen. +Parsing/Block/Caption: Block Regeln +Parsing/Inline/Caption: Inline Regeln +Parsing/Pragma/Caption: Pragma Regeln Plugins/Add/Hint: Suche und installiere neue Plugins Plugins/Add/Caption: Suche Plugins/Caption: Plugins @@ -47,11 +52,14 @@ Plugins/Disabled/Status: (deaktiviert) Plugins/Empty/Hint: keine Plugins/Enable/Caption: aktivieren Plugins/Enable/Hint: Aktivieren Sie dieses Plugin beim nächsten Laden der Seite. +Plugins/Install: installieren Plugins/Installed/Hint: Momentan installierte Plugins Plugins/Languages/Caption: Sprachen Plugins/Languages/Hint: Spracherweiterungen +Plugins/OpenPluginLibrary: Öffne das Plugin Verzeichnis Plugins/Plugins/Caption: Plugins Plugins/Plugins/Hint: Erweiterungen +Plugins/Reinstall: erneut installieren Plugins/Themes/Caption: Themes Plugins/Themes/Hint: Theme Erweiterungen Saving/Caption: Speichern @@ -71,6 +79,9 @@ Settings/AutoSave/Caption: Automatisch speichern Settings/AutoSave/Disabled/Description: Änderungen NICHT automatisch speichern Settings/AutoSave/Enabled/Description: Änderungen automatisch speichern Settings/AutoSave/Hint: Änderungen des Wikis automatisch speichern +Settings/CamelCase/Caption: Camel Case Wiki Links +Settings/CamelCase/Hint: Hier können Sie die automatische Umwandlung von "~CamelCase Links" einstellen. ''Wichtig:'' Die Seite muss neu geladen werden, damit die Einstellungen wirksam werden. +Settings/CamelCase/Description: Automatische ~CamelCase Umwandlung aktivieren Settings/Caption: Einstellungen Settings/Hint: Diese erweiterten Einstellungen ermöglichen Ihnen, das Verhalten von TiddlyWiki zu ändern. Settings/NavigationAddressBar/Caption: Navigation Adresszeile @@ -82,6 +93,14 @@ Settings/NavigationHistory/Caption: Browser Chronik Settings/NavigationHistory/Hint: Die Browser Chronik ändern, wenn ein Tiddler angezeigt wird: Settings/NavigationHistory/No/Description: Browser Chronik nicht ändern. Settings/NavigationHistory/Yes/Description: Browser Chronik ändern. +Settings/PerformanceInstrumentation/Caption: Performance Messung +Settings/PerformanceInstrumentation/Hint: Anzeige der Performance Statistik in der Browser Entwickler Konsole. ''Wichtig:'' Seite neu laden um die Einstellung zu aktivieren! +Settings/PerformanceInstrumentation/Description: Aktiviere Performance Messung +Settings/ToolbarButtonStyle/Caption: Toolbar Button Stil +Settings/ToolbarButtonStyle/Hint: Wählen Sie einen Stil: +Settings/ToolbarButtonStyle/Styles/Borderless: Ohne Rand +Settings/ToolbarButtonStyle/Styles/Boxed: Box +Settings/ToolbarButtonStyle/Styles/Rounded: Abgerundet Settings/ToolbarButtons/Caption: Toolbar Buttons Settings/ToolbarButtons/Hint: Standard Toolbar Button Erscheinungsbild: Settings/ToolbarButtons/Icons/Description: Icon anzeigen diff --git a/languages/de-DE/EditTemplate.multids b/languages/de-DE/EditTemplate.multids index f64853aae..1f30cbd8c 100644 --- a/languages/de-DE/EditTemplate.multids +++ b/languages/de-DE/EditTemplate.multids @@ -11,6 +11,8 @@ Fields/Add/Button: ok Fields/Add/Name/Placeholder: Feld Name Fields/Add/Prompt: Feld einfügen: Fields/Add/Value/Placeholder: Feld Text / Wert +Fields/Add/Dropdown/System: System Felder +Fields/Add/Dropdown/User: Anwender Felder Shadow/Warning: Dies ist ein Schatten-Tiddler. Jede Änderung überschreibt die Standardversion. Shadow/OverriddenWarning: Dies ist ein veränderter Tiddler. Um zur Standardversion zurückzukehren, löschen Sie diesen Tiddler. Tags/Add/Button: ok diff --git a/languages/de-DE/Help/password.tid b/languages/de-DE/Help/password.tid index 4d0d9678e..07212963a 100644 --- a/languages/de-DE/Help/password.tid +++ b/languages/de-DE/Help/password.tid @@ -7,3 +7,4 @@ Setzen eines Passwortes für Verschlüsselungsoperationen --password <password> ``` +Hinweis: Diese Option kann nicht verwendet werden, um ein "Server Passwort" festzulegen! Informationen zum Server Passwort siehe "--server" Kommando. diff --git a/languages/de-DE/Help/rendertiddler.tid b/languages/de-DE/Help/rendertiddler.tid index 66b5f9e67..1211bc545 100644 --- a/languages/de-DE/Help/rendertiddler.tid +++ b/languages/de-DE/Help/rendertiddler.tid @@ -1,10 +1,12 @@ title: $:/language/Help/rendertiddler description: Ausgabe eines individuellen Tiddlers, in einem spezifizierten Format. -Ausgabe eines individuellen Tiddlers, in einem spezifizierten Format (standard: `text/html`) und Dateinamen: +Ausgabe eines individuellen Tiddlers, in einem spezifizierten Format (standard: `text/html`) und Dateinamen. + +Optional kann ein Template tiddler angegeben werden. Die "currentTiddler" Variable wird auf den Tiddler gesetzt, der zu rendern ist. ``` ---rendertiddler <title> <filename> [<type>] +--rendertiddler <title> <filename> [<type>] [<template>] ``` Standardmäßig ist das `output` Verzeichnis ein Unterverzeichnis im `edition` Verzeichnis. Der `--output` Befehl kann verwendet werden, um ein anderes Verzeichnis auszuwählen. diff --git a/languages/de-DE/Help/savetiddlers.tid b/languages/de-DE/Help/savetiddlers.tid index 5997f2125..0076a1ffd 100644 --- a/languages/de-DE/Help/savetiddlers.tid +++ b/languages/de-DE/Help/savetiddlers.tid @@ -4,9 +4,11 @@ description: Speichert eine Gruppe von Tiddler in ein Verzeichnis Speichert eine Gruppe von Tiddler im Text- oder Binärformat in ein angegebenes Verzeichnis. ``` ---savetiddlers <filter> <pathname> +--savetiddlers <filter> <pathname> ["noclean"] ``` Standardmäßig ist das `output` Verzeichnis ein Unterverzeichnis im `edition` Verzeichnis. Der `--output` Befehl kann verwendet werden, um ein anderes Verzeichnis auszuwählen. +Wichtig: Alle Dateien im Ausgabeverzeichnis werden automatisch gelöscht, wenn dieser Befehl verwendet wird. Um dies zu verhindern kann der ''noclean'' Parameter verwendet werden. + Nicht vorhandene Verzeichnisse im Pfadnamen werden automatisch erstellt. diff --git a/languages/de-DE/Import.multids b/languages/de-DE/Import.multids index 14da4af87..f06bd604b 100644 --- a/languages/de-DE/Import.multids +++ b/languages/de-DE/Import.multids @@ -1,5 +1,6 @@ title: $:/language/Import/ +Imported: Folgende Tiddler wurden importiert: Listing/Cancel/Caption: Abbrechen Listing/Hint: Diese Tiddler können importiert werden: Listing/Import/Caption: Importieren diff --git a/languages/de-DE/Misc.multids b/languages/de-DE/Misc.multids index 19967cbcb..a6018df59 100644 --- a/languages/de-DE/Misc.multids +++ b/languages/de-DE/Misc.multids @@ -1,5 +1,6 @@ title: $:/language/ +AboveStory/ClassicPlugin/Warning: Es scheint, Sie möchten ein Plugin verwenden, dass für [[TiddlyWiki Classic|http://tiddlywiki.com/#TiddlyWikiClassic]] entwickelt wurde. Diese Plugins können jedoch mit TiddlyWiki Version 5 nicht verwendet werden. ~TiddlyWiki Classic plugin erkannt: BinaryWarning/Prompt: Dieser Tiddler enthält binäre Daten. ClassicWarning/Hint: Dieser Tiddler wurde im TiddlyWiki Classic Format erstellt. Dieses Format ist nur teilweise kompatibel mit TiddlyWiki Version 5. Mehr Info finden Sie unter: http://tiddlywiki.com/static/Upgrading.html ClassicWarning/Upgrade/Caption: upgrade @@ -18,14 +19,20 @@ Encryption/Password: Passwort Encryption/RepeatPassword: Passwort wiederholen Encryption/PasswordNoMatch: Passwörter stimmen nicht überein Encryption/SetPassword: Passwort setzen +InternalJavaScriptError/Title: Interner JavaScript Fehler +InternalJavaScriptError/Hint: Es tut uns leid, aber bitte starten Sie Ihr TiddlyWiki neu, indem sie die Seite im Browser neu laden. InvalidFieldName: Das Feld: "<$text text=<<fieldName>>/>" enthält illegale Zeichen. Felder müssen klein geschrieben werden. Erlaubte Sonderzeichen sind: Zahlen, Unterstrich (`_`), Minus (`-`) und Punkt (`.`). +LazyLoadingWarning: <p>Lade externe Datei von ''<$text text={{!!_canonical_uri}}/>''</p><p>Wenn diese Meldung nicht automatisch gelöscht wird, dann verwenden Sie wahrscheinlich einen Browser der diese Funktion nicht unterstützt. Siehe http://tiddlywiki.com/#ExternalText</p> MissingTiddler/Hint: Fehlender Tiddler "<$text text=<<currentTiddler>>/>" - klicken Sie {{$:/core/images/edit-button}} um ihn zu erzeugen. OfficialPluginLibrary: Offizielles ~TiddlyWiki Plugin Verzeichnis +OfficialPluginLibrary/Hint: Offizielles ~TiddlyWiki Plugin Verzeichnis auf tiddlywiki.com. Plugin, Themes und Sprach Dateien werden vom "core team" gewartet. PluginReloadWarning: Das Wiki muss gespeichert {{$:/core/ui/Buttons/save-wiki}} und neu gladen {{$:/core/ui/Buttons/refresh}} werden, damit die Plugins ausgeführt werden. RecentChanges/DateFormat: YYYY MMM DD SystemTiddler/Tooltip: Das ist ein System-Tiddler TagManager/Colour/Heading: Farbe +TagManager/Count/Heading: Anzahl TagManager/Icon/Heading: Symbol TagManager/Info/Heading: Info TagManager/Tag/Heading: Tag +Tiddler/DateFormat: DDth MMM YYYY um hh:mm UnsavedChangesWarning: TiddlyWiki wurde geändert, aber noch nicht gespeichert! diff --git a/languages/de-DE/Search.multids b/languages/de-DE/Search.multids index 172d062f1..e48f3ba5d 100644 --- a/languages/de-DE/Search.multids +++ b/languages/de-DE/Search.multids @@ -5,6 +5,9 @@ Filter/Caption: Filter Filter/Hint: Suche mit [["filter expression"|http://tiddlywiki.com/static/Filters.html]]. Filter/Matches: //<small><<resultCount>> Treffer</small>// Matches: //<small><<resultCount>> Treffer</small>// +Matches/All: Alle Treffer: +Matches/Title: Titel Treffer: +Search: Suchen Shadows/Caption: Schatten Shadows/Hint: Suche in Schatten-Tiddlern. Shadows/Matches: //<small><<resultCount>> Treffer</small>// From 4dadbe5ba8dced54acadefce9702d0a36e812015 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Thu, 29 Oct 2015 12:05:54 +0100 Subject: [PATCH 055/242] makes the new toolbar option fold-bar translatable --- core/language/en-GB/Buttons.multids | 2 ++ core/ui/ViewToolbar/fold-bar.tid | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/language/en-GB/Buttons.multids b/core/language/en-GB/Buttons.multids index 215cc1daf..1c1c23c50 100644 --- a/core/language/en-GB/Buttons.multids +++ b/core/language/en-GB/Buttons.multids @@ -32,6 +32,8 @@ ExportTiddlers/Caption: export tiddlers ExportTiddlers/Hint: Export tiddlers Fold/Caption: fold tiddler Fold/Hint: Fold the body of this tiddler +Fold/FoldBar/Caption: fold-bar +Fold/FoldBar/Hint: Optional bars to fold and unfold tiddlers Unfold/Caption: unfold tiddler Unfold/Hint: Unfold the body of this tiddler FoldOthers/Caption: fold other tiddlers diff --git a/core/ui/ViewToolbar/fold-bar.tid b/core/ui/ViewToolbar/fold-bar.tid index e5f9b48c0..6e813dbb4 100644 --- a/core/ui/ViewToolbar/fold-bar.tid +++ b/core/ui/ViewToolbar/fold-bar.tid @@ -1,6 +1,6 @@ title: $:/core/ui/Buttons/fold-bar tags: $:/tags/ViewToolbar -caption: fold-bar -description: Optional bars to fold and unfold tiddlers +caption: {{$:/language/Buttons/Fold/FoldBar/Caption}} +description: {{$:/language/Buttons/Fold/FoldBar/Hint}} <!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button --> \ No newline at end of file From 7307c32dd2badea5f2f47bebd6e38e3e52779c51 Mon Sep 17 00:00:00 2001 From: Bram Chen <bram.chen@gmail.com> Date: Thu, 29 Oct 2015 20:08:43 +0800 Subject: [PATCH 056/242] Add chinese translations of toolbar option fold-bar --- languages/zh-Hans/Buttons.multids | 2 ++ languages/zh-Hant/Buttons.multids | 2 ++ 2 files changed, 4 insertions(+) diff --git a/languages/zh-Hans/Buttons.multids b/languages/zh-Hans/Buttons.multids index 62a35b524..afff59416 100644 --- a/languages/zh-Hans/Buttons.multids +++ b/languages/zh-Hans/Buttons.multids @@ -38,6 +38,8 @@ FoldOthers/Caption: 收合其他条目 FoldOthers/Hint: 收合其他已开启条目的内容 FoldAll/Caption: 收合所有条目 FoldAll/Hint: 收合所有已开启条目的内容 +Fold/FoldBar/Caption: 收合栏 +Fold/FoldBar/Hint: 可选的收合与展开条目的长条按钮 UnfoldAll/Caption: 展开所有条目 UnfoldAll/Hint: 展开所有已开启条目的内容 FullScreen/Caption: 全屏幕 diff --git a/languages/zh-Hant/Buttons.multids b/languages/zh-Hant/Buttons.multids index 270664d76..4843c94d7 100644 --- a/languages/zh-Hant/Buttons.multids +++ b/languages/zh-Hant/Buttons.multids @@ -32,6 +32,8 @@ ExportTiddlers/Caption: 導出條目 ExportTiddlers/Hint: 導出條目 Fold/Caption: 收合條目 Fold/Hint: 收合此條目的內容 +Fold/FoldBar/Caption: 收合條 +Fold/FoldBar/Hint: 可選的收合與展開條目的長條按鈕 Unfold/Caption: 展開條目 Unfold/Hint: 展開此條目的內容 FoldOthers/Caption: 收合其他條目 From 513ed8774cae2d954fdc3148415e5438bd822275 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 29 Oct 2015 21:49:05 +0000 Subject: [PATCH 057/242] Tweak spiral --- core/images/spiral.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/images/spiral.tid b/core/images/spiral.tid index 05244e3b7..5ad004f46 100644 --- a/core/images/spiral.tid +++ b/core/images/spiral.tid @@ -3,6 +3,6 @@ tags: $:/tags/Image <svg class="tc-image-spiral tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"> <g fill-rule="nonzero"> - <path d="M58.716 64.613c3.7 0 6.656-2.86 7.07-6.515l-5.19-.587 5.184.64c.412-3.35-1.303-6.61-4.246-8.49-3.01-1.933-6.92-2.19-10.443-.76-3.77 1.53-6.69 4.79-8.02 8.89l-.01.03c-1.41 4.46-.78 9.435 1.73 13.675 2.73 4.59 7.39 7.86 12.844 9.027 5.87 1.254 12.136-.052 17.28-3.61 5.503-3.825 9.233-9.85 10.323-16.695 1.15-7.306-.777-14.874-5.37-20.945l.02.025c-4.83-6.47-12.233-10.724-20.507-11.77-8.693-1.103-17.605 1.428-24.66 7.026-7.427 5.89-12.207 14.646-13.22 24.304-1.074 10.118 2.037 20.36 8.655 28.4 6.9 8.405 17.027 13.72 28.1 14.717 11.5 1.05 23.08-2.64 32.14-10.256l.014-.01c9.364-7.915 15.22-19.405 16.224-31.885 1.03-12.93-3.23-25.866-11.858-35.916-8.94-10.373-21.78-16.77-35.69-17.763C44.716 5.116 30.44 9.954 19.42 19.61l.012-.01C8.062 29.506 1.102 43.714.12 59.054-.89 74.82 4.524 90.46 15.174 102.484c10.952 12.357 26.51 19.868 43.238 20.84 17.178 1.005 34.18-4.977 47.2-16.63 13.354-11.96 21.413-28.87 22.38-47.026.154-2.88-2.057-5.34-4.938-5.495-2.88-.153-5.34 2.058-5.494 4.94-.82 15.39-7.64 29.695-18.918 39.797-10.95 9.804-25.23 14.826-39.622 13.987-13.963-.814-26.924-7.07-36.027-17.34-8.81-9.948-13.28-22.858-12.447-35.833.806-12.572 6.49-24.18 15.75-32.248l.01-.01c8.93-7.825 20.464-11.734 32.04-10.91 11.146.794 21.402 5.904 28.507 14.15 6.814 7.94 10.173 18.13 9.363 28.268-.782 9.716-5.326 18.63-12.557 24.74l.01-.01c-6.94 5.836-15.77 8.646-24.48 7.852-8.3-.746-15.86-4.71-20.98-10.946-4.848-5.89-7.113-13.347-6.337-20.67.723-6.88 4.104-13.075 9.324-17.212 4.866-3.862 10.966-5.595 16.853-4.848 5.48.694 10.327 3.477 13.445 7.657l.02.028c2.89 3.82 4.09 8.53 3.382 13.012-.645 4.05-2.82 7.56-5.958 9.74-2.79 1.93-6.12 2.625-9.148 1.98-2.644-.565-4.825-2.097-6.04-4.14-1.01-1.708-1.25-3.606-.748-5.19l-4.98-1.577L53 60.995c.394-1.22 1.164-2.08 2.01-2.423.277-.113.53-.154.73-.14.066.003.12.013.155.025.01.002 0 0-.017-.012-.02-.014-.06-.046-.103-.093-.065-.07-.128-.157-.185-.265-.167-.317-.25-.736-.19-1.213-.005.016-.006.033-.008.05.165-1.458 1.507-2.758 3.31-2.758-2.884 0-5.223 2.34-5.223 5.224 0 2.885 2.34 5.223 5.22 5.223z"></path> + <path d="M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074.14-2.64-1.89-4.89-4.52-5.03-2.64-.14-4.89 1.88-5.03 4.52-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01-.02-.015-.054-.045-.094-.088-.06-.064-.12-.145-.17-.244-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z"></path> </g> </svg> \ No newline at end of file From eb34709cc46d7d7c81d6551ae03793ec103f4122 Mon Sep 17 00:00:00 2001 From: Mario Wenzel <maweki@gmail.com> Date: Tue, 3 Nov 2015 19:56:14 +0100 Subject: [PATCH 058/242] Expand description of "TiddlyWeb and TiddlySpace components" This should fix #2019 --- plugins/tiddlywiki/tiddlyweb/readme.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/tiddlywiki/tiddlyweb/readme.tid b/plugins/tiddlywiki/tiddlyweb/readme.tid index c605c3ec7..ef94f3afc 100644 --- a/plugins/tiddlywiki/tiddlyweb/readme.tid +++ b/plugins/tiddlywiki/tiddlyweb/readme.tid @@ -1,5 +1,5 @@ title: $:/plugins/tiddlywiki/tiddlyweb/readme -This plugin runs in the browser to synchronise tiddler changes to and from a TiddlyWeb-compatible server (including TiddlyWiki 5 itself). It is inert when run under Node.js. +This plugin runs in the browser to synchronise tiddler changes to and from a TiddlyWeb-compatible server (including TiddlyWiki 5 itself, running on Node.js). It is inert when run under Node.js. Disabling this plugin via the browser can not be undone via the browser since this plugin provides the mechanism to synchronize settings with the server. [[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/tiddlyweb]] From f217451fc537951797c7dd0c9f19c195df50bede Mon Sep 17 00:00:00 2001 From: Felix Hayashi <ninshinobi@msn.com> Date: Tue, 3 Nov 2015 23:47:47 +0100 Subject: [PATCH 059/242] Replacing count's function body with Object.keys see #2046 --- core/modules/utils/utils.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/modules/utils/utils.js b/core/modules/utils/utils.js index f7f8340a7..b490c45f0 100644 --- a/core/modules/utils/utils.js +++ b/core/modules/utils/utils.js @@ -35,9 +35,7 @@ exports.trim = function(str) { Return the number of keys in an object */ exports.count = function(object) { - var s = 0; - $tw.utils.each(object,function() {s++;}); - return s; + return Object.keys(object || {}).length; }; /* @@ -645,4 +643,4 @@ exports.tagToCssSelector = function(tagName) { }; -})(); \ No newline at end of file +})(); From d0ca776edbb49bc9eda971c1fdf7355b8be84397 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 5 Nov 2015 12:30:42 +0000 Subject: [PATCH 060/242] Improve edit info banner for shadow tiddlers Add the name of the plugin that contains the shadow tiddler --- core/language/en-GB/EditTemplate.multids | 4 ++-- core/ui/EditTemplate/shadow.tid | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/language/en-GB/EditTemplate.multids b/core/language/en-GB/EditTemplate.multids index b864e7896..2125495e2 100644 --- a/core/language/en-GB/EditTemplate.multids +++ b/core/language/en-GB/EditTemplate.multids @@ -13,8 +13,8 @@ Fields/Add/Prompt: Add a new field: Fields/Add/Value/Placeholder: field value Fields/Add/Dropdown/System: System fields Fields/Add/Dropdown/User: User fields -Shadow/Warning: This is a shadow tiddler. Any changes will override the default version -Shadow/OverriddenWarning: This is a modified shadow tiddler. You can revert to the default version by deleting this tiddler +Shadow/Warning: This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>> +Shadow/OverriddenWarning: This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler Tags/Add/Button: add Tags/Add/Placeholder: tag name Tags/Dropdown/Caption: tag list diff --git a/core/ui/EditTemplate/shadow.tid b/core/ui/EditTemplate/shadow.tid index f35605eb6..d80c474f6 100644 --- a/core/ui/EditTemplate/shadow.tid +++ b/core/ui/EditTemplate/shadow.tid @@ -2,18 +2,37 @@ title: $:/core/ui/EditTemplate/shadow tags: $:/tags/EditTemplate \define lingo-base() $:/language/EditTemplate/Shadow/ +\define pluginLinkBody() +<$link to="""$(pluginTitle)$"""> +<$text text="""$(pluginTitle)$"""/> +</$link> +\end <$list filter="[all[current]get[draft.of]is[shadow]!is[tiddler]]"> + +<$list filter="[all[current]shadowsource[]]" variable="pluginTitle"> + +<$set name="pluginLink" value=<<pluginLinkBody>>> <div class="tc-message-box"> <<lingo Warning>> </div> +</$set> +</$list> + </$list> <$list filter="[all[current]get[draft.of]is[shadow]is[tiddler]]"> + +<$list filter="[all[current]shadowsource[]]" variable="pluginTitle"> + +<$set name="pluginLink" value=<<pluginLinkBody>>> <div class="tc-message-box"> <<lingo OverriddenWarning>> </div> </$list> + +</$list> +</$list> From bc0cbf907063ccd484da7d56c8e42cf5e90489b8 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 5 Nov 2015 12:31:34 +0000 Subject: [PATCH 061/242] Add a lazy loading template for all non-system tiddlers With this new template you can run TiddlyWiki under Node.js such that all non-system tiddlers are lazily loaded, and not baked into the HTML file. --- core/templates/save-lazy-all.tid | 6 ++++++ editions/tw5.com/tiddlers/features/LazyLoading.tid | 14 +++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 core/templates/save-lazy-all.tid diff --git a/core/templates/save-lazy-all.tid b/core/templates/save-lazy-all.tid new file mode 100644 index 000000000..5f9220e19 --- /dev/null +++ b/core/templates/save-lazy-all.tid @@ -0,0 +1,6 @@ +title: $:/core/save/lazy-all + +\define saveTiddlerFilter() +[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +\end +{{$:/core/templates/tiddlywiki5.html}} diff --git a/editions/tw5.com/tiddlers/features/LazyLoading.tid b/editions/tw5.com/tiddlers/features/LazyLoading.tid index 542b94918..c408f98ea 100644 --- a/editions/tw5.com/tiddlers/features/LazyLoading.tid +++ b/editions/tw5.com/tiddlers/features/LazyLoading.tid @@ -1,5 +1,5 @@ created: 20140206214608586 -modified: 20140912141710950 +modified: 20151105122712982 tags: Features title: LazyLoading type: text/vnd.tiddlywiki @@ -8,14 +8,22 @@ Ordinarily with TiddlyWiki, the full content of all tiddlers is embedded into th Lazy loading can be used in two configurations: -* When running [[TiddlyWiki on Node.js]], image tiddlers can be subject to lazy loading +* When running [[TiddlyWiki on Node.js]], just image tiddlers or all non-system tiddlers can be subject to lazy loading * When running [[TiddlyWiki in the Sky for TiddlyWeb]], all tiddlers are subject to lazy loading See the LazyLoadingMechanism for details of how lazy loading is implemented. ! Lazy loading under Node.js -To run TiddlyWiki with lazy loading for images, use this alternative ServerCommand to start the server: +To start TiddlyWiki with lazy loading for image tiddlers use this command: + + +``` +tiddlywiki --server 8080 $:/core/save/lazy-images +``` + +To apply lazy loading to all non-system tiddlers use this command: + ``` tiddlywiki --server 8080 $:/core/save/lazy-images From 0769b90bb721aca6164fa37f55274504085d6824 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 5 Nov 2015 12:32:57 +0000 Subject: [PATCH 062/242] Text-slicer: Control preview column with dropdown Instead of showing a sequence of all documents in the preview column, we just show a single document, with a dropdown to choose which one is shown. The change makes it easier to deal with large numbers of documents. --- .../text-slicer/ui/preview-column-empty.tid | 11 +++++++++++ .../text-slicer/ui/preview-column-multiple.tid | 13 +++++++++++++ .../text-slicer/ui/preview-column-single.tid | 3 +++ .../tiddlywiki/text-slicer/ui/preview-column.tid | 6 +++--- 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 plugins/tiddlywiki/text-slicer/ui/preview-column-empty.tid create mode 100644 plugins/tiddlywiki/text-slicer/ui/preview-column-multiple.tid create mode 100644 plugins/tiddlywiki/text-slicer/ui/preview-column-single.tid diff --git a/plugins/tiddlywiki/text-slicer/ui/preview-column-empty.tid b/plugins/tiddlywiki/text-slicer/ui/preview-column-empty.tid new file mode 100644 index 000000000..357d12f63 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/ui/preview-column-empty.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/text-slicer/ui/preview-column/empty + +<div class="tc-sliced-document-header"> + +Create a document by slicing an existing tiddler + +--- + +[[Help|$:/plugins/tiddlywiki/text-slicer/docs]] + +</div> diff --git a/plugins/tiddlywiki/text-slicer/ui/preview-column-multiple.tid b/plugins/tiddlywiki/text-slicer/ui/preview-column-multiple.tid new file mode 100644 index 000000000..8f25c7713 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/ui/preview-column-multiple.tid @@ -0,0 +1,13 @@ +title: $:/plugins/tiddlywiki/text-slicer/ui/preview-column/multiple + +Show document: <$select tiddler="$:/plugins/tiddlywiki/text-slicer/config/currentDocument"> +<$list filter="[toc-type[document]!has[draft.of]sort[title]]"> +<option value=<<currentTiddler>>><$view field="title"/></option> +</$list> +</$select> + +<$tiddler tiddler={{$:/plugins/tiddlywiki/text-slicer/config/currentDocument}}> + +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/interactive/document"/> + +</$tiddler> diff --git a/plugins/tiddlywiki/text-slicer/ui/preview-column-single.tid b/plugins/tiddlywiki/text-slicer/ui/preview-column-single.tid new file mode 100644 index 000000000..0898203da --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/ui/preview-column-single.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/text-slicer/ui/preview-column/single + +<$list filter="[toc-type[document]!has[draft.of]sort[title]limit[1]]" template="$:/plugins/tiddlywiki/text-slicer/templates/interactive/document"/> diff --git a/plugins/tiddlywiki/text-slicer/ui/preview-column.tid b/plugins/tiddlywiki/text-slicer/ui/preview-column.tid index f1032dce8..41eeac5fa 100644 --- a/plugins/tiddlywiki/text-slicer/ui/preview-column.tid +++ b/plugins/tiddlywiki/text-slicer/ui/preview-column.tid @@ -3,10 +3,10 @@ tags: $:/tags/AboveStory <$scrollable fallthrough="no" class="tc-document-preview-column"> -<$vars tv-default-heading-state="closed" tv-heading-status-config-prefix="preview-column"> +<$list filter="[toc-type[document]!has[draft.of]sort[title]limit[1]]" emptyMessage={{$:/plugins/tiddlywiki/text-slicer/ui/preview-column/empty}}> -<$list filter="[toc-type[document]!has[draft.of]sort[title]]" template="$:/plugins/tiddlywiki/text-slicer/templates/interactive/document"/> +<$list filter="[toc-type[document]!has[draft.of]sort[title]butfirst[1]limit[1]]" emptyMessage={{$:/plugins/tiddlywiki/text-slicer/ui/preview-column/single}} template="$:/plugins/tiddlywiki/text-slicer/ui/preview-column/multiple"/> -</$vars> +</$list> </$scrollable> From 0b99ac2b75402ddcfa0b995f75c0e12468b6994b Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 5 Nov 2015 13:07:27 +0000 Subject: [PATCH 063/242] Add information about TiddlyDesktop v0.0.6 --- .../TiddlyDesktop_Release_0.0.6.tid | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.6.tid diff --git a/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.6.tid b/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.6.tid new file mode 100644 index 000000000..4c42e88af --- /dev/null +++ b/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.6.tid @@ -0,0 +1,24 @@ +caption: 0.0.6 +created: 20151029171331736 +modified: 20151029171331736 +tags: TiddlyDesktopReleaseNotes +title: TiddlyDesktop Release 0.0.6 +type: text/vnd.tiddlywiki +released: 20151029 + +<a href="https://github.com/Jermolene/TiddlyDesktop/releases/tag/v0.0.6" class="tc-btn-big-green" target="_blank"> +{{$:/core/images/github}} Download from ~GitHub +</a> + +[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyDesktop/compare/v0.0.5...v0.0.6]] + +A minor bug fix release. + +Please report any problems or suggestions via GitHub issues, or post to the TiddlyWiki discussion group: + +http://groups.google.com/group/TiddlyWiki + +* Added ability to drag and drop TiddlyWiki files into the wiki list window from Windows Explorer/Mac Finder +* Fixed bug triggered by moving TiddlyDesktop executable after first running it +* Added custom user agent string identifying TiddlyDesktop +** eg ``Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 TiddlyDesktop/0.0.6`` From 99969024f862936c7140c9c0b5ce04ca89f37dc8 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 5 Nov 2015 13:07:34 +0000 Subject: [PATCH 064/242] Update release note --- editions/prerelease/tiddlers/Release 5.1.10.tid | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/editions/prerelease/tiddlers/Release 5.1.10.tid b/editions/prerelease/tiddlers/Release 5.1.10.tid index 7b394fa7a..1ce790d45 100644 --- a/editions/prerelease/tiddlers/Release 5.1.10.tid +++ b/editions/prerelease/tiddlers/Release 5.1.10.tid @@ -1,6 +1,6 @@ caption: 5.1.10 -created: 20150801123725652 -modified: 20150801123725652 +created: 20151105122712982 +modified: 20151105122712982 tags: ReleaseNotes title: Release 5.1.10 type: text/vnd.tiddlywiki @@ -64,7 +64,7 @@ Revert * Added Swedish translation by @Superdos * Added Korean (Korean Republic) translation by @araname -* Improved Danish and Dutch translations +* Improved Chinese, Danish, Dutch and Russian translations !! Usability Improvements @@ -93,6 +93,8 @@ Revert * [[Made|https://github.com/Jermolene/TiddlyWiki5/commit/746aab2cf6bbe3c1905efd5caf80e40e23b914b0]] the tw5.com documentation available as a plugin and an <a href="editions/tw5.com-docs/index.html" target="_blank">edition</a>, simplifying some scenarios for re-using it * [[Improved|https://github.com/Jermolene/TiddlyWiki5/commit/0035a0046315ee0203b1adfb75efdbb0e854a7f6]] rendering of "More" sidebar tab gradients in the "Snow White" theme * [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/33563d01baed4b4092fc834eb6a1df55e1671418]] option in [[control panel|$:/ControlPanel]] to enable the display of detailed performance instrumentation in the browser developer console +* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/bc0cbf907063ccd484da7d56c8e42cf5e90489b8]] a LazyLoading template for all non-system tiddlers +* [[Improved|https://github.com/Jermolene/TiddlyWiki5/issues/1984]] handling of TiddlerLinks in Markdown tiddlers !! Bug Fixes @@ -118,13 +120,18 @@ Revert * [[@araname|https://github.com/araname]] * [[@BramChen|https://github.com/BramChen]] * [[@danielo515|https://github.com/danielo515]] +* [[@erwanm|https://github.com/erwanm]] * [[@Evolena|https://github.com/Evolena]] * [[@hegart-dmishiv|https://github.com/hegart-dmishiv]] * [[@idoine|https://github.com/idoine]] * [[@inmysocks|https://github.com/inmysocks]] +* [[@kixam|https://github.com/kixam]] +* [[@Marxsal|https://github.com/Marxsal]] * [[@matabele|https://github.com/matabele]] * [[@nameanyone|https://github.com/nameanyone]] +* [[@pmario|https://github.com/pmario]] * [[@senevoldsen90|https://github.com/senevoldsen90]] +* [[@Spangenhelm|https://github.com/Spangenhelm]] * [[@SuperDOS|https://github.com/SuperDOS]] * [[@tgrosinger|https://github.com/tgrosinger]] * [[@tobibeer|https://github.com/tobibeer]] From 171fd2c85355f302508d6c69cd62b87f46bad6b3 Mon Sep 17 00:00:00 2001 From: Bram Chen <bram.chen@gmail.com> Date: Thu, 5 Nov 2015 21:48:22 +0800 Subject: [PATCH 065/242] Improve chinese translations of edit info banner for shadow tiddlers Add the name of the plugin that contains the shadow tiddler --- languages/zh-Hans/EditTemplate.multids | 4 ++-- languages/zh-Hant/EditTemplate.multids | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/languages/zh-Hans/EditTemplate.multids b/languages/zh-Hans/EditTemplate.multids index 9b56579e3..dac971fc0 100644 --- a/languages/zh-Hans/EditTemplate.multids +++ b/languages/zh-Hans/EditTemplate.multids @@ -13,8 +13,8 @@ Fields/Add/Dropdown/User: 使用者栏位 Fields/Add/Name/Placeholder: 栏位名称 Fields/Add/Prompt: 添加栏位: Fields/Add/Value/Placeholder: 栏位内容 -Shadow/Warning: 这是默认条目,任何更改将会覆盖默认的版本。 -Shadow/OverriddenWarning: 这是修改过的默认条目,删除此条目可以还原为默认的版本。 +Shadow/Warning: 这是一个默认条目。您做的任何更改将会覆盖来自 <<pluginLink>> 插件的默认版本。 +Shadow/OverriddenWarning: 这是一个修改过的默认条目。删除此条目可以还原为 <<pluginLink>> 插件中的默认版本。 Tags/Add/Button: 添加 Tags/Add/Placeholder: 标签名称 Tags/Dropdown/Caption: 标签清单 diff --git a/languages/zh-Hant/EditTemplate.multids b/languages/zh-Hant/EditTemplate.multids index ffb6a1b1d..1cd11961c 100644 --- a/languages/zh-Hant/EditTemplate.multids +++ b/languages/zh-Hant/EditTemplate.multids @@ -13,8 +13,8 @@ Fields/Add/Dropdown/User: 使用者欄位 Fields/Add/Name/Placeholder: 欄位名稱 Fields/Add/Prompt: 新增欄位: Fields/Add/Value/Placeholder: 欄位內容 -Shadow/Warning: 這是預設條目,任何更改將會覆蓋預設的版本。 -Shadow/OverriddenWarning: 這是修改過的預設條目,刪除此條目可以還原為預設的版本。 +Shadow/Warning: 這是一個預設條目。您做的任何更改將會覆蓋來自 <<pluginLink>> 插件的預設版本。 +Shadow/OverriddenWarning: 這是一個修改過的預設條目。刪除此條目可以還原為 <<pluginLink>> 插件中的預設版本。 Tags/Add/Button: 新增 Tags/Add/Placeholder: 標籤名稱 Tags/Dropdown/Caption: 標籤清單 From 3b64497c571cbe18196b465509667ba85a0d5f65 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 5 Nov 2015 15:09:40 +0000 Subject: [PATCH 066/242] Fix docs typo Thanks @BramChen --- editions/tw5.com/tiddlers/features/LazyLoading.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/features/LazyLoading.tid b/editions/tw5.com/tiddlers/features/LazyLoading.tid index c408f98ea..0d2adb623 100644 --- a/editions/tw5.com/tiddlers/features/LazyLoading.tid +++ b/editions/tw5.com/tiddlers/features/LazyLoading.tid @@ -26,7 +26,7 @@ To apply lazy loading to all non-system tiddlers use this command: ``` -tiddlywiki --server 8080 $:/core/save/lazy-images +tiddlywiki --server 8080 $:/core/save/lazy-all ``` ! Lazy loading under TiddlyWeb From befb13dde11cebf339b7d8baa1e56b3640524e41 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 09:49:07 +0200 Subject: [PATCH 067/242] Update x-listops.js Change default suffix for append[], prepend[] and remove[] operators from 1 to All --- core/modules/filters/x-listops.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/core/modules/filters/x-listops.js b/core/modules/filters/x-listops.js index 8b66a24c6..63edcd142 100644 --- a/core/modules/filters/x-listops.js +++ b/core/modules/filters/x-listops.js @@ -122,10 +122,10 @@ Extended filter operators to manipulate the current list. Appends the items listed in the operand array to the tail of the current list */ exports.append = function (source, operator, options) { - var results = prepare_results(source), - count = parseInt(operator.suffix) || 1, - append = $tw.utils.parseStringArray(operator.operand); - if (append === "") { + var append = $tw.utils.parseStringArray(operator.operand), + results = prepare_results(source), + count = parseInt(operator.suffix) || append.length; + if (append.length === 0) { return results; } if (operator.prefix) { @@ -139,10 +139,10 @@ Extended filter operators to manipulate the current list. Prepends the items listed in the operand array to the head of the current list */ exports.prepend = function (source, operator, options) { - var results = prepare_results(source), - count = parseInt(operator.suffix) || 1, - prepend = $tw.utils.parseStringArray(operator.operand); - if (prepend === "") { + var prepend = $tw.utils.parseStringArray(operator.operand), + results = prepare_results(source), + count = parseInt(operator.suffix) || prepend.length; + if (prepend.length === 0) { return results; } if (operator.prefix) { @@ -156,9 +156,10 @@ Extended filter operators to manipulate the current list. Returns all items from the current list except the items listed in the operand array */ exports.remove = function (source, operator, options) { - var results = prepare_results(source), - count = parseInt(operator.suffix) || 1, - p, len, index, array = $tw.utils.parseStringArray(operator.operand); + var array = $tw.utils.parseStringArray(operator.operand), + results = prepare_results(source), + count = parseInt(operator.suffix) || array.length, + p, len, index; len = array.length - 1; for (p = 0; p < count; ++p) { if (operator.prefix) { From ac9aa78859c05e9466d7fd642176fbbb6b5d67c1 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 09:56:37 +0200 Subject: [PATCH 068/242] Create ActionListopsWidget.tid Primary documentation for ActionListops widget --- .../tiddlers/widgets/ActionListopsWidget.tid | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid diff --git a/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid b/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid new file mode 100644 index 000000000..926a21f15 --- /dev/null +++ b/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid @@ -0,0 +1,128 @@ +caption: action-listops +created: 20141025120850184 +creator: matabele +modified: 20151108075247352 +modifier: matabele +myfield: +revision: 0 +tags: ActionWidgets Widgets +title: ActionListopsWidget +type: text/vnd.tiddlywiki + +\define .operator-rows(filter) +<$list filter="$filter$"><tr> +<td><$link to={{!!title}}>{{!!caption}}</$link></td> +<td>{{!!op-purpose}} <$list filter="[all[current]tag[Common Operators]]">{{$:/core/images/done-button}}</$list></td> +<td align="center"><$list filter="[all[current]tag[Negatable Operators]]">`!`</$list></td> +</tr></$list> +\end + +\define .group-heading(_) +<tr class="doc-table-subheading"><th colspan="3" align="center">$_$</th></tr> +\end + +! Introduction + +The ''action-listops'' widget is an [[action widget|ActionWidgets]] that manipulates user lists in any field or data index. ActionWidgets are used within triggering widgets such as the ButtonWidget. + +! Content and Attributes + +The ''action-listops'' widget is invisible. Any content within it is ignored. + +|!Attribute |!Description | +|$tiddler |The title of the tiddler whose lists are to be modified (if not provided defaults to the [[current tiddler|Current Tiddler]] | +|$list |The name of a field to be manipulated as a list (defaults to 'list') | +|$index |Optional index of a property in a [[data tiddler|DataTiddlers]] index to be manipulated as a list | +|$filter |An optional filter expression, the output of which will be saved to the field/index being manipulated | +|$subfilter |An optional subfilter expression, which takes the list being manipulated as input, and saves the modified list back to the field/index being manipulated | +|$tags |An optional subfilter expression, which takes the 'tags' field of the target tiddler as input, and saves the modified list of tags back to the 'tags' field | + +! Extended Filter Operators + +A number of [[extended filter operators|The Extended Listops Filters]] are necessary for the manipulation of lists. These operators have been designed primarily for use in subfilter expressions whereby the modified current list is returned in place of the current list. + +<table> +<<.group-heading "Listops Operators">> +<tr> +<th align="left">Operator</th> +<th align="left">Purpose</th> +<th></th> +</tr> +<<.operator-rows "[tag[Filter Operators]tag[Listops Operators]tag[Order Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">> +</table> + +! Examples + +In this example we shall populate and then clear a list in an ordinary field (myfield) of this tiddler (the default.) + +<$macrocall $name='wikitext-example-without-html' +src="""<$button> +<$action-listops $list="myfield" $subfilter="efg hlm pqr"/> +Populate 'myfield' +</$button> +<$button> +<$action-listops $list="myfield" $subfilter="abc xyz"/> +Append More Items +</$button> +<$button> +<$action-listops $list="myfield" $subfilter="-abc -hlm"/> +Remove Items +</$button> +<$button> +<$action-listops $list="myfield" $filter="[[]]"/> +Clear 'myfield' +</$button> + +<$list filter="[list[!!myfield]]"> + +</$list>"""/> + +--- +In this example we shall append and remove items from a list in an ordinary field (myfield) of this tiddler (the default) and sort the resultant list. We shall then remove some of the appended items and sort the resulting list in reverse order. + +<$macrocall $name='wikitext-example-without-html' +src="""<$button> +<$action-listops $list="myfield" $subfilter="-efg ijk xyz [[this is a title]] +[sort[]]"/> +Mangle List +</$button> +<$button> +<$action-listops $list="myfield" $subfilter="-xyz -[[this is a title]] +[!sort[]]"/> +Unmangle List +</$button> + +<$list filter="[list[!!myfield]]"> + +</$list>"""/> + +--- +In this example we shall append a few tags to the 'tags' field of this tiddler (the default.) We shall then remove some of the appended tags. + +<$macrocall $name='wikitext-example-without-html' +src="""<$button> +<$action-listops $tags="+[append{Days of the Week!!short}] $:/tag1 $:/tag2 $:/tag3"/> +Populate 'tags' +</$button> +<$button> +<$action-listops $tags="+[!remove:2{!!tags}]"/> +Remove Last Two Tags +</$button> +<$button> +<$action-listops $tags="+[!prefix[$:/]]"/> +Remove System Tags +</$button> +<$button> +<$action-listops $tags="-Mon -Tue"/> +Remove Mon and Tue +</$button> +<$button> +<$action-listops $tags="+[prefix[$:/]] ActionWidgets Widgets"/> +Remove User Tags +</$button> +<$button> +<$action-listops $tags="+[[]] ActionWidgets Widgets"/> +Clear Tags +</$button> + +<$list filter="[list[!!tags]]"> + +</$list>"""/> From 7370d616029d1bef0e0c56f9640b7dc2325e94d0 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 09:59:41 +0200 Subject: [PATCH 069/242] Create The Extended Listops Filters.tid Supplementary documentation for the ActionListops widget -- examples using the extended filters --- .../widgets/The Extended Listops Filters.tid | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid diff --git a/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid b/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid new file mode 100644 index 000000000..7c4a57152 --- /dev/null +++ b/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid @@ -0,0 +1,113 @@ +created: 20151014170727812 +creator: matabele +days: Fri Wed Mon Tue +dofwks: Mon Tue Wed Thu Fri Sat Sun +item1: six +item2: seven +item3: eight +list: Yesterday Today Tomorrow +marker: Thursday +modified: 20151108054957921 +modifier: matabele +myfield: Monday Tuesday [[Middle of the Week]] Thursday Friday Saturday Sunday +numbers: 1 2 3 4 five 6 7 8 9 +title: The Extended Listops Filters + +! Introduction + +A number of extended filters are necessary to manipulate lists. The first set of filters are designed to move items from the tail of the list and insert them at specified locations in the list. Items are often appended to the list before using these filters. In general, these filters accept a suffix specifying the number of items to move (defaults to 1.) + +A second set of filters are designed to either add or remove from the list, a selected range of items from an array. These filters are best used with a reference to an array, stored in a field or data indexe elsewhere in the wiki (they may be used with a simple list of items, provided the items do not include white space.) In general, these filters accept a suffix specifying the number of items to move (defaults to All.) + +! Examples + +In this example we shall populate the '~DataIndex' index of the tiddler '~MyData' with the names of the days of the week, then clear this list. + +<$macrocall $name='wikitext-example-without-html' +src="""<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $filter="[list[Days of the Week]]"/> +Get days-of-the-week +</$button> +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $filter="[[]]"/> +Clear +</$button> + +{{ListopsData}}"""/> + +--- +In this example we shall slice the populated list from the 'DaysOfTheWeek' index of the tiddler '~MyData' in order to insert items before and after a marker item (Wednesday) that are first appended to the list. + +<$macrocall $name='wikitext-example-without-html' +src="""<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="one two +[putbefore:2[Wednesday]]"/> +Put 2 Items Before Wednesday +</$button> +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="four five +[putafter:2[Wednesday]] three +[putbefore[Wednesday]]"/> +Put One Item Before & Two Items After Wednesday +</$button> + +{{ListopsData}}"""/> + +--- +In this example we shall slice the populated list from the 'DaysOfTheWeek' index of the tiddler '~MyData' in order to replace the marker item (Wednesday) with items which are first appended to the list. We shall then move 3 items to the head of the list which have first been appended to the list from referenced fields. + +<$macrocall $name='wikitext-example-without-html' +src="""<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="[[---o]] [[o---]] +[replace:2{!!marker}]"/> +Replace '!!marker' with 2 Items +</$button> +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="[{!!item1}] [{!!item2}] [{!!item3}] +[putfirst:3[]]"/> +Put 3 Items First +</$button> + +{{ListopsData}}"""/> + +--- +In this example we shall slice the populated list from the 'DaysOfTheWeek' index of the tiddler '~MyData' in order to append to the truncated list, items from a referenced field. We shall then remove the first two of the items added. + +<$macrocall $name='wikitext-example-without-html' +src="""|list: |<$view field="list"/> | + +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[allbefore:include[Wednesday]] +[prepend{!!list}]"/> +Prepend '!!list' to items before 'Wednesday' +</$button> +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[remove:2{!!list}]"/> +Remove first two items in '!!list' from current list +</$button> +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[!remove:1{!!list}]"/> +Remove last item in '!!list' from current list +</$button> + +{{ListopsData}}"""/> + +--- +In this example we shall populate the list with numbers, then move items one by one from the head to the tail and from the tail to the head (best seen by clicking the lower buttons several times.) + +This example illustrates that the append[] and prepend[] operators do not enforce unique instances of an item and that, with the next run, any duplicates are removed. + +<$macrocall $name='wikitext-example-without-html' +src="""<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $filter="[[]]" $subfilter="+[append:3{!!numbers}]"/> +Setup some numbers +</$button> +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[!append:6{!!numbers}]"/> +Append more numbers +</$button> + +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[putfirst:2[]]"/> +Move last 2 items to the head +</$button> +<$button> +<$action-listops $tiddler="ListopsData" $index="DataIndex" $subfilter="+[putlast[]]"/> +Move the head to the last item +</$button> + +{{ListopsData}}"""/> From fad106d2d5d7b94190a171deea31f9d7a851dc02 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:02:28 +0200 Subject: [PATCH 070/242] Update FilterOperators.tid Added category for extended listops filter operators --- editions/tw5.com/tiddlers/filters/FilterOperators.tid | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/editions/tw5.com/tiddlers/filters/FilterOperators.tid b/editions/tw5.com/tiddlers/filters/FilterOperators.tid index 60fdb35cd..5390dbf55 100644 --- a/editions/tw5.com/tiddlers/filters/FilterOperators.tid +++ b/editions/tw5.com/tiddlers/filters/FilterOperators.tid @@ -1,9 +1,3 @@ -created: 20140410103123179 -modified: 20150917193612610 -tags: Filters -title: Filter Operators -type: text/vnd.tiddlywiki - \define .operator-rows(filter) <$list filter="$filter$"><tr> <td><$link to={{!!title}}>{{!!caption}}</$link></td> @@ -28,7 +22,9 @@ The following table lists all the core operators. The commonest ones are checkma </tr> <<.operator-rows "[tag[Filter Operators]!tag[Order Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">> <<.group-heading "Order Operators">> -<<.operator-rows "[tag[Filter Operators]tag[Order Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">> +<<.operator-rows "[tag[Filter Operators]tag[Order Operators]!tag[Listops Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">> +<<.group-heading "Listops Operators">> +<<.operator-rows "[tag[Filter Operators]tag[Listops Operators]tag[Order Operators]!tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">> <<.group-heading "String Operators">> <<.operator-rows "[tag[Filter Operators]!tag[Order Operators]tag[String Operators]!tag[Tag Operators]!tag[Special Operators]sort[]]">> <<.group-heading "Tag Operators">> From 2adb005c28107101e9f54fecc5b46d1de0018158 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:05:26 +0200 Subject: [PATCH 071/242] Create allafter.tid --- editions/tw5.com/tiddlers/filters/allafter.tid | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/allafter.tid diff --git a/editions/tw5.com/tiddlers/filters/allafter.tid b/editions/tw5.com/tiddlers/filters/allafter.tid new file mode 100644 index 000000000..bdb21a919 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/allafter.tid @@ -0,0 +1,17 @@ +caption: allafter +created: 20151017145021839 +creator: matabele +modified: 20151108051523860 +modifier: matabele +op-input: a list of items +op-output: all items after the marker +op-parameter: the list item to be used as a marker +op-parameter-name: marker +op-purpose: discard all items except those after the marker +op-suffix: specifying a suffix ('include') will include the marker in the output +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: allafter Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "allafter">> From d87c328fd95831d956df2ed793703fa1af01e42b Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:06:50 +0200 Subject: [PATCH 072/242] Create allafter.tid --- .../tw5.com/tiddlers/filters/examples/allafter.tid | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/allafter.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/allafter.tid b/editions/tw5.com/tiddlers/filters/examples/allafter.tid new file mode 100644 index 000000000..62f29dbc2 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/allafter.tid @@ -0,0 +1,13 @@ +created: 20151022123929297 +creator: matabele +modified: 20151108080543606 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[allafter Operator]] +title: allafter Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]] +[allafter[Wednesday]]">> +<<.operator-example 2 "[list[Days of the Week]] +[allafter:include[Wednesday]]">> From e9c79faf0509df1fab812aa7e33b540d305ee7df Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:08:01 +0200 Subject: [PATCH 073/242] Create allbefore.tid --- editions/tw5.com/tiddlers/filters/allbefore.tid | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/allbefore.tid diff --git a/editions/tw5.com/tiddlers/filters/allbefore.tid b/editions/tw5.com/tiddlers/filters/allbefore.tid new file mode 100644 index 000000000..51c176747 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/allbefore.tid @@ -0,0 +1,17 @@ +caption: allbefore +created: 20151017145131857 +creator: matabele +modified: 20151108051507578 +modifier: matabele +op-input: a list of items +op-output: all items before the marker +op-parameter: the list item to be used as a marker +op-parameter-name: marker +op-purpose: discard all items except those before the marker +op-suffix: specifying a suffix ('include') will include the marker in the output +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: allbefore Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "allbefore">> From 31b9835a4e8b9536a356253e8e829f894d36cc7f Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:09:00 +0200 Subject: [PATCH 074/242] Create allbefore.tid --- .../tw5.com/tiddlers/filters/examples/allbefore.tid | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/allbefore.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/allbefore.tid b/editions/tw5.com/tiddlers/filters/examples/allbefore.tid new file mode 100644 index 000000000..4a125df86 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/allbefore.tid @@ -0,0 +1,13 @@ +created: 20151017150902487 +creator: matabele +modified: 20151108051438263 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[allbefore Operator]] +title: allbefore Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]allbefore[Wednesday]]">> +<<.operator-example 2 "[list[Days of the Week]allbefore:include[Wednesday]]">> From b2edbd8d1d0b648c49b0e23329a0b33a160ce1ce Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:10:37 +0200 Subject: [PATCH 075/242] Create append.tid --- editions/tw5.com/tiddlers/filters/append.tid | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/append.tid diff --git a/editions/tw5.com/tiddlers/filters/append.tid b/editions/tw5.com/tiddlers/filters/append.tid new file mode 100644 index 000000000..c481a790e --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/append.tid @@ -0,0 +1,18 @@ +caption: append +created: 20151017145358368 +creator: matabele +modified: 20151108051540981 +modifier: matabele +op-input: a list of items +op-neg-output: a list with items appended from the tail of the operand array +op-output: a list with items appended from the head of the operand array +op-parameter: the array of items to be appended to the tail of the list +op-parameter-name: list +op-purpose: append a range of items from an array to the list +op-suffix: an integer N, defaulting to all +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: append Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "append">> From abdd1e7fd6610d2064a940ee768f456cd652c774 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:11:17 +0200 Subject: [PATCH 076/242] Create append.tid --- .../tiddlers/filters/examples/append.tid | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/append.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/append.tid b/editions/tw5.com/tiddlers/filters/examples/append.tid new file mode 100644 index 000000000..3eddb92de --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/append.tid @@ -0,0 +1,17 @@ +created: 20151017150942725 +creator: matabele +modified: 20151108051557748 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[append Operator]] +title: append Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]append[Tomorrow]]">> +<<.operator-example 2 "[list[Days of the Week]append[Yesterday Today Tomorrow]]">> + +;Append the first 4 short days of the week to our list + +<<.operator-example 3 "[list[Days of the Week]append:4{Days of the Week!!short}]">> From b1cfc8633f67cf0370c9022e616a4d710eb856a8 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:25:04 +0200 Subject: [PATCH 077/242] Create move.tid --- editions/tw5.com/tiddlers/filters/move.tid | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/move.tid diff --git a/editions/tw5.com/tiddlers/filters/move.tid b/editions/tw5.com/tiddlers/filters/move.tid new file mode 100644 index 000000000..6007c6da3 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/move.tid @@ -0,0 +1,17 @@ +caption: move +created: 20151022123413501 +creator: matabele +modified: 20151108082424017 +modifier: matabele +op-input: a list of items +op-output: re-ordered list of items +op-parameter: the list item to be used as a marker +op-parameter-name: marker +op-purpose: move marker N places in the list +op-suffix: an integer N, defaulting to 1 +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: move Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "move">> From 18a0f6b12df24bf9f8e7be516abfebe029c27fd1 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:25:42 +0200 Subject: [PATCH 078/242] Create move.tid --- editions/tw5.com/tiddlers/filters/examples/move.tid | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/move.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/move.tid b/editions/tw5.com/tiddlers/filters/examples/move.tid new file mode 100644 index 000000000..a7c90e9ef --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/move.tid @@ -0,0 +1,13 @@ +created: 20151022123633433 +creator: matabele +modified: 20151108051643871 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[move Operator]] +title: move Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]] +[move[Wednesday]]">> +<<.operator-example 2 "[list[Days of the Week]] +[move:-2[Wednesday]]">> From 1358cd5185ceb156ea3ef2ec939fd211496ca7e3 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:26:45 +0200 Subject: [PATCH 079/242] Create prepend.tid --- editions/tw5.com/tiddlers/filters/prepend.tid | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/prepend.tid diff --git a/editions/tw5.com/tiddlers/filters/prepend.tid b/editions/tw5.com/tiddlers/filters/prepend.tid new file mode 100644 index 000000000..e45c1b0b1 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/prepend.tid @@ -0,0 +1,18 @@ +caption: prepend +created: 20151017145439292 +creator: matabele +modified: 20151108051701587 +modifier: matabele +op-input: a list of items +op-neg-output: a list with items prepended from the tail of the operand array +op-output: a list with items prepended from the head of the operand array +op-parameter: the array of items to be prepended to the head of the list +op-parameter-name: list +op-purpose: prepend a range of items from an array to the list +op-suffix: an integer N, defaulting to all +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: prepend Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "prepend">> From 88a5c742e7af015e0bd57052cde80768c0580233 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:27:35 +0200 Subject: [PATCH 080/242] Create prepend.tid --- .../tiddlers/filters/examples/prepend.tid | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/prepend.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/prepend.tid b/editions/tw5.com/tiddlers/filters/examples/prepend.tid new file mode 100644 index 000000000..d2dceced5 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/prepend.tid @@ -0,0 +1,18 @@ +created: 20151017151508135 +creator: matabele +modified: 20151108051743531 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[prepend Operator]] +title: prepend Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +The operator may be used to prepend a number of items to the list. + +<<.operator-example 1 "[list[Days of the Week]prepend[Yesterday Today Tomorrow]]">> + +The operand may list only items without spaces -- to include items with spaces, use a reference to an array e.g. prepend the last three short days of the week to the list + +<<.operator-example 2 "[list[Days of the Week]!prepend:3{Days of the Week!!short}]">> From ec2d819c8c07ce167d82c1bb416d6723de000627 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:28:38 +0200 Subject: [PATCH 081/242] Create putafter.tid --- editions/tw5.com/tiddlers/filters/putafter.tid | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/putafter.tid diff --git a/editions/tw5.com/tiddlers/filters/putafter.tid b/editions/tw5.com/tiddlers/filters/putafter.tid new file mode 100644 index 000000000..dd41a4c61 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/putafter.tid @@ -0,0 +1,17 @@ +caption: putafter +created: 20151017144307862 +creator: matabele +modified: 20151108051805137 +modifier: matabele +op-input: a list of items +op-output: re-ordered list of items +op-parameter: the list item to be used as a marker +op-parameter-name: marker +op-purpose: move N trailing items after the marker +op-suffix: an integer N, defaulting to 1 +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: putafter Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "putafter">> From 72889a0527e7174ee14ef61fa67345f67e19c936 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:29:17 +0200 Subject: [PATCH 082/242] Create putafter.tid --- .../tw5.com/tiddlers/filters/examples/putafter.tid | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/putafter.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/putafter.tid b/editions/tw5.com/tiddlers/filters/examples/putafter.tid new file mode 100644 index 000000000..0241e0a32 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/putafter.tid @@ -0,0 +1,14 @@ +created: 20151017151905558 +creator: matabele +modified: 20151108051825288 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[putafter Operator]] +title: putafter Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]] +[putafter[Wednesday]]">> +<<.operator-example 2 "[list[Days of the Week]] +[putafter:2[Tuesday]]">> +<<.operator-example 3 "[list[Days of the Week]] [[Yesterday]] [[Today]] [[Tomorrow]] +[putafter:3[Tuesday]]">> From cab0900ddd59c6ec78d2b5d234dd0e73c5b9ddd0 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:30:08 +0200 Subject: [PATCH 083/242] Create putbefore.tid --- editions/tw5.com/tiddlers/filters/putbefore.tid | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/putbefore.tid diff --git a/editions/tw5.com/tiddlers/filters/putbefore.tid b/editions/tw5.com/tiddlers/filters/putbefore.tid new file mode 100644 index 000000000..bf14b29eb --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/putbefore.tid @@ -0,0 +1,17 @@ +caption: putbefore +created: 20140410103123179 +creator: matabele +modified: 20151108051842788 +modifier: matabele +op-input: a [[selection of titles|Title Selection]] +op-output: the first <<.place N>> input titles +op-parameter: an integer, defaulting to 1 +op-parameter-name: marker +op-purpose: move N trailing items before the marker +op-suffix: an integer N, defaulting to 1 +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: putbefore Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "putbefore">> From cb6b8233fadd45b856b8105759676d98fdc57fa6 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:30:47 +0200 Subject: [PATCH 084/242] Create putbefore.tid --- .../tiddlers/filters/examples/putbefore.tid | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/putbefore.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/putbefore.tid b/editions/tw5.com/tiddlers/filters/examples/putbefore.tid new file mode 100644 index 000000000..467cc09e6 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/putbefore.tid @@ -0,0 +1,14 @@ +created: 20151022142602628 +creator: matabele +modified: 20151108051906935 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[putbefore Operator]] +title: putbefore Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]] +[putbefore[Wednesday]]">> +<<.operator-example 2 "[list[Days of the Week]] +[putbefore:2[Tuesday]]">> +<<.operator-example 3 "[list[Days of the Week]] [[Yesterday]] [[Today]] [[Tomorrow]] +[putbefore:3[Tuesday]]">> From 008f22b511ac135918cad973c48b8f7deb74fb2b Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:32:12 +0200 Subject: [PATCH 085/242] Create putfirst.tid --- editions/tw5.com/tiddlers/filters/putfirst.tid | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/putfirst.tid diff --git a/editions/tw5.com/tiddlers/filters/putfirst.tid b/editions/tw5.com/tiddlers/filters/putfirst.tid new file mode 100644 index 000000000..ed07a6ce2 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/putfirst.tid @@ -0,0 +1,16 @@ +caption: putfirst +created: 20151017144802884 +creator: matabele +modified: 20151108051922934 +modifier: matabele +op-input: a list of items +op-output: re-ordered list of items +op-parameter: ignored +op-purpose: move N trailing items to the head of the list +op-suffix: an integer N, defaulting to 1 +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: putfirst Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "putfirst">> From 617c13d1967f575bda34071d06d08cd189ab30a8 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:32:56 +0200 Subject: [PATCH 086/242] Create putfirst.tid --- .../tw5.com/tiddlers/filters/examples/putfirst.tid | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/putfirst.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/putfirst.tid b/editions/tw5.com/tiddlers/filters/examples/putfirst.tid new file mode 100644 index 000000000..7cbc0aece --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/putfirst.tid @@ -0,0 +1,14 @@ +created: 20151017152847899 +creator: matabele +modified: 20151108051943204 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[putfirst Operator]] +title: putfirst Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]] +[putfirst[]]">> +<<.operator-example 2 "[list[Days of the Week]] +[putfirst:2[]]">> +<<.operator-example 3 "[list[Days of the Week]] [[Yesterday]] [[Today]] [[Tomorrow]] +[putfirst:-2[]]">> From 0c78c63fae484c1a99b78e1cfa0b1765827040a4 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:33:39 +0200 Subject: [PATCH 087/242] Create putlast.tid --- editions/tw5.com/tiddlers/filters/putlast.tid | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/putlast.tid diff --git a/editions/tw5.com/tiddlers/filters/putlast.tid b/editions/tw5.com/tiddlers/filters/putlast.tid new file mode 100644 index 000000000..828315ec8 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/putlast.tid @@ -0,0 +1,16 @@ +caption: putlast +created: 20151017144822139 +creator: matabele +modified: 20151108052000425 +modifier: matabele +op-input: a list of items +op-output: re-ordered list of items +op-parameter: ignored +op-purpose: move N leading items to the tail of the list +op-suffix: an integer N, defaulting to 1 +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: putlast Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "putlast">> From 91c87ec2ac38f0c24170a8706a699dd3ae6dfb5d Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:34:21 +0200 Subject: [PATCH 088/242] Create putlast.tid --- .../tw5.com/tiddlers/filters/examples/putlast.tid | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/putlast.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/putlast.tid b/editions/tw5.com/tiddlers/filters/examples/putlast.tid new file mode 100644 index 000000000..c31e28ced --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/putlast.tid @@ -0,0 +1,14 @@ +created: 20151017153037776 +creator: matabele +modified: 20151108052020761 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[putlast Operator]] +title: putlast Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]] +[putlast[]]">> +<<.operator-example 2 "[list[Days of the Week]] +[putlast:2[]]">> +<<.operator-example 3 "one two three [list[Days of the Week]] +[putlast:-3[]]">> From 12431a9fbc357650c484e58a1fbc48e717dd79dc Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:35:05 +0200 Subject: [PATCH 089/242] Create remove.tid --- editions/tw5.com/tiddlers/filters/remove.tid | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/remove.tid diff --git a/editions/tw5.com/tiddlers/filters/remove.tid b/editions/tw5.com/tiddlers/filters/remove.tid new file mode 100644 index 000000000..bc656fae2 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/remove.tid @@ -0,0 +1,19 @@ +caption: remove +created: 20151017144531676 +creator: matabele +modified: 20151108052035773 +modifier: matabele +op-input: a list of items +op-neg-output: items removed from current list that appear at the tail of the operand array +op-output: items removed from current list that appear at the head of the operand array +op-parameter: an array of items to remove +op-parameter-name: array +op-prefix: causes N items from the end of the array to be removed +op-purpose: remove a range of items in an array from the current list +op-suffix: an integer N, defaulting to all +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: remove Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "remove">> From 34e0bf13f2ee41a3ebab8fb5e2c2ed6f36fd1289 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:35:37 +0200 Subject: [PATCH 090/242] Create remove.tid --- .../tw5.com/tiddlers/filters/examples/remove.tid | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/remove.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/remove.tid b/editions/tw5.com/tiddlers/filters/examples/remove.tid new file mode 100644 index 000000000..aa5755d10 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/remove.tid @@ -0,0 +1,14 @@ +created: 20151018054129966 +creator: matabele +modified: 20151108052052606 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[remove Operator]] +title: remove Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]] +[remove[Tuesday Wednesday Thursday]]">> +<<.operator-example 2 "[list[Days of the Week]] +[remove:3[Monday Wednesday Friday Saturday]]">> +<<.operator-example 3 "[list[Days of the Week]] +[!remove:2{Days of the Week!!list}]">> From 85895374ea0a4d524116761a4fed42b8f68ba34e Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:36:17 +0200 Subject: [PATCH 091/242] Create replace.tid --- editions/tw5.com/tiddlers/filters/replace.tid | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/replace.tid diff --git a/editions/tw5.com/tiddlers/filters/replace.tid b/editions/tw5.com/tiddlers/filters/replace.tid new file mode 100644 index 000000000..48cc4d45c --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/replace.tid @@ -0,0 +1,17 @@ +caption: replace +created: 20151017144531676 +creator: matabele +modified: 20151108052110493 +modifier: matabele +op-input: a list of items +op-output: re-ordered list of items +op-parameter: the item to be used as a marker +op-parameter-name: marker +op-purpose: replace marker with N trailing items +op-suffix: an integer N, defaulting to 1 +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: replace Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "replace">> From 7ba264919400db0613b4ef97c3c965a3a62cc03b Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:36:53 +0200 Subject: [PATCH 092/242] Create replace.tid --- .../tw5.com/tiddlers/filters/examples/replace.tid | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/replace.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/replace.tid b/editions/tw5.com/tiddlers/filters/examples/replace.tid new file mode 100644 index 000000000..0e660be3b --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/replace.tid @@ -0,0 +1,14 @@ +created: 20151017153634099 +creator: matabele +modified: 20151108052127454 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[replace Operator]] +title: replace Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "[list[Days of the Week]] Last +[replace[Wednesday]]">> +<<.operator-example 2 "[list[Days of the Week]] Last +[replace:2[Tuesday]]">> +<<.operator-example 3 "[list[Days of the Week]] [[Yesterday]] [[Today]] [[Tomorrow]] +[replace:3[Tuesday]]">> From 085ebd4e23fcdd50d6310dae6bd1c1c32166ad6c Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:37:39 +0200 Subject: [PATCH 093/242] Create sortby.tid --- editions/tw5.com/tiddlers/filters/sortby.tid | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/sortby.tid diff --git a/editions/tw5.com/tiddlers/filters/sortby.tid b/editions/tw5.com/tiddlers/filters/sortby.tid new file mode 100644 index 000000000..087bd6cef --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/sortby.tid @@ -0,0 +1,16 @@ +caption: sortby +created: 20151017145021839 +creator: matabele +modified: 20151108052142057 +modifier: matabele +op-input: a list of items +op-output: all items sorted by lookup list +op-parameter: a list specifying the order in which to sort the current list +op-parameter-name: order +op-purpose: sort the current list in the order of the list referenced in the operand +revision: 0 +tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] +title: sortby Operator +type: text/vnd.tiddlywiki + +<<.operator-examples "sortby">> From 8980e491c409eb3c9661bde4b171bf840319c6d1 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:38:14 +0200 Subject: [PATCH 094/242] Create sortby.tid --- .../tw5.com/tiddlers/filters/examples/sortby.tid | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/examples/sortby.tid diff --git a/editions/tw5.com/tiddlers/filters/examples/sortby.tid b/editions/tw5.com/tiddlers/filters/examples/sortby.tid new file mode 100644 index 000000000..d69147ef7 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/examples/sortby.tid @@ -0,0 +1,14 @@ +created: 20151018123433917 +creator: matabele +modified: 20151108052158811 +modifier: matabele +revision: 0 +tags: [[Operator Examples]] [[sortby Operator]] +title: sortby Operator (Examples) +type: text/vnd.tiddlywiki + +<<.using-days-of-week>> + +<<.operator-example 1 "10 6 4 9 3 2 8 +[sortby[1 2 3 4 5 6 7 8 9 10]]">> +<<.operator-example 2 "Friday Tuesday Monday Thursday Sunday +[sortby{Days of the Week!!list}]">> +<<.operator-example 3 "1 Mon 5 Fri 4 Tue Sun 2 +[sortby{Days of the Week!!short}]">> From 5877a268556fba2086b0b746801908d6570d2899 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 8 Nov 2015 10:40:49 +0200 Subject: [PATCH 095/242] Create ListopsData.tid Data tiddler for Extended Listops documentation examples --- editions/tw5.com/tiddlers/widgets/ListopsData.tid | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 editions/tw5.com/tiddlers/widgets/ListopsData.tid diff --git a/editions/tw5.com/tiddlers/widgets/ListopsData.tid b/editions/tw5.com/tiddlers/widgets/ListopsData.tid new file mode 100644 index 000000000..2c64aebad --- /dev/null +++ b/editions/tw5.com/tiddlers/widgets/ListopsData.tid @@ -0,0 +1,9 @@ +created: 20151017094630847 +creator: matabele +daysoftheweek: four three Fri Thu Wed Tue Mon +modified: 20151108041839747 +modifier: matabele +title: ListopsData +type: application/x-tiddler-dictionary + +DataIndex: From f08c2c8a603eb1325666cbc1674ed9c41a95cdf2 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Sun, 8 Nov 2015 13:14:57 +0100 Subject: [PATCH 096/242] first pass, some minor fixes. feedback from tobias --- languages/de-DE/Buttons.multids | 34 +++++++++++++++------------- languages/de-DE/ControlPanel.multids | 4 ++-- languages/de-DE/Misc.multids | 6 ++--- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/languages/de-DE/Buttons.multids b/languages/de-DE/Buttons.multids index 585f400b4..14256d43e 100644 --- a/languages/de-DE/Buttons.multids +++ b/languages/de-DE/Buttons.multids @@ -8,9 +8,9 @@ Clone/Caption: Klone Clone/Hint: Klone diesen Tiddler Close/Caption: Schließen Close/Hint: Schließe diesen Tiddler -CloseAll/Caption: Alle Schließen +CloseAll/Caption: Alle schließen CloseAll/Hint: Alle Tiddler schließen -CloseOthers/Caption: Andere Schließen +CloseOthers/Caption: Andere schließen CloseOthers/Hint: Alle anderen Tiddler schließen ControlPanel/Caption: Control-Panel ControlPanel/Hint: Öffne das Control-Panel @@ -20,25 +20,27 @@ Edit/Caption: Bearbeiten Edit/Hint: Bearbeite diesen Tiddler Encryption/Caption: Verschlüsselung Encryption/Hint: Aktivieren oder löschen des Passworts für dieses Wiki -Encryption/ClearPassword/Caption: Verschlüsselung Deaktivieren +Encryption/ClearPassword/Caption: Verschlüsselung deaktivieren Encryption/ClearPassword/Hint: Lösche das Passwort und speichere ohne Verschlüsselung Encryption/SetPassword/Caption: Verschlüsselung Encryption/SetPassword/Hint: Definiert ein Passwort, um dieses Wiki zu verschlüsseln -ExportPage/Caption: Alle Exportieren +ExportPage/Caption: Alle exportieren ExportPage/Hint: Alle Tiddler exportieren ExportTiddler/Caption: Exportieren -ExportTiddler/Hint: Diesen Tiddler Exportieren -ExportTiddlers/Caption: Mehrere Exportieren -ExportTiddlers/Hint: Mehrere Tiddler Exportieren +ExportTiddler/Hint: Diesen Tiddler exportieren +ExportTiddlers/Caption: Mehrere exportieren +ExportTiddlers/Hint: Mehrere Tiddler exportieren Fold/Caption: Ausblenden Textbereich Fold/Hint: Der Tiddler Textbereich wird ausgeblendet +Fold/FoldBar/Caption: Textbereich ein/aus +Fold/FoldBar/Hint: Optionelle Buttons im Tiddler, um den Textbereich ein- bzw. auszublenden Unfold/Caption: Einblenden Textbereich Unfold/Hint: Der Tiddler Textbereich wird eingeblendet -FoldOthers/Caption: Ausblenden Andere Textbereiche -FoldOthers/Hint: Die Textbereiche aller anderen Tiddler wird ausgeblendet -FoldAll/Caption: Ausblenden Aller Textbereiche +FoldOthers/Caption: Ausblenden andere Textbereiche +FoldOthers/Hint: Die Textbereiche aller anderen Tiddler werden ausgeblendet +FoldAll/Caption: Ausblenden aller Textbereiche FoldAll/Hint: Ausblenden der Textbereiche aller Tiddler -UnfoldAll/Caption: Einblenden Aller Textbereiche +UnfoldAll/Caption: Einblenden aller Textbereiche UnfoldAll/Hint: Einblenden der Textbereiche aller Tiddler FullScreen/Caption: Vollbild FullScreen/Hint: Aktivieren oder deaktivieren des Vollbild-Modus @@ -54,15 +56,15 @@ Language/Caption: Sprache Language/Hint: Auswahldialog für die Systemsprache More/Caption: mehr More/Hint: Weitere Aktionen -NewHere/Caption: Neu Hier +NewHere/Caption: Neu hier NewHere/Hint: Erstelle einen neuen Tiddler der mit diesem getaggt ist NewJournal/Caption: Neues Journal NewJournal/Hint: Erstelle einen neuen Journal-Tiddler -NewJournalHere/Caption: Neues Journal Hier +NewJournalHere/Caption: Neues Journal hier NewJournalHere/Hint: Erstelle ein neues Journal der mit diesem getaggt ist NewTiddler/Caption: Neuer Tiddler NewTiddler/Hint: Erstelle einen neuen Tiddler -OpenWindow/Caption: Öffne in Neuem Fenster +OpenWindow/Caption: Öffne in neuem Fenster OpenWindow/Hint: Öffne diesen Tiddler in einem neuen Fenster Palette/Caption: Palette Palette/Hint: Wähle eine Farbpalette @@ -78,9 +80,9 @@ SaveWiki/Caption: Speichern SaveWiki/Hint: Das Wiki speichern StoryView/Caption: Story-Modus StoryView/Hint: Auswahl des Anzeigemodus für die [[Story]] -HideSideBar/Caption: Sidebar Ausblenden +HideSideBar/Caption: Sidebar ausblenden HideSideBar/Hint: Sidebar ausblenden -ShowSideBar/Caption: Sidebar Einblenden +ShowSideBar/Caption: Sidebar einblenden ShowSideBar/Hint: Sidebar einblenden TagManager/Caption: Tag-Manager TagManager/Hint: Öffne den Tag-Manager diff --git a/languages/de-DE/ControlPanel.multids b/languages/de-DE/ControlPanel.multids index 2cf29808c..d96cf786b 100755 --- a/languages/de-DE/ControlPanel.multids +++ b/languages/de-DE/ControlPanel.multids @@ -39,7 +39,7 @@ Palette/HideEditor/Caption: Editor ausblenden Palette/Prompt: Ausgewählte Farbpalette: Palette/ShowEditor/Caption: Editor zeigen Parsing/Caption: Parser -Parsing/Hint: Hier können Sie die globalen Parser Einstellungen ändern. ACHTUNG: Manche Einstellungen können dazu führen, dass ~TiddlyWiki nicht mehr richtig funktioniert. Sollte das der Fall sein, dann können Sie die Änderungen im [["safe mode"|http://tiddlywiki.com/#SafeMode]] rückgängig machen. +Parsing/Hint: Hier können Sie die globalen Parser-Einstellungen ändern. ACHTUNG: Manche Einstellungen können dazu führen, dass ~TiddlyWiki nicht mehr richtig funktioniert. Sollte das der Fall sein, dann können Sie die Änderungen im [["safe mode"|http://tiddlywiki.com/#SafeMode]] rückgängig machen. Parsing/Block/Caption: Block Regeln Parsing/Inline/Caption: Inline Regeln Parsing/Pragma/Caption: Pragma Regeln @@ -56,7 +56,7 @@ Plugins/Install: installieren Plugins/Installed/Hint: Momentan installierte Plugins Plugins/Languages/Caption: Sprachen Plugins/Languages/Hint: Spracherweiterungen -Plugins/OpenPluginLibrary: Öffne das Plugin Verzeichnis +Plugins/OpenPluginLibrary: Öffne das Plugin-Verzeichnis Plugins/Plugins/Caption: Plugins Plugins/Plugins/Hint: Erweiterungen Plugins/Reinstall: erneut installieren diff --git a/languages/de-DE/Misc.multids b/languages/de-DE/Misc.multids index a6018df59..86f6ee50e 100644 --- a/languages/de-DE/Misc.multids +++ b/languages/de-DE/Misc.multids @@ -1,6 +1,6 @@ title: $:/language/ -AboveStory/ClassicPlugin/Warning: Es scheint, Sie möchten ein Plugin verwenden, dass für [[TiddlyWiki Classic|http://tiddlywiki.com/#TiddlyWikiClassic]] entwickelt wurde. Diese Plugins können jedoch mit TiddlyWiki Version 5 nicht verwendet werden. ~TiddlyWiki Classic plugin erkannt: +AboveStory/ClassicPlugin/Warning: Es scheint, Sie möchten ein Plugin verwenden, dass für [[TiddlyWiki Classic|http://tiddlywiki.com/#TiddlyWikiClassic]] entwickelt wurde. Diese Plugins können jedoch mit ~TiddlyWiki Version 5 nicht verwendet werden. ~TiddlyWiki Classic plugin erkannt: BinaryWarning/Prompt: Dieser Tiddler enthält binäre Daten. ClassicWarning/Hint: Dieser Tiddler wurde im TiddlyWiki Classic Format erstellt. Dieses Format ist nur teilweise kompatibel mit TiddlyWiki Version 5. Mehr Info finden Sie unter: http://tiddlywiki.com/static/Upgrading.html ClassicWarning/Upgrade/Caption: upgrade @@ -24,8 +24,8 @@ InternalJavaScriptError/Hint: Es tut uns leid, aber bitte starten Sie Ihr Tiddly InvalidFieldName: Das Feld: "<$text text=<<fieldName>>/>" enthält illegale Zeichen. Felder müssen klein geschrieben werden. Erlaubte Sonderzeichen sind: Zahlen, Unterstrich (`_`), Minus (`-`) und Punkt (`.`). LazyLoadingWarning: <p>Lade externe Datei von ''<$text text={{!!_canonical_uri}}/>''</p><p>Wenn diese Meldung nicht automatisch gelöscht wird, dann verwenden Sie wahrscheinlich einen Browser der diese Funktion nicht unterstützt. Siehe http://tiddlywiki.com/#ExternalText</p> MissingTiddler/Hint: Fehlender Tiddler "<$text text=<<currentTiddler>>/>" - klicken Sie {{$:/core/images/edit-button}} um ihn zu erzeugen. -OfficialPluginLibrary: Offizielles ~TiddlyWiki Plugin Verzeichnis -OfficialPluginLibrary/Hint: Offizielles ~TiddlyWiki Plugin Verzeichnis auf tiddlywiki.com. Plugin, Themes und Sprach Dateien werden vom "core team" gewartet. +OfficialPluginLibrary: Offizielles ~TiddlyWiki Plugin-Verzeichnis +OfficialPluginLibrary/Hint: Offizielles ~TiddlyWiki Plugin-Verzeichnis auf tiddlywiki.com. Plugin, Themes und Sprach Dateien werden vom "core team" gewartet. PluginReloadWarning: Das Wiki muss gespeichert {{$:/core/ui/Buttons/save-wiki}} und neu gladen {{$:/core/ui/Buttons/refresh}} werden, damit die Plugins ausgeführt werden. RecentChanges/DateFormat: YYYY MMM DD SystemTiddler/Tooltip: Das ist ein System-Tiddler From d3586c7bf151689a5771539006bf28c616027638 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 10 Nov 2015 18:12:40 +0000 Subject: [PATCH 097/242] Update Italian translation --- languages/it-IT/Buttons.multids | 114 ++++++++++-------- languages/it-IT/ControlPanel.multids | 68 ++++++++--- languages/it-IT/CoreReadMe.tid | 9 +- languages/it-IT/Dates.multids | 6 + languages/it-IT/Docs/ModuleTypes.multids | 1 + languages/it-IT/Docs/PaletteColours.multids | 45 +++++++ languages/it-IT/EditTemplate.multids | 17 ++- languages/it-IT/Fields.multids | 9 +- languages/it-IT/Filters.multids | 6 +- languages/it-IT/GettingStarted.tid | 14 +-- languages/it-IT/Help/clearpassword.tid | 8 ++ languages/it-IT/Help/editions.tid | 8 ++ languages/it-IT/Help/help.tid | 4 +- languages/it-IT/Help/init.tid | 2 +- languages/it-IT/Help/load.tid | 2 +- languages/it-IT/Help/password.tid | 9 +- languages/it-IT/Help/rendertiddler.tid | 2 +- languages/it-IT/Help/savetiddler.tid | 2 +- languages/it-IT/Help/server.tid | 2 +- languages/it-IT/Help/verbose.tid | 8 +- languages/it-IT/Help/version.tid | 8 +- languages/it-IT/Import.multids | 12 ++ languages/it-IT/Misc.multids | 32 ++++- languages/it-IT/Modals/Download.tid | 2 +- languages/it-IT/NewJournal.multids | 2 + languages/it-IT/Search.multids | 11 +- languages/it-IT/SideBar.multids | 2 +- languages/it-IT/SiteSubtitle.tid | 2 +- languages/it-IT/TiddlerInfo.multids | 8 +- .../it-IT/Types/application%2Fjavascript.tid | 4 + ...cation_json.tid => application%2Fjson.tid} | 3 +- ...=> application%2Fx-tiddler-dictionary.tid} | 3 +- .../Types/{image_gif.tid => image%2Fgif.tid} | 3 +- .../{image_jpeg.tid => image%2Fjpeg.tid} | 3 +- .../Types/{image_png.tid => image%2Fpng.tid} | 3 +- languages/it-IT/Types/image%2Fsvg%2Bxml.tid | 4 + .../{image_x-icon.tid => image%2Fx-icon.tid} | 3 +- languages/it-IT/Types/image_svg_xml.tid | 3 - .../Types/{text_css.tid => text%2Fcss.tid} | 3 +- languages/it-IT/Types/text%2Fhtml.tid | 4 + .../{text_plain.tid => text%2Fplain.tid} | 3 +- ...ddlywiki.tid => text%2Fvnd.tiddlywiki.tid} | 3 +- ...tiddlywiki.tid => text%2Fx-tiddlywiki.tid} | 1 + 43 files changed, 317 insertions(+), 141 deletions(-) create mode 100644 languages/it-IT/Help/clearpassword.tid create mode 100644 languages/it-IT/Help/editions.tid create mode 100644 languages/it-IT/Types/application%2Fjavascript.tid rename languages/it-IT/Types/{application_json.tid => application%2Fjson.tid} (61%) rename languages/it-IT/Types/{application_x_tiddler_dictionary.tid => application%2Fx-tiddler-dictionary.tid} (67%) rename languages/it-IT/Types/{image_gif.tid => image%2Fgif.tid} (57%) rename languages/it-IT/Types/{image_jpeg.tid => image%2Fjpeg.tid} (57%) rename languages/it-IT/Types/{image_png.tid => image%2Fpng.tid} (57%) create mode 100644 languages/it-IT/Types/image%2Fsvg%2Bxml.tid rename languages/it-IT/Types/{image_x-icon.tid => image%2Fx-icon.tid} (54%) delete mode 100644 languages/it-IT/Types/image_svg_xml.tid rename languages/it-IT/Types/{text_css.tid => text%2Fcss.tid} (50%) create mode 100644 languages/it-IT/Types/text%2Fhtml.tid rename languages/it-IT/Types/{text_plain.tid => text%2Fplain.tid} (59%) rename languages/it-IT/Types/{text_vnd.tiddlywiki.tid => text%2Fvnd.tiddlywiki.tid} (57%) rename languages/it-IT/Types/{text_x-tiddlywiki.tid => text%2Fx-tiddlywiki.tid} (89%) diff --git a/languages/it-IT/Buttons.multids b/languages/it-IT/Buttons.multids index 1a39ef9aa..df2ea75d8 100644 --- a/languages/it-IT/Buttons.multids +++ b/languages/it-IT/Buttons.multids @@ -1,68 +1,78 @@ title: $:/language/Buttons/ -AdvancedSearch/Caption: ricerca avanzata +AdvancedSearch/Caption: Ricerca avanzata AdvancedSearch/Hint: Ricerca avanzata -Cancel/Caption: annulla -Cancel/Hint: Annulla i cambiamenti a questo tiddler -Clone/Caption: clona -Clone/Hint: clona questo tiddler -Close/Caption: chiudi -Close/Hint: Chiudi questo tiddler -CloseAll/Caption: chiudi tutti -CloseAll/Hint: Chiudi tutti i tiddler -CloseOthers/Caption: chiudi altri -CloseOthers/Hint: Chiudi gli altri tiddler -ControlPanel/Caption: pannello di controllo +Cancel/Caption: Annulla +Cancel/Hint: Annulla i cambiamenti a questo frammento +Clone/Caption: Clona +Clone/Hint: Clona questo frammento +Close/Caption: Chiudi +Close/Hint: Chiudi questo frammento +CloseAll/Caption: Chiudi tutti +CloseAll/Hint: Chiudi tutti i frammenti +CloseOthers/Caption: Chiudi altri +CloseOthers/Hint: Chiudi gli altri frammenti +ControlPanel/Caption: Pannello di controllo ControlPanel/Hint: Apri il pannello di controllo -Delete/Caption: elimina -Delete/Hint: Elimina questo tiddler -Edit/Caption: modifica -Edit/Hint: Modifica questo tiddler -Encryption/Caption: cifratura -Encryption/ClearPassword/Caption: rimuovi password +Delete/Caption: Elimina +Delete/Hint: Elimina questo frammento +Edit/Caption: Modifica +Edit/Hint: Modifica questo frammento +Encryption/Caption: Cifratura +Encryption/ClearPassword/Caption: Rimuovi password Encryption/ClearPassword/Hint: Rimuovi la password e salva questo wiki senza cifrarlo Encryption/Hint: Imposta o rimuovi la password per salvare questo wiki -Encryption/SetPassword/Caption: imposta password +Encryption/SetPassword/Caption: Imposta password Encryption/SetPassword/Hint: Imposta una password per salvare questo wiki con cifratura -ExportPage/Caption: esporta tutti -ExportPage/Hint: Esporta tutti i tiddler -ExportTiddler/Caption: esporta tiddler -ExportTiddler/Hint: Esporta tiddler -ExportTiddlers/Caption: esporta tiddler -ExportTiddlers/Hint: Esporta tiddler -FullScreen/Caption: schermo intero +ExportPage/Caption: Esporta tutti +ExportPage/Hint: Esporta tutti i frammenti +ExportTiddler/Caption: Esporta frammento +ExportTiddler/Hint: Esporta questo frammento +ExportTiddlers/Caption: Esporta i frammenti +ExportTiddlers/Hint: Esporta i frammenti +FullScreen/Caption: Schermo intero FullScreen/Hint: Entra o esci dalla modalità a schermo intero -Help/Caption: aiuto -Help/Hint: Mostra il pannello dell'aiuto -HideSideBar/Caption: nascondi barra laterale +Help/Caption: Aiuto +Help/Hint: Mostra il pannello di aiuto +HideSideBar/Caption: Nascondi la barra laterale HideSideBar/Hint: Nascondi la barra laterale -Home/Hint: Apri i tiddler predefiniti -Import/Caption: importa -Import/Hint: Importa dei file -Info/Hint: Mostra informazioni su questo tiddler -Language/Caption: lingua +Home/Caption: Home +Home/Hint: Apri i frammenti predefiniti +Import/Caption: Importa +Import/Hint: Importa file +Info/Caption: Info +Info/Hint: Mostra informazioni su questo frammento +Language/Caption: Lingua Language/Hint: Scegli la lingua dell'interfaccia -More/Caption: altro +More/Caption: Altro More/Hint: Altre azioni -NewHere/Caption: nuovo da qui -NewHere/Hint: Crea un nuovo tiddler taggato con questo -NewJournal/Caption: diario -NewJournal/Hint: Crea un nuovo tiddler diario -NewJournalHere/Caption: diario da qui -NewJournalHere/Hint: Crea un nuovo tiddler diario taggato con questo -NewTiddler/Caption: nuovo tiddler -NewTiddler/Hint: Crea un nuovo tiddler -Permalink/Hint: Link diretto a questo tiddler -Permaview/Hint: Link diretto a tutti i tiddler in questa storia -Refresh/Caption: ricarica +NewHere/Caption: Nuovo qui +NewHere/Hint: Crea un nuovo frammento etichettato con questo +NewJournal/Caption: Diario +NewJournal/Hint: Crea un nuovo frammento diario +NewJournalHere/Caption: Nuovo diario qui +NewJournalHere/Hint: Crea un nuovo frammento diario etichettato con questo +NewTiddler/Caption: Nuovo frammento +NewTiddler/Hint: Crea un nuovo frammento +OpenWindow/Caption: Apri in una nuova finestra +OpenWindow/Hint: Apri il frammento in una nuova finestra +Palette/Caption: Tavolozza +Palette/Hint: Scegli la tavolozza dei colori +Permalink/Caption: Permalink +Permalink/Hint: Link diretto a questo frammento +Permaview/Caption: Permaview +Permaview/Hint: Link diretto a tutti i frammenti in questa storia +Refresh/Caption: Ricarica Refresh/Hint: Ricarica completamente il wiki -Save/Hint: Conferma i cambiamenti a questo tiddler -SaveWiki/Caption: salva modifiche +Save/Caption: ok +Save/Hint: Conferma i cambiamenti a questo frammento +SaveWiki/Caption: Salva le modifiche SaveWiki/Hint: Salva le modifiche -ShowSideBar/Caption: mostra barra laterale +ShowSideBar/Caption: Mostra barra laterale ShowSideBar/Hint: Mostra barra laterale +StoryView/Caption: Storyview StoryView/Hint: Scegli la visualizzazione "storia" -TagManager/Caption: gestore dei tag -TagManager/Hint: Apri il gestore dei tag -Theme/Caption: tema +TagManager/Caption: Gestore delle etichette +TagManager/Hint: Apri il gestore delle etichette +Theme/Caption: Tema Theme/Hint: Scegli il tema grafico diff --git a/languages/it-IT/ControlPanel.multids b/languages/it-IT/ControlPanel.multids index a25d0f034..42aa6b730 100644 --- a/languages/it-IT/ControlPanel.multids +++ b/languages/it-IT/ControlPanel.multids @@ -3,13 +3,15 @@ title: $:/language/ControlPanel/ Advanced/Caption: Avanzate Advanced/Hint: Informazioni interne di questo ~TiddlyWiki Appearance/Caption: Aspetto -Appearance/Hint: Personalizza l'aspetto di TiddlyWiki +Appearance/Hint: Personalizza l'aspetto del tuo ~TiddlyWiki Basics/AnimDuration/Prompt: Durata animazione: Basics/Caption: Impostazioni base -Basics/DefaultTiddlers/BottomHint: Utilizza [[le doppie parentesi quadre]] per titoli di frammenti con spazi bianchi. In alternativa scegli di visualizzare i frammenti secondo la <$button set="$:/DefaultTiddlers" setTo="[list[$:/StoryList]]">cronologia</$button> +Basics/DefaultTiddlers/BottomHint: Utilizza [[le doppie parentesi quadre]] per titoli di frammenti con spazi. In alternativa scegli di visualizzare i frammenti secondo la <$button set="$:/DefaultTiddlers" setTo="[list[$:/StoryList]]">cronologia</$button> Basics/DefaultTiddlers/Prompt: Frammenti di default: Basics/DefaultTiddlers/TopHint: Scegli quali frammenti vuoi visualizzare all'avvio: Basics/Language/Prompt: Ciao! Scegli la lingua: +Basics/NewJournal/Tags/Prompt: Etichette per i nuovi frammenti diario +Basics/NewJournal/Title/Prompt: Titolo dei nuovi frammenti diario Basics/OverriddenShadowTiddlers/Prompt: Numero di frammenti nascosti annullati: Basics/ShadowTiddlers/Prompt: Numero di frammenti nascosti: Basics/Subtitle/Prompt: Sottotitolo: @@ -19,8 +21,12 @@ Basics/Tiddlers/Prompt: Numero di frammenti: Basics/Title/Prompt: Il titolo di questo ~TiddlyWiki: Basics/Username/Prompt: Digita il nome con cui firmare le modifiche: Basics/Version/Prompt: Versione di ~TiddlyWiki: -EditorTypes/Caption: Editor Types +EditorTypes/Caption: Tipi di editor +EditorTypes/Editor/Caption: Editor +EditorTypes/Hint: Questi frammenti definiscono quale editor utilizzare per modificare tipi specifici di frammenti. EditorTypes/Type/Caption: Tipo +Info/Caption: Info +Info/Hint: Informazioni su questo ~TiddlyWiki LoadedModules/Caption: Moduli caricati LoadedModules/Hint: Elenco dei moduli attualmente caricati e loro collegamento ai frammenti sorgente. I moduli in corsivo mancano di un frammento sorgente perché in generale installati durante il processo di avvio. Palette/Caption: Tavolozza @@ -35,17 +41,19 @@ Palette/ShowEditor/Caption: Mostra editor Plugins/Add/Caption: Aggiungi altri plugin Plugins/Add/Hint: Installa plugin dalla libreria ufficiale Plugins/Caption: Plugin -Plugins/Disable/Caption: disabilita +Plugins/Disable/Caption: Disabilita Plugins/Disable/Hint: Disabilita questo plugin al ricaricamento della pagina Plugins/Disabled/Status: (disabilitato) Plugins/Empty/Hint: Nessuno -Plugins/Enable/Caption: abilita +Plugins/Enable/Caption: Abilita Plugins/Enable/Hint: Abilita questo plugin al ricaricamento della pagina Plugins/Installed/Hint: Plugin attualmente installati: Plugins/Language/Prompt: Lingue: Plugins/Languages/Caption: Lingue Plugins/Languages/Hint: Plugin per lingue aggiuntive Plugins/Plugin/Prompt: Plugins +Plugins/Plugins/Caption: Plugins +Plugins/Plugins/Hint: Plugins Plugins/Theme/Prompt: Temi Plugins/Themes/Caption: Temi Plugins/Themes/Hint: Plugin dei temi @@ -54,7 +62,7 @@ Saving/Heading: Salvataggio Saving/TiddlySpot/Advanced/Heading: Impostazioni avanzate Saving/TiddlySpot/BackupDir: Directory di backup Saving/TiddlySpot/Backups: Backups -Saving/TiddlySpot/Description: Queste impostazioni sono usate solo per il salvataggio su http://tiddlyspot.com o un server remoto compatibile +Saving/TiddlySpot/Description: Queste impostazioni sono usate solo per il salvataggio su http://tiddlyspot.com o su un server remoto compatibile Saving/TiddlySpot/Filename: Nome del file di upload Saving/TiddlySpot/Heading: ~TiddlySpot Saving/TiddlySpot/Hint: //L'indirizzo del server di default è `http://<wikiname>.tiddlyspot.com/store.cgi` e può essere modificato per utilizzare un indirizzo server personalizzato// @@ -68,29 +76,49 @@ Settings/AutoSave/Enabled/Description: Salva le modifiche in automatico Settings/AutoSave/Hint: Salva automaticamente le modifiche durante il lavoro Settings/Caption: Impostazioni Settings/DefaultSidebarTab/Caption: Tab predefinito della barra laterale -Settings/DefaultSidebarTab/Hint: Specifica quale tab della barra laterale è mostrato di default -Settings/Hint: Queste impostazioni ti permettono di personalizzare il funzionamento di TiddlyWiki. +Settings/DefaultSidebarTab/Hint: Specifica quale tab della barra laterale è mostrato di default +Settings/Hint: Queste impostazioni ti permettono di personalizzare il comportamento di TiddlyWiki. +Settings/LinkToBehaviour/Caption: Comportamento apertura framnmenti +Settings/LinkToBehaviour/InsideRiver/Hint: Navigazione dall' //interno// della cronologia +Settings/LinkToBehaviour/OpenAbove: Apri sopra il frammento corrente +Settings/LinkToBehaviour/OpenAtBottom: Apri in basso alla cronologia +Settings/LinkToBehaviour/OpenAtTop: Apri in alto alla cronologia +Settings/LinkToBehaviour/OpenBelow: Apri sotto il frammento corrente +Settings/LinkToBehaviour/OutsideRiver/Hint: Navigazione dall' //esterno// della cronologia Settings/NavigationAddressBar/Caption: Barra degli indirizzi -Settings/NavigationAddressBar/Hint: Comportamento della barra degli indirizzi del browser quando si visita un tiddler +Settings/NavigationAddressBar/Hint: Comportamento della barra degli indirizzi del browser quando si visita un frammento: Settings/NavigationAddressBar/No/Description: Non aggiornare la barra degli indirizzi -Settings/NavigationAddressBar/Permalink/Description: Includi il tiddler di destinazione -Settings/NavigationAddressBar/Permaview/Description: Includi il tiddler di destinazione e la sequenza della storia corrente -Settings/NavigationHistory/Caption: Cronologia di Navigazione -Settings/NavigationHistory/Hint: Aggiornamento della cronologia quando si visita un tiddler +Settings/NavigationAddressBar/Permalink/Description: Includi il frammento di destinazione +Settings/NavigationAddressBar/Permaview/Description: Includi il frammento di destinazione e la sequenza della cronologia corrente +Settings/NavigationHistory/Caption: Cronologia di navigazione +Settings/NavigationHistory/Hint: Aggiornamento della cronologia quando si visita un frammento Settings/NavigationHistory/No/Description: Non aggiornare la cronologia Settings/NavigationHistory/Yes/Description: Aggiorna la cronologia -Settings/ToolbarButtons/Caption: Bottoni della Barra Strumenti -Settings/ToolbarButtons/Hint: Aspetto predefinito dei bottoni della barra strumenti: +Settings/TitleLinks/Caption: Titolo frammento +Settings/TitleLinks/Hint: Mostra opzionalmente titoli frammenti come collegamenti +Settings/TitleLinks/No/Description: Non mostrare titoli frammenti come collegamenti +Settings/TitleLinks/Yes/Description: Mostra titoli frammenti come collegamenti +Settings/ToolbarButtons/Caption: Pulsanti della barra strumenti +Settings/ToolbarButtons/Hint: Aspetto predefinito dei pulsanti della barra strumenti: Settings/ToolbarButtons/Icons/Description: Mostra icona Settings/ToolbarButtons/Text/Description: Mostra testo -StoryView/Caption: Vista +Settings/ToolbarButtonStyle/Caption: Stile pulsanti della barra strumenti +Settings/ToolbarButtonStyle/Hint: Scegli lo stile dei pulsanti della barra strumenti +Settings/ToolbarButtonStyle/Styles/Borderless: Senza bordi +Settings/ToolbarButtonStyle/Styles/Boxed: Incorniciati +Settings/ToolbarButtonStyle/Styles/Rounded: Arrotondati +StoryView/Caption: Vista cronologia StoryView/Prompt: Vista corrente: Theme/Caption: Tema -Theme/Prompt: Tema corrente: -TiddlerFields/Caption: Campi frammenti +Theme/Prompt: Tema corrente: +TiddlerFields/Caption: Campi frammenti TiddlerFields/Hint: Questa è la serie completa dei TiddlerFields utilizzati in questo wiki (sono inclusi i frammenti di sistema ed esclusi i frammenti nascosti). Toolbars/Caption: Barre strumenti Toolbars/EditToolbar/Caption: Barra strumenti di modifica -Toolbars/EditToolbar/Hint: Scegli quali bottoni mostrare in modalità modifica tiddler -Toolbars/Hint: Scegli quali bottoni mostrare nella barra strumenti +Toolbars/EditToolbar/Hint: Scegli quali pulsanti mostrare nella modalità modifica frammenti +Toolbars/Hint: Scegli quali pulsanti mostrare nella barra strumenti +Toolbars/PageControls/Caption: Barra strumenti di pagina +Toolbars/PageControls/Hint: Scegli quali pulsanti mostrare nella barra strumenti della pagina principale +Toolbars/ViewToolbar/Caption: Barra strumenti visualizzazione +Toolbars/ViewToolbar/Hint: Scegli quali pulsanti mostrare per i frammenti in modo visualizzazione Tools/Download/Full/Caption: Scarica l'intero wiki diff --git a/languages/it-IT/CoreReadMe.tid b/languages/it-IT/CoreReadMe.tid index a42f5a2bb..3401d61b0 100644 --- a/languages/it-IT/CoreReadMe.tid +++ b/languages/it-IT/CoreReadMe.tid @@ -1,5 +1,8 @@ -title: $:/core/it-IT/readme +title: $:/core/readme -<!-- Replace with translation of the readme for the core plugin --> +Questo plugin contiene componenti del nucleo di TiddlyWiki tra cui: -{{$:/core/readme}} +* Moduli codice JavaScript +* Icone +* Modelli necessari per creare l'interfaccia utente di TiddlyWiki +* Traduzione Inglese (en-GB) per le stringhe di testo utilizzate dal nucleo diff --git a/languages/it-IT/Dates.multids b/languages/it-IT/Dates.multids index 8b31ef902..c2e1a2b9a 100644 --- a/languages/it-IT/Dates.multids +++ b/languages/it-IT/Dates.multids @@ -65,6 +65,12 @@ Date/Short/Month/6: Giu Date/Short/Month/7: Lug Date/Short/Month/8: Ago Date/Short/Month/9: Set +Date/Period/am: am +Date/Period/pm: pm +Date/Short/Month/11: Nov +Date/Short/Month/2: Feb +Date/Short/Month/3: Mar +Date/Short/Month/4: Apr RelativeDate/Future/Days: tra <<period>> giorni RelativeDate/Future/Hours: tra <<period>> ore RelativeDate/Future/Minutes: tra <<period>> minuti diff --git a/languages/it-IT/Docs/ModuleTypes.multids b/languages/it-IT/Docs/ModuleTypes.multids index 53b39331a..d20fe5773 100644 --- a/languages/it-IT/Docs/ModuleTypes.multids +++ b/languages/it-IT/Docs/ModuleTypes.multids @@ -14,6 +14,7 @@ storyview: Vista cronologia per personalizzare l'animazione ed il comportamento tiddlerdeserializer: Converte i diversi tipi di contenuto in frammenti. tiddlerfield: Definisce il comportamento di un singolo campo di un frammento. tiddlermethod: Aggiunge metodi al prototipo `$tw.Tiddler`. +upgrader: Applica il processo di aggiornamento ai frammenti durante un aggiornamento/importazione. utils: Aggiunge metodi a `$tw.utils`. utils-node: Aggiunge metodi specifici Node.js a `$tw.utils`. widget: Widgets che incapsulano e aggiornano il contenuto DOM. diff --git a/languages/it-IT/Docs/PaletteColours.multids b/languages/it-IT/Docs/PaletteColours.multids index 9796752f4..7c268cd90 100644 --- a/languages/it-IT/Docs/PaletteColours.multids +++ b/languages/it-IT/Docs/PaletteColours.multids @@ -1,2 +1,47 @@ title: $:/language/Docs/PaletteColours/ +alert-background: Sfondo allarme +alert-border: Bordo allarme +alert-highlight: Evidenziazione allarme +alert-muted-foreground: Primo piano allarme disattivato +background: Sfondo generale +button-background: Default sfondo pulsante +button-border: Default bordo pulsante +button-foreground: Default primo piano pulsante +code-background: Sfondo codice +code-border: Bordo codice +code-foreground: Codice in primo piano +dirty-indicator: Indicatore modifiche non salvate +download-background: Sfondo pulsante download +download-foreground: Primo piano pulsante download +external-link-background: Sfondo link esterno +external-link-background-visited: Sfondo link esterno visitato +external-link-foreground: Primo piano link esterno +external-link-foreground-visited: Primo piano link esterno visitato +foreground: Primo piano generale +message-background: Sfondo casella messaggio +message-border: Bordo casella messaggio +message-foreground: Primo piano casella messaggio +notification-background: Sfondo notifica +notification-border: Bordo notifica +page-background: Sfondo pagina +pre-background: Sfondo codice preformattato +pre-border: Bordo codice preformattato +sidebar-button-foreground: Sfondo pulsante sidebar +sidebar-foreground: Sfondo sidebar +site-title-foreground: Sfondo titolo sito +static-alert-foreground: Primo piano alert statico +tab-background: Sfondo tab +tab-background-selected: Sfondo tab per tab selezionati +tab-border: Bordo tab +tab-border-selected: Bordo tab per tab selezionati +table-border: Bordo tabella +table-footer-background: Sfondo footer tabella +table-header-background: Sfondo testata tabella +tag-background: Sfondo etichetta +tiddler-background: Sfondo frammento +tiddler-border: Bordo frammento +tiddler-editor-background: Sfondo editor frammenti +tiddler-editor-border: Bordo editor frammenti +tiddler-info-background: Sfondo pannello informazioni frammenti +tiddler-info-border: Bordo pannello informazioni frammenti diff --git a/languages/it-IT/EditTemplate.multids b/languages/it-IT/EditTemplate.multids index 076963953..8a53f3421 100644 --- a/languages/it-IT/EditTemplate.multids +++ b/languages/it-IT/EditTemplate.multids @@ -1,16 +1,27 @@ title: $:/language/EditTemplate/ +Body/External/Hint: Questo è un frammento esterno memorizzato al di fuori del file principale TiddlyWiki. Puoi editare le etichette ed i campi ma non puoi editare il contenuto Body/Hint: Utilizza il formato wiki per definire la formattazione, aggiungere immagini e caratteristiche dinamiche Body/Placeholder: Digita il testo di questo frammento Body/Preview/Button/Hide: Nascondi preview Body/Preview/Button/Show: Mostra preview +Field/Remove/Caption: Rimuovi campo +Field/Remove/Hint: Rimuovi campo Fields/Add/Button: Aggiungi +Fields/Add/Dropdown/System: Campi di sistema +Fields/Add/Dropdown/User: Campi utente Fields/Add/Name/Placeholder: Nome campo Fields/Add/Prompt: Aggiungi un nuovo campo: Fields/Add/Value/Placeholder: Valore campo +Shadow/OverriddenWarning: Questo è un frammento nascosto modificato. Puoi ritornare alla versione di default cancellando questo frammento +Shadow/Warning: Questo è un frammento nascosto. Qualsiasi modifica ricoprirà la versione di default Tags/Add/Button: Aggiungi -Tags/Add/Placeholder: Nome categoria -Tags/Dropdown/Caption: lista dei tag -Tags/Dropdown/Hint: Mostra la lista dei tag +Tags/Add/Placeholder: Nome etichetta +Tags/Dropdown/Caption: Lista delle etichette +Tags/Dropdown/Hint: Mostra la lista delle etichette +Type/Delete/Caption: Cancella il tipo di contenuto +Type/Delete/Hint: Cancella il tipo di contenuto +Type/Dropdown/Caption: Elenca il tipo di contenuto +Type/Dropdown/Hint: Mostra la lista del tipo di contenuto Type/Placeholder: Tipo contenuto Type/Prompt: Tipo: diff --git a/languages/it-IT/Fields.multids b/languages/it-IT/Fields.multids index 56a636d1a..44c2f5942 100644 --- a/languages/it-IT/Fields.multids +++ b/languages/it-IT/Fields.multids @@ -1,12 +1,13 @@ title: $:/language/Docs/Fields/ +_canonical_uri: L'URI completo di un frammento immagine esterno bag: Il nome del contenitore da cui proviene un frammento caption: Il testo che è visualizzato in un tab o in un pulsante color: Il codice CSS del colore associato ad un frammento -component: Il nome del componente responsabile per un [[frammento di allarme|AlertMechanism]] +component: Il nome del componente responsabile per un [[alerttiddler|AlertMechanism]] created: La data in cui il frammento è stato creato creator: Il nome della persona che ha creato il frammento -current-tiddler: Utilizzato per memorizzare nella cache il frammento top nella [[lista cronologia|HistoryMechanism]] +current-tiddler: Utilizzato per memorizzare nella cache il frammento top nella [[history list|HistoryMechanism]] dependents: Per un plugin, elenca i plugin dipendenti description: Il testo descrittivo per un plugin o per una modalità a dialogo draft.of: Per i frammenti bozza, contiene il titolo del frammento di cui questo è una bozza @@ -16,8 +17,8 @@ hack-to-give-us-something-to-compare-against: Un campo di memoria temporanea uti icon: Il titolo del frammento che contiene l'icona associata con il frammento library: Se impostato su "yes" indica che il frammento deve essere salvato come una libreria ~JavaScript list: Una lista ordinata di titoli di frammenti associati con un frammento -list-after: If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles -list-before: If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty +list-after: Se impostato, il titolo del frammento dopo il quale questo frammento deve essere aggiunto all'elenco ordinato dei titoli dei frammenti +list-before: Se impostato, il titolo del frammento prima del quale questo frammento deve essere aggiunto all'elenco ordinato dei titoli dei frammenti, o all'inizio della lista se questo campo è presente ma vuoto modified: La data e l'ora in cui un frammento è stato modificato l'ultima volta modifier: Il titolo del frammento associato con la persona che ha modificato un frammento l'ultima volta name: Il nome leggibile associato con un frammento plugin diff --git a/languages/it-IT/Filters.multids b/languages/it-IT/Filters.multids index da17e973f..da70b5ce9 100644 --- a/languages/it-IT/Filters.multids +++ b/languages/it-IT/Filters.multids @@ -1,12 +1,14 @@ title: $:/language/Filters/ -AllTags: Tutte le categorie eccetto quelle di sistema +AllTags: Tutte le etichette eccetto quelle di sistema AllTiddlers: Tutti i frammenti eccetto quelli di sistema Drafts: Frammenti bozza Missing: Frammenti mancanti Orphans: Frammenti orfani OverriddenShadowTiddlers: Frammenti nascosti annullati +RecentSystemTiddlers: I frammenti modificati di recente, inclusi i frammenti di sistema RecentTiddlers: I frammenti modificati di recente ShadowTiddlers: Frammenti nascosti -SystemTags: Categorie di sistema +SystemTags: Etichette di sistema SystemTiddlers: Frammenti di sistema +TypedTiddlers: Frammenti di tipo non wiki-text diff --git a/languages/it-IT/GettingStarted.tid b/languages/it-IT/GettingStarted.tid index 93157b070..b0eb7177d 100644 --- a/languages/it-IT/GettingStarted.tid +++ b/languages/it-IT/GettingStarted.tid @@ -1,13 +1,11 @@ title: GettingStarted -Benvenuti in TiddlyWiki, un programma non lineare per scrivere web. +Benvenuto in TiddlyWiki e nella TiddlyWiki community -Per iniziare, verifica prima di tutto di riuscire a salvare correttamente le modifiche al tuo wiki - leggi http://tiddlywiki.com/ per le istruzioni dettagliate. +Prima di iniziare a memorizzare informazioni importanti in TiddlyWiki assicurati di riuscire a salvare in modo affidabile le modifiche. Leggi http://tiddlywiki.com/#GettingStarted per i dettagli. -Successivamente puoi: +!! Imposta questo TiddlyWiki -* Creare nuovi frammenti utilizzando il pulsante '+' presente nella sidebar -* Aprire il pannello di controllo utilizzando il pulsante 'ingranaggio' presente nella sidebar per personalizzare il tuo wiki -** Bloccare la comparsa di questo messaggio modificando i frammenti di default elencati nel tab Impostazioni base -* Salvare le modifiche utilizzando il pulsante 'download' presente nella sidebar -* Conoscere meglio la sintassi del WikiText + [list[$:/StoryList]] + +Apri il pannello di controllo per altre opzioni. \ No newline at end of file diff --git a/languages/it-IT/Help/clearpassword.tid b/languages/it-IT/Help/clearpassword.tid new file mode 100644 index 000000000..828918a8e --- /dev/null +++ b/languages/it-IT/Help/clearpassword.tid @@ -0,0 +1,8 @@ +title: $:/language/Help/clearpassword +description: Cancella la password per le successive operazioni di cifratura + +Cancella la password per le successive operazioni di cifratura + +``` +--clearpassword +``` diff --git a/languages/it-IT/Help/editions.tid b/languages/it-IT/Help/editions.tid new file mode 100644 index 000000000..35913f7ae --- /dev/null +++ b/languages/it-IT/Help/editions.tid @@ -0,0 +1,8 @@ +title: $:/language/Help/editions +description: Elenca le edizioni disponibili di TiddlyWiki + +Elenca i nomi e le descrizioni delle edizioni disponibili. Puoi creare un nuovo wiki di una specifica edizione con il comando `--init`. + +``` +--editions +``` diff --git a/languages/it-IT/Help/help.tid b/languages/it-IT/Help/help.tid index b93d545d4..250e38d6d 100644 --- a/languages/it-IT/Help/help.tid +++ b/languages/it-IT/Help/help.tid @@ -1,7 +1,7 @@ title: $:/language/Help/help -description: Display help for TiddlyWiki commands +description: Visualizza l'aiuto per i comandi TiddlyWiki -Visualizza il testo di help per un comando: +Visualizza il testo di aiuto per un comando: ``` --help [<command>] diff --git a/languages/it-IT/Help/init.tid b/languages/it-IT/Help/init.tid index dd63258e1..5afb6fbe5 100644 --- a/languages/it-IT/Help/init.tid +++ b/languages/it-IT/Help/init.tid @@ -1,5 +1,5 @@ title: $:/language/Help/init -description: Initialise a new wiki folder +description: Inizializza un nuovo wiki folder Inizializza un [[WikiFolder|WikiFolders]] vuoto con una copia della specifica edizione. diff --git a/languages/it-IT/Help/load.tid b/languages/it-IT/Help/load.tid index 23592bd1a..6588a8d17 100644 --- a/languages/it-IT/Help/load.tid +++ b/languages/it-IT/Help/load.tid @@ -1,5 +1,5 @@ title: $:/language/Help/load -description: Load tiddlers from a file +description: Carica frammenti da un file Carica frammenti da file 2.x.x TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` o altri file diff --git a/languages/it-IT/Help/password.tid b/languages/it-IT/Help/password.tid index 5d59c8f57..aaaac0014 100644 --- a/languages/it-IT/Help/password.tid +++ b/languages/it-IT/Help/password.tid @@ -1,9 +1,4 @@ title: $:/language/Help/password -description: Set a password for subsequent crypto operations - -Definisci una password per le successive operazioni di crittografia - -``` ---password <password> -``` +description: Definisci una password per le successive operazioni di crittografia +Definisci una password per le successive operazioni di crittografia ```--password <password>``` \ No newline at end of file diff --git a/languages/it-IT/Help/rendertiddler.tid b/languages/it-IT/Help/rendertiddler.tid index bbed6b368..73cce3c4b 100644 --- a/languages/it-IT/Help/rendertiddler.tid +++ b/languages/it-IT/Help/rendertiddler.tid @@ -1,5 +1,5 @@ title: $:/language/Help/rendertiddler -description: Render an individual tiddler as a specified ContentType +description: Presenta un frammento singolo secondo uno specifico ContentType Presenta un frammento singolo secondo uno specifico ContentType, il default è `text/html` e lo salva con il nome file specificato: diff --git a/languages/it-IT/Help/savetiddler.tid b/languages/it-IT/Help/savetiddler.tid index 12cec617e..63a9c401a 100644 --- a/languages/it-IT/Help/savetiddler.tid +++ b/languages/it-IT/Help/savetiddler.tid @@ -1,5 +1,5 @@ title: $:/language/Help/savetiddler -description: Saves a raw tiddler to a file +description: Salva un frammento nel formato puro testo o binario in un file Salva un singolo frammento nel formato puro testo o binario con il nome file specificato. diff --git a/languages/it-IT/Help/server.tid b/languages/it-IT/Help/server.tid index b7fb982e7..d4a4ed432 100644 --- a/languages/it-IT/Help/server.tid +++ b/languages/it-IT/Help/server.tid @@ -1,5 +1,5 @@ title: $:/language/Help/server -description: Provides an HTTP server interface to TiddlyWiki +description: Fornisce un'interfaccia server HTTP a TiddlyWiki Il server incluso in TiddlyWiki5 è molto semplice. Sebbene compatibile con TiddlyWeb, il server non supporta molte delle funzionalità necessarie per un utilizzo affidabile su internet. diff --git a/languages/it-IT/Help/verbose.tid b/languages/it-IT/Help/verbose.tid index 0aae179c8..b5aab7506 100644 --- a/languages/it-IT/Help/verbose.tid +++ b/languages/it-IT/Help/verbose.tid @@ -1,8 +1,4 @@ title: $:/language/Help/verbose -description: Triggers verbose output mode +description: Attiva l'output esteso per il debug -Attiva l'output esteso utile per il debug - -``` ---verbose -``` +Attiva l'output esteso per il debug \ No newline at end of file diff --git a/languages/it-IT/Help/version.tid b/languages/it-IT/Help/version.tid index 51470a95d..f37d0f7cb 100644 --- a/languages/it-IT/Help/version.tid +++ b/languages/it-IT/Help/version.tid @@ -1,8 +1,4 @@ title: $:/language/Help/version -description: Displays the version number of TiddlyWiki +description: Visualizza la versione di TiddlyWiki -Visualizza la versione di TiddlyWiki. - -``` ---version -``` +Visualizza la versione di TiddlyWiki. \ No newline at end of file diff --git a/languages/it-IT/Import.multids b/languages/it-IT/Import.multids index c35cd0926..50eb792d7 100644 --- a/languages/it-IT/Import.multids +++ b/languages/it-IT/Import.multids @@ -1,2 +1,14 @@ title: $:/language/Import/ +Listing/Cancel/Caption: Cancella +Listing/Hint: Questi frammenti sono pronti per essere importati: +Listing/Import/Caption: Importa +Listing/Select/Caption: Seleziona +Listing/Status/Caption: Stato +Listing/Title/Caption: Titolo +Upgrader/Plugins/Suppressed/Incompatible: Plugin bloccato incompatibile o obsoleto +Upgrader/Plugins/Suppressed/Version: Plugin bloccato (a causa di un in arrivo <<incoming>> più vecchio di un esistente <<existing>>) +Upgrader/Plugins/Upgraded: Plugin aggiornato da <<incoming>> a <<upgraded>> +Upgrader/State/Suppressed: Frammento in stato temporaneo bloccato +Upgrader/System/Suppressed: Frammento di sistema bloccato +Upgrader/ThemeTweaks/Created: Tema migrato da <$text text=<<from>>/> diff --git a/languages/it-IT/Misc.multids b/languages/it-IT/Misc.multids index 3950e0edb..3d2d2d00d 100644 --- a/languages/it-IT/Misc.multids +++ b/languages/it-IT/Misc.multids @@ -1,8 +1,36 @@ title: $:/language/ -ClassicWarning/Hint: Questo frammento è scritto nel formato testo wiki di TiddlyWiki Classic e non è pienamente compatibile con TiddlyWiki versione 5. Vedi http://tiddlywiki.com/static/Upgrading.html per maggiori dettagli a riguardo +BinaryWarning/Prompt: Questo frammento contiene dati binari +ClassicWarning/Hint: Questo frammento è scritto nel formato testo wiki di TiddlyWiki Classic e non è pienamente compatibile con TiddlyWiki versione 5. Vedi http://tiddlywiki.com/static/Upgrading.html per maggiori dettagli a riguardo ClassicWarning/Upgrade/Caption: Aggiorna CloseAll/Button: Chiudi tutto +ConfirmCancelTiddler: Vuoi annullare le modifiche al frammento "<$text text=<<title>>/>"? +ConfirmDeleteTiddler: Vuoi cancellare il frammento "<$text text=<<title>>/>"? +ConfirmEditShadowTiddler: Stai per editare un frammento nascosto. Ogni modifica dei default di sistema renderà i futuri aggiornamenti non semplici. Sei sicuro di voler editare "<$text text=<<title>>/>"? +ConfirmOverwriteTiddler: Vuoi sovrascrivere il frammento "<$text text=<<title>>/>"? +DefaultNewTiddlerTitle: Nuovo frammento +DropMessage: Rilascia qui (o usa il tasto 'Escape' per cancellare) +Encryption/Cancel: Cancella +Encryption/ConfirmClearPassword: Vuoi cancellare la password? Questa operazione rimuoverà la crittografia applicata quando salverai questo wiki +Encryption/Password: Password +Encryption/PasswordNoMatch: Le password non corrispondono +Encryption/PromptSetPassword: Imposta una nuova pasword per questo ~TiddlyWiki +Encryption/RepeatPassword: Ripeti password +Encryption/SetPassword: Imposta password +Encryption/Username: NomeUtente +Exporters/CsvFile: file CSV +Exporters/JsonFile: file JSON +Exporters/StaticRiver: HTML statico +Exporters/TidFile: ".tid" file +InvalidFieldName: Caratteri non consentiti nel campo nome "<$text text=<<fieldName>>/>". I campi nome possono solo contenere lettere minuscole, numeri ed i caratteri sottolineato (`_`), meno (`-`) e punto (`.`) MissingTiddler/Hint: Frammento mancante "<$text text=<<currentTiddler>>/>" - clicca {{$:/core/images/edit-button}} per crearlo -RecentChanges/DateFormat: DDth MMM YYYY +OfficialPluginLibrary: Libreria ufficiale plugin ~TiddlyWiki +PluginReloadWarning: Salva {{$:/core/ui/Buttons/save-wiki}} e ricarica {{$:/core/ui/Buttons/refresh}} per consentire alle modifiche ai plugin di avere effetto +RecentChanges/DateFormat: GG MM AAAA SystemTiddler/Tooltip: Questo è un frammento di sistema +TagManager/Colour/Heading: Colore +TagManager/Count/Heading: Conteggio +TagManager/Icon/Heading: Icona +TagManager/Info/Heading: Info +TagManager/Tag/Heading: Etichetta +UnsavedChangesWarning: Ci sono modifiche non salvate in ~TiddlyWiki diff --git a/languages/it-IT/Modals/Download.tid b/languages/it-IT/Modals/Download.tid index 4aa61baa7..a323d3cb4 100644 --- a/languages/it-IT/Modals/Download.tid +++ b/languages/it-IT/Modals/Download.tid @@ -10,4 +10,4 @@ Per salvare le modifiche al tuo wiki, clicca con il tasto destro del mouse sul l //Puoi velocizzare l'operazione cliccando il link con il tasto control (Windows) o il tasto options/alt (Mac OS X). Non ti verrà chiesto il nome della cartella e del file, ma il tuo browser non è in grado di assegnare un nome riconoscibile -- potrebbe essere necessario rinominare il file per aggiungere l'estensione `.html` prima di poter fare qualcosa di utile.// -Sugli smartphone che non consentono di scaricare file, puoi memorizzare nei bookmark il link, successivamente sincronizzare i bookmark con un desktop computer su cui poi salvare il file normalmente. +Sugli smartphone che non consentono di scaricare file, puoi memorizzare nei bookmark il link, successivamente sincronizzare i bookmark con un computer desktop su cui poi salvare il file normalmente. diff --git a/languages/it-IT/NewJournal.multids b/languages/it-IT/NewJournal.multids index b38b8c597..bbf072b6b 100644 --- a/languages/it-IT/NewJournal.multids +++ b/languages/it-IT/NewJournal.multids @@ -1,2 +1,4 @@ title: $:/config/NewJournal/ +Tags: Diario +Title: DD MM YYYY diff --git a/languages/it-IT/Search.multids b/languages/it-IT/Search.multids index b0b2fc4d3..a44fc732b 100644 --- a/languages/it-IT/Search.multids +++ b/languages/it-IT/Search.multids @@ -1,10 +1,17 @@ title: $:/language/Search/ -Advanced/Matches: //<small><<resultCount>> Corrispondenze</small>// +Advanced/Matches: //<small><<resultCount>> corrispondenze</small>// +DefaultResults/Caption: Lista Filter/Caption: Filtro Filter/Hint: Cerca attraverso un [[filtro|http://tiddlywiki.com/static/Filters.html]] -Matches: //<small><<resultCount>> Corrispondenze</small>// +Filter/Matches: //<small><<resultCount>> corrispondenze</small>// +Matches: //<small><<resultCount>> corrispondenze</small>// Shadows/Caption: Nascosti Shadows/Hint: Cerca frammenti nascosti +Shadows/Matches: //<small><<resultCount>> corrispondenze</small>// +Standard/Caption: Standard +Standard/Hint: Cerca frammenti standard +Standard/Matches: //<small><<resultCount>> corrispondenze</small>// System/Caption: Sistema System/Hint: Cerca frammenti di sistema +System/Matches: //<small><<resultCount>> corrispondenze</small>// diff --git a/languages/it-IT/SideBar.multids b/languages/it-IT/SideBar.multids index b415bbb8f..5cfb8f2f5 100644 --- a/languages/it-IT/SideBar.multids +++ b/languages/it-IT/SideBar.multids @@ -10,7 +10,7 @@ Orphans/Caption: Orfani Recent/Caption: Recenti Shadows/Caption: Nascosti System/Caption: Sistema -Tags/Caption: Categorie +Tags/Caption: Etichette Tags/Untagged/Caption: Non categorizzati Tools/Caption: Strumenti Types/Caption: Tipi diff --git a/languages/it-IT/SiteSubtitle.tid b/languages/it-IT/SiteSubtitle.tid index 63794df01..a58cb8889 100644 --- a/languages/it-IT/SiteSubtitle.tid +++ b/languages/it-IT/SiteSubtitle.tid @@ -1,3 +1,3 @@ title: $:/SiteSubtitle -Un programma personale per scrivere web in modo non lineare \ No newline at end of file +Un programma personale per scrivere in modo non lineare \ No newline at end of file diff --git a/languages/it-IT/TiddlerInfo.multids b/languages/it-IT/TiddlerInfo.multids index 7729edd73..9bb53be2e 100644 --- a/languages/it-IT/TiddlerInfo.multids +++ b/languages/it-IT/TiddlerInfo.multids @@ -2,11 +2,11 @@ title: $:/language/TiddlerInfo/ Advanced/Caption: Avanzate Advanced/PluginInfo/Empty/Hint: Nessuno -Advanced/PluginInfo/Heading: Dettagli del plugin +Advanced/PluginInfo/Heading: Dettagli plugin Advanced/PluginInfo/Hint: Questo plugin contiene i seguenti frammenti nascosti: Advanced/ShadowInfo/Heading: Stato nascosto Advanced/ShadowInfo/NotShadow/Hint: Il frammento <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> non è un frammento nascosto -Advanced/ShadowInfo/OverriddenShadow/Hint: È annullato da un frammento ordinario +Advanced/ShadowInfo/OverriddenShadow/Hint: È sovrascritto da un frammento ordinario Advanced/ShadowInfo/Shadow/Hint: Il frammento <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> è un frammento nascosto Advanced/ShadowInfo/Shadow/Source: È definito nel plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link> Fields/Caption: Campi @@ -16,6 +16,6 @@ Listed/Caption: Elencato Listed/Empty: Questo frammento non è elencato da nessun altro References/Caption: Riferimenti References/Empty: Nessun frammento è collegato a questo -Tagging/Caption: Categorizza -Tagging/Empty: Non ci sono frammenti categorizzati con questo +Tagging/Caption: Etichetta +Tagging/Empty: Non ci sono frammenti categorizzati con questa etichetta Tools/Caption: Strumenti diff --git a/languages/it-IT/Types/application%2Fjavascript.tid b/languages/it-IT/Types/application%2Fjavascript.tid new file mode 100644 index 000000000..b66f6d07d --- /dev/null +++ b/languages/it-IT/Types/application%2Fjavascript.tid @@ -0,0 +1,4 @@ +title: $:/language/Docs/Types/application/javascript +description: Codice JavaScript +name: application/javascript +group: Sviluppatore diff --git a/languages/it-IT/Types/application_json.tid b/languages/it-IT/Types/application%2Fjson.tid similarity index 61% rename from languages/it-IT/Types/application_json.tid rename to languages/it-IT/Types/application%2Fjson.tid index 8cf1c8be1..76aa36e70 100644 --- a/languages/it-IT/Types/application_json.tid +++ b/languages/it-IT/Types/application%2Fjson.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/application/json -description: JSON data +description: Dati JSON name: application/json +group: Sviluppatore diff --git a/languages/it-IT/Types/application_x_tiddler_dictionary.tid b/languages/it-IT/Types/application%2Fx-tiddler-dictionary.tid similarity index 67% rename from languages/it-IT/Types/application_x_tiddler_dictionary.tid rename to languages/it-IT/Types/application%2Fx-tiddler-dictionary.tid index 3789fcd4f..4dd1fe6f8 100644 --- a/languages/it-IT/Types/application_x_tiddler_dictionary.tid +++ b/languages/it-IT/Types/application%2Fx-tiddler-dictionary.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/application/x-tiddler-dictionary -description: Data dictionary +description: Dizionario dati name: application/x-tiddler-dictionary +group: Sviluppatore diff --git a/languages/it-IT/Types/image_gif.tid b/languages/it-IT/Types/image%2Fgif.tid similarity index 57% rename from languages/it-IT/Types/image_gif.tid rename to languages/it-IT/Types/image%2Fgif.tid index 3ed84467f..365116c4c 100644 --- a/languages/it-IT/Types/image_gif.tid +++ b/languages/it-IT/Types/image%2Fgif.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/image/gif -description: GIF image +description: Immagine GIF name: image/gif +group: Immagine diff --git a/languages/it-IT/Types/image_jpeg.tid b/languages/it-IT/Types/image%2Fjpeg.tid similarity index 57% rename from languages/it-IT/Types/image_jpeg.tid rename to languages/it-IT/Types/image%2Fjpeg.tid index 5d7d8db70..d702d394f 100644 --- a/languages/it-IT/Types/image_jpeg.tid +++ b/languages/it-IT/Types/image%2Fjpeg.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/image/jpeg -description: JPEG image +description: Immagine JPEG name: image/jpeg +group: Immagine diff --git a/languages/it-IT/Types/image_png.tid b/languages/it-IT/Types/image%2Fpng.tid similarity index 57% rename from languages/it-IT/Types/image_png.tid rename to languages/it-IT/Types/image%2Fpng.tid index 47867d4d5..3198a26bc 100644 --- a/languages/it-IT/Types/image_png.tid +++ b/languages/it-IT/Types/image%2Fpng.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/image/png -description: PNG image +description: Immagine PNG name: image/png +group: Immagine diff --git a/languages/it-IT/Types/image%2Fsvg%2Bxml.tid b/languages/it-IT/Types/image%2Fsvg%2Bxml.tid new file mode 100644 index 000000000..3753af9fa --- /dev/null +++ b/languages/it-IT/Types/image%2Fsvg%2Bxml.tid @@ -0,0 +1,4 @@ +title: $:/language/Docs/Types/image/svg+xml +description: Immagine SVG (Structured Vector Graphics) +name: image/svg+xml +group: Immagine diff --git a/languages/it-IT/Types/image_x-icon.tid b/languages/it-IT/Types/image%2Fx-icon.tid similarity index 54% rename from languages/it-IT/Types/image_x-icon.tid rename to languages/it-IT/Types/image%2Fx-icon.tid index 3ad50c454..507aade37 100644 --- a/languages/it-IT/Types/image_x-icon.tid +++ b/languages/it-IT/Types/image%2Fx-icon.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/image/x-icon -description: ICO format icon file +description: File icona formato ICO name: image/x-icon +group: Immagine diff --git a/languages/it-IT/Types/image_svg_xml.tid b/languages/it-IT/Types/image_svg_xml.tid deleted file mode 100644 index 8e06b230f..000000000 --- a/languages/it-IT/Types/image_svg_xml.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/language/Docs/Types/image/svg+xml -description: Structured Vector Graphics image -name: image/svg+xml diff --git a/languages/it-IT/Types/text_css.tid b/languages/it-IT/Types/text%2Fcss.tid similarity index 50% rename from languages/it-IT/Types/text_css.tid rename to languages/it-IT/Types/text%2Fcss.tid index 095775ad5..c32ee22e4 100644 --- a/languages/it-IT/Types/text_css.tid +++ b/languages/it-IT/Types/text%2Fcss.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/text/css -description: Static stylesheet +description: Stylesheet statico name: text/css +group: Sviluppatore diff --git a/languages/it-IT/Types/text%2Fhtml.tid b/languages/it-IT/Types/text%2Fhtml.tid new file mode 100644 index 000000000..27492428e --- /dev/null +++ b/languages/it-IT/Types/text%2Fhtml.tid @@ -0,0 +1,4 @@ +title: $:/language/Docs/Types/text/html +description: Markup HTML +name: text/html +group: Testo diff --git a/languages/it-IT/Types/text_plain.tid b/languages/it-IT/Types/text%2Fplain.tid similarity index 59% rename from languages/it-IT/Types/text_plain.tid rename to languages/it-IT/Types/text%2Fplain.tid index 251ce9ce7..49ef1a86e 100644 --- a/languages/it-IT/Types/text_plain.tid +++ b/languages/it-IT/Types/text%2Fplain.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/text/plain -description: Plain text +description: Text normale name: text/plain +group: Testo diff --git a/languages/it-IT/Types/text_vnd.tiddlywiki.tid b/languages/it-IT/Types/text%2Fvnd.tiddlywiki.tid similarity index 57% rename from languages/it-IT/Types/text_vnd.tiddlywiki.tid rename to languages/it-IT/Types/text%2Fvnd.tiddlywiki.tid index 682841f32..65a591075 100644 --- a/languages/it-IT/Types/text_vnd.tiddlywiki.tid +++ b/languages/it-IT/Types/text%2Fvnd.tiddlywiki.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/text/vnd.tiddlywiki -description: TiddlyWiki version 5 wikitext +description: TiddlyWiki versione 5 wikitext name: text/vnd.tiddlywiki +group: Testo diff --git a/languages/it-IT/Types/text_x-tiddlywiki.tid b/languages/it-IT/Types/text%2Fx-tiddlywiki.tid similarity index 89% rename from languages/it-IT/Types/text_x-tiddlywiki.tid rename to languages/it-IT/Types/text%2Fx-tiddlywiki.tid index f5969148e..91911281f 100644 --- a/languages/it-IT/Types/text_x-tiddlywiki.tid +++ b/languages/it-IT/Types/text%2Fx-tiddlywiki.tid @@ -1,3 +1,4 @@ title: $:/language/Docs/Types/text/x-tiddlywiki description: TiddlyWiki Classic wikitext name: text/x-tiddlywiki +group: Testo From ac00aa840761d4dd77f0773fd23887a89a757e79 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 10 Nov 2015 18:13:30 +0000 Subject: [PATCH 098/242] Allow server module to work under Node even if $tw.browser is defined Needed for TiddlyDesktop, where want to be able to run the HTTP server in a hybrid browser/node environment. --- core/modules/commands/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/modules/commands/server.js b/core/modules/commands/server.js index 0e888a21e..437db4dec 100644 --- a/core/modules/commands/server.js +++ b/core/modules/commands/server.js @@ -12,7 +12,7 @@ Serve tiddlers over http /*global $tw: false */ "use strict"; -if(!$tw.browser) { +if($tw.node) { var util = require("util"), fs = require("fs"), url = require("url"), From ef3e44eb4802da2d1c0cc77d7cc0c2a271a61368 Mon Sep 17 00:00:00 2001 From: Tobias Beer <beertobias@gmail.com> Date: Fri, 13 Nov 2015 11:07:24 +0100 Subject: [PATCH 099/242] rename suffix each:list to each_list-item based on #1422, improves readability of the filter expression tests passed --- core/modules/filters/each.js | 2 +- editions/test/tiddlers/tests/test-filters.js | 4 ++-- editions/tw5.com/tiddlers/filters/each.tid | 4 ++-- editions/tw5.com/tiddlers/filters/examples/each.tid | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/modules/filters/each.js b/core/modules/filters/each.js index c60447446..25e852638 100644 --- a/core/modules/filters/each.js +++ b/core/modules/filters/each.js @@ -20,7 +20,7 @@ exports.each = function(source,operator,options) { var results =[] , value,values = {}, field = operator.operand || "title"; - if(operator.suffix !== "list") { + if(operator.suffix !== "list-item") { source(function(tiddler,title) { if(tiddler) { value = (field === "title") ? title : tiddler.getFieldString(field); diff --git a/editions/test/tiddlers/tests/test-filters.js b/editions/test/tiddlers/tests/test-filters.js index 1b16b117c..2af6c2e36 100644 --- a/editions/test/tiddlers/tests/test-filters.js +++ b/editions/test/tiddlers/tests/test-filters.js @@ -219,8 +219,8 @@ describe("Filter tests", function() { it("should handle the each operator", function() { expect(wiki.filterTiddlers("[each[modifier]sort[title]]").join(",")).toBe("$:/TiddlerTwo,TiddlerOne"); - expect(wiki.filterTiddlers("[each:list[tags]sort[title]]").join(",")).toBe("one,two"); - expect(wiki.filterTiddlers("[each:list[authors]sort[title]]").join(",")).toBe("Bloggs,Joe,John Doe"); + expect(wiki.filterTiddlers("[each:list-item[tags]sort[title]]").join(",")).toBe("one,two"); + expect(wiki.filterTiddlers("[each:list-item[authors]sort[title]]").join(",")).toBe("Bloggs,Joe,John Doe"); }); it("should handle the eachday operator", function() { diff --git a/editions/tw5.com/tiddlers/filters/each.tid b/editions/tw5.com/tiddlers/filters/each.tid index 09b69fa70..8a48fb122 100644 --- a/editions/tw5.com/tiddlers/filters/each.tid +++ b/editions/tw5.com/tiddlers/filters/each.tid @@ -6,7 +6,7 @@ type: text/vnd.tiddlywiki caption: each op-purpose: select one of each group of input titles by field op-input: a [[selection of titles|Title Selection]] -op-suffix: optionally, `list` +op-suffix: optionally, `list-item` op-parameter: the name of a [[field|TiddlerFields]], defaulting to <<.field title>> op-parameter-name: F op-output: a selection containing the first input title encountered for each distinct value of field <<.place F>> @@ -15,7 +15,7 @@ Each input title is processed in turn. The value of field <<.place F>> in the co ;each :As long as the field's value has not been encountered before, the title is appended to the output. -;each:list +;each:list-item :The value is treated as a [[title list|Title List]]. Each title in the list considered in turn. If it has not been encountered before, it is appended to the output. If a tiddler doesn't contain field <<.place F>>, it is treated as if the field's value was empty. diff --git a/editions/tw5.com/tiddlers/filters/examples/each.tid b/editions/tw5.com/tiddlers/filters/examples/each.tid index 091e1bc37..f6e2ed23b 100644 --- a/editions/tw5.com/tiddlers/filters/examples/each.tid +++ b/editions/tw5.com/tiddlers/filters/examples/each.tid @@ -6,6 +6,6 @@ type: text/vnd.tiddlywiki <<.operator-example 1 "[each[color]]">> <<.operator-example 2 "[sort[title]each[type]]" "the alphabetically first tiddler of each type">> -<<.operator-example 3 "[each:list[list]]" "all tiddlers listed anywhere in the core list field">> +<<.operator-example 3 "[each:list-item[list]]" "all tiddlers listed anywhere in the core list field">> For an example of using the <<.op each>> operator to generate a two-tier list of groups and members, see [[GroupedLists]]. From c535dd605ce1c42abc1367b1404503cb867e0cd3 Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 07:50:34 -0500 Subject: [PATCH 100/242] Grant the select widget the ability to select multiple values. Multiple values are placed in a given tiddler-field combination as if that field were a list field. --- core/modules/widgets/select.js | 47 +++++++++++++++++-- .../tw5.com/tiddlers/widgets/SelectWidget.tid | 21 ++++++--- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index 904988f97..e9f89c60c 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -51,7 +51,12 @@ SelectWidget.prototype.render = function(parent,nextSibling) { Handle a change event */ SelectWidget.prototype.handleChangeEvent = function(event) { - var value = this.getSelectDomNode().value; + if(this.selectMultiple == false) { + var value = this.getSelectDomNode().value; + } else { + var value = this.getSelectValues(); + value = value.map(function(s) { return "[["+s+"]]"}).join(" "); + } this.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value); }; @@ -81,9 +86,21 @@ SelectWidget.prototype.setSelectValue = function() { } } // Assign it to the select element if it's different than the current value - var domNode = this.getSelectDomNode(); - if(domNode.value !== value) { - domNode.value = value; + if (this.selectMultiple) { + value = value === undefined ? "" : value; + var select = this.getSelectDomNode(); + var values = Array.isArray(value) ? value : value.split(","); + for(var i=0; i < select.children.length; i++){ + if(values.indexOf(select.children[i].value) != -1) { + select.children[i].selected = true; + } + } + + } else { + var domNode = this.getSelectDomNode(); + if(domNode.value !== value) { + domNode.value = value; + } } }; @@ -94,6 +111,22 @@ SelectWidget.prototype.getSelectDomNode = function() { return this.children[0].domNodes[0]; }; +// Return an array of the selected opion values +// select is an HTML select element +SelectWidget.prototype.getSelectValues = function() { + var select = this.getSelectDomNode() + var result = []; + var options = select && select.options; + var opt; + for (var i=0, iLen=options.length; i<iLen; i++) { + opt = options[i]; + if (opt.selected) { + result.push(opt.value || opt.text); + } + } + return result; +} + /* Compute the internal state of the widget */ @@ -104,6 +137,7 @@ SelectWidget.prototype.execute = function() { this.selectIndex = this.getAttribute("index"); this.selectClass = this.getAttribute("class"); this.selectDefault = this.getAttribute("default"); + this.selectMultiple = this.getAttribute("multiple", false); // Make the child widgets var selectNode = { type: "element", @@ -113,6 +147,9 @@ SelectWidget.prototype.execute = function() { if(this.selectClass) { $tw.utils.addAttributeToParseTreeNode(selectNode,"class",this.selectClass); } + if(this.selectMultiple) { + $tw.utils.addAttributeToParseTreeNode(selectNode,"multiple","multiple"); + } this.makeChildWidgets([selectNode]); }; @@ -137,4 +174,4 @@ SelectWidget.prototype.refresh = function(changedTiddlers) { exports.select = SelectWidget; -})(); +})(); \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid index f57c8a103..1f6093677 100644 --- a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid @@ -1,10 +1,3 @@ -caption: select -created: 20131024141900000 -modified: 20141203155137508 -tags: Widgets -title: SelectWidget -type: text/vnd.tiddlywiki - ! Introduction The select widget displays a popup menu based on a [[HTML select element|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select]]. The popup (or dropdown) contains a list of items defined by `<option>` and `<optgroup>` elements. @@ -99,3 +92,17 @@ This example uses a nested pair of list widgets. The outer one generates the `<o </optgroup> </$list> </$select>"/> + +!! Multiple Selections + +This example uses the `multiple` keyword to specify that we should be able to select multiple items. + +<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/generated-list-demo-state' field='testing' multiple> +<$list filter='[tag[TableOfContents]]'> +<option><$view field='title'/></option> +</$list> +</$select><br /> +<$list filter='[list[$:/generated-list-demo-state!!testing]]'> +<$view field='title' /><br /> +</$list> +"/> \ No newline at end of file From 75380c56cc43121bbb538ac3d5736508f719fc7c Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 07:53:19 -0500 Subject: [PATCH 101/242] Oops, deleted metadata --- editions/tw5.com/tiddlers/widgets/SelectWidget.tid | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid index 1f6093677..6afb0f2c7 100644 --- a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid @@ -1,3 +1,11 @@ +caption: select +created: 20131024141900000 +modified: 20141203155137508 +tags: Widgets +title: SelectWidget +type: text/vnd.tiddlywiki + + ! Introduction The select widget displays a popup menu based on a [[HTML select element|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select]]. The popup (or dropdown) contains a list of items defined by `<option>` and `<optgroup>` elements. From 1569090046099b00993671144a22db419833b799 Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 07:53:47 -0500 Subject: [PATCH 102/242] typo --- editions/tw5.com/tiddlers/widgets/SelectWidget.tid | 1 - 1 file changed, 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid index 6afb0f2c7..8eab689bd 100644 --- a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid @@ -5,7 +5,6 @@ tags: Widgets title: SelectWidget type: text/vnd.tiddlywiki - ! Introduction The select widget displays a popup menu based on a [[HTML select element|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select]]. The popup (or dropdown) contains a list of items defined by `<option>` and `<optgroup>` elements. From 46a3b2f2617d05bbfe42070717cb91a84b7231d9 Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 07:57:10 -0500 Subject: [PATCH 103/242] Singing CLA --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index e4ca78d44..ccb7a9144 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -256,3 +256,5 @@ Tony Grosinger @tgrosinger 2015/10/03 Antaeus Feldspar @afeldspar 2015/10/20 Soeren Enevoldsen, @senevoldsen90, 2015/10/09 + +Matthew LAuber, @mklauber, 2015/11/13 \ No newline at end of file From 065b274b988b281990ed8b7752b7e55a1c82186d Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 08:04:13 -0500 Subject: [PATCH 104/242] Use the $tw.utls.parseStringArray function to break up a list. --- core/modules/widgets/select.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index e9f89c60c..852ef55f1 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -54,7 +54,7 @@ SelectWidget.prototype.handleChangeEvent = function(event) { if(this.selectMultiple == false) { var value = this.getSelectDomNode().value; } else { - var value = this.getSelectValues(); + var value = this.getSelectValues() value = value.map(function(s) { return "[["+s+"]]"}).join(" "); } this.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value); @@ -89,7 +89,7 @@ SelectWidget.prototype.setSelectValue = function() { if (this.selectMultiple) { value = value === undefined ? "" : value; var select = this.getSelectDomNode(); - var values = Array.isArray(value) ? value : value.split(","); + var values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value); for(var i=0; i < select.children.length; i++){ if(values.indexOf(select.children[i].value) != -1) { select.children[i].selected = true; From f540be4ac43571fb094c395bbc93350c66bb65c7 Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 08:06:51 -0500 Subject: [PATCH 105/242] use $tw.utils.stringifyList --- core/modules/widgets/select.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index 852ef55f1..c86869d46 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -55,7 +55,7 @@ SelectWidget.prototype.handleChangeEvent = function(event) { var value = this.getSelectDomNode().value; } else { var value = this.getSelectValues() - value = value.map(function(s) { return "[["+s+"]]"}).join(" "); + value = $tw.utils.stringifyList(value); } this.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value); }; @@ -174,4 +174,4 @@ SelectWidget.prototype.refresh = function(changedTiddlers) { exports.select = SelectWidget; -})(); \ No newline at end of file +})(); From 35ce8c8b5507608f63db7436cb9956454631eda1 Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 08:18:20 -0500 Subject: [PATCH 106/242] typo --- licenses/cla-individual.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index ccb7a9144..ce6061d0f 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -257,4 +257,4 @@ Antaeus Feldspar @afeldspar 2015/10/20 Soeren Enevoldsen, @senevoldsen90, 2015/10/09 -Matthew LAuber, @mklauber, 2015/11/13 \ No newline at end of file +Matthew Lauber, @mklauber, 2015/11/13 \ No newline at end of file From 8ccee5d01518bbfa8ba029ec6df69b747f6f2580 Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 11:30:06 -0500 Subject: [PATCH 107/242] Remove cla for separate PR, and clean up variable declaration. --- core/modules/widgets/select.js | 10 +++++----- licenses/cla-individual.md | 4 +--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index c86869d46..18552fc1a 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -114,11 +114,11 @@ SelectWidget.prototype.getSelectDomNode = function() { // Return an array of the selected opion values // select is an HTML select element SelectWidget.prototype.getSelectValues = function() { - var select = this.getSelectDomNode() - var result = []; - var options = select && select.options; - var opt; - for (var i=0, iLen=options.length; i<iLen; i++) { + var select, result, options, opt; + select = this.getSelectDomNode(); + result = []; + options = select && select.options; + for (var i=0; i<options.length; i++) { opt = options[i]; if (opt.selected) { result.push(opt.value || opt.text); diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index ce6061d0f..5af48bb28 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -255,6 +255,4 @@ Tony Grosinger @tgrosinger 2015/10/03 Antaeus Feldspar @afeldspar 2015/10/20 -Soeren Enevoldsen, @senevoldsen90, 2015/10/09 - -Matthew Lauber, @mklauber, 2015/11/13 \ No newline at end of file +Soeren Enevoldsen, @senevoldsen90, 2015/10/09 \ No newline at end of file From d7623b698588dbf81fade945afcca19b7f3c6691 Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 12:34:07 -0500 Subject: [PATCH 108/242] Update cla-individual.md --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index e4ca78d44..27d7c8da7 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -256,3 +256,5 @@ Tony Grosinger @tgrosinger 2015/10/03 Antaeus Feldspar @afeldspar 2015/10/20 Soeren Enevoldsen, @senevoldsen90, 2015/10/09 + +Matthew Lauber, @mklauber, 2015/11/13 From d94ffbae399f9c4468105a7f30d666dca74dab6b Mon Sep 17 00:00:00 2001 From: Matt Lauber <github@mklauber.com> Date: Fri, 13 Nov 2015 12:36:05 -0500 Subject: [PATCH 109/242] Unchange CLA. --- licenses/cla-individual.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index 5af48bb28..e4ca78d44 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -255,4 +255,4 @@ Tony Grosinger @tgrosinger 2015/10/03 Antaeus Feldspar @afeldspar 2015/10/20 -Soeren Enevoldsen, @senevoldsen90, 2015/10/09 \ No newline at end of file +Soeren Enevoldsen, @senevoldsen90, 2015/10/09 From 15f52bd7ce74f219c81eeab000f412a334ed9aa7 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 13 Nov 2015 18:47:20 +0000 Subject: [PATCH 110/242] Add support for Nw.js special features to browse widget --- core/modules/widgets/browse.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/modules/widgets/browse.js b/core/modules/widgets/browse.js index 195bda8d6..fca8e7467 100644 --- a/core/modules/widgets/browse.js +++ b/core/modules/widgets/browse.js @@ -42,9 +42,14 @@ BrowseWidget.prototype.render = function(parent,nextSibling) { if(this.tooltip) { domNode.setAttribute("title",this.tooltip); } + // Nw.js supports "nwsaveas" to force a "save as" dialogue that allows a new or existing file to be selected if(this.nwsaveas) { domNode.setAttribute("nwsaveas",this.nwsaveas); } + // Nw.js supports "webkitdirectory" to allow a directory to be selected + if(this.webkitdirectory) { + domNode.setAttribute("webkitdirectory",this.webkitdirectory); + } // Add a click event handler domNode.addEventListener("change",function (event) { if(self.message) { @@ -71,6 +76,7 @@ BrowseWidget.prototype.execute = function() { this.param = this.getAttribute("param"); this.tooltip = this.getAttribute("tooltip"); this.nwsaveas = this.getAttribute("nwsaveas"); + this.webkitdirectory = this.getAttribute("webkitdirectory"); }; /* From 848e35168523c89313c31f7386105e3f2c3a1dfb Mon Sep 17 00:00:00 2001 From: jed <inmysocks@gmail.com> Date: Mon, 16 Nov 2015 10:48:25 +0100 Subject: [PATCH 111/242] removed the handled variable because it serves no purpose here. That test isn't required in this context. --- core/modules/widgets/keyboard.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/core/modules/widgets/keyboard.js b/core/modules/widgets/keyboard.js index 004dddbd6..df32cc5b8 100644 --- a/core/modules/widgets/keyboard.js +++ b/core/modules/widgets/keyboard.js @@ -42,10 +42,7 @@ KeyboardWidget.prototype.render = function(parent,nextSibling) { // Add a keyboard event handler domNode.addEventListener("keydown",function (event) { if($tw.utils.checkKeyDescriptor(event,self.keyInfo)) { - var handled = false; - if(self.invokeActions(this,event)) { - handled = true; - } + self.invokeActions(this,event); self.dispatchMessage(event); event.preventDefault(); event.stopPropagation(); From d90828d14e9b046b409b025f98edc41d2876817b Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 14:42:31 +0100 Subject: [PATCH 112/242] fr-FR translation of strings related to tiddler folding buttons --- languages/fr-FR/Buttons.multids | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/languages/fr-FR/Buttons.multids b/languages/fr-FR/Buttons.multids index 9e91ba4d4..8abab75eb 100644 --- a/languages/fr-FR/Buttons.multids +++ b/languages/fr-FR/Buttons.multids @@ -30,6 +30,18 @@ ExportTiddler/Caption: exporte ce tiddler ExportTiddler/Hint: Exporter ce tiddler ExportTiddlers/Caption: exporte ces tiddlers ExportTiddlers/Hint: Exporter ces tiddlers +Fold/Caption: replie le tiddler +Fold/Hint: Replier le corps du tiddler +Fold/FoldBar/Caption: fold-bar +Fold/FoldBar/Hint: Barres optionnelles pour replier et déplier les tiddlers +Unfold/Caption: déplie le tiddler +Unfold/Hint: Déplie le corps de ce tiddler +FoldOthers/Caption: replie les autres tiddlers +FoldOthers/Hint: Replie le corps des autres tiddlers ouverts +FoldAll/Caption: replie tous les tiddlers +FoldAll/Hint: Replie le corps de tous les tiddlers ouverts +UnfoldAll/Caption: déplie tous les tiddlers +UnfoldAll/Hint: Déplie le corps de tous les tiddlers ouverts FullScreen/Caption: plein-écran FullScreen/Hint: Entre ou sort du mode plein-écran Help/Caption: aide From b4994f2e777dcf837ff0e0f5cc93c760d664e66a Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 14:54:19 +0100 Subject: [PATCH 113/242] fr-FR translations for strings related to plugin installation --- languages/fr-FR/ControlPanel.multids | 3 +++ 1 file changed, 3 insertions(+) diff --git a/languages/fr-FR/ControlPanel.multids b/languages/fr-FR/ControlPanel.multids index 62caeaf8b..36c9cfa6e 100644 --- a/languages/fr-FR/ControlPanel.multids +++ b/languages/fr-FR/ControlPanel.multids @@ -47,11 +47,14 @@ Plugins/Disabled/Status: (désactivé) Plugins/Empty/Hint: Aucun Plugins/Enable/Caption: activer Plugins/Enable/Hint: Active ce plugin au prochain rechargement de la page +Plugins/Install: installe Plugins/Installed/Hint: Plugins installés : Plugins/Languages/Caption: Languages Plugins/Languages/Hint: Plugins de langue +Plugins/OpenPluginLibrary: ouvre la bibliothèque de plugins Plugins/Plugins/Caption: Plugins Plugins/Plugins/Hint: Plugins +Plugins/Reinstall: réinstalle Plugins/Themes/Caption: Thèmes Plugins/Themes/Hint: Plugins de thème Saving/Caption: Sauvegarde From 6eba06e23e5821e5056e78ca86e2633d4b5a8e91 Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 14:56:24 +0100 Subject: [PATCH 114/242] fr-FR translations of a string related to tiddler importation --- languages/fr-FR/Import.multids | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/fr-FR/Import.multids b/languages/fr-FR/Import.multids index 5e8903d38..912d9e4a5 100644 --- a/languages/fr-FR/Import.multids +++ b/languages/fr-FR/Import.multids @@ -1,5 +1,6 @@ title: $:/language/Import/ +Imported: Les tiddlers suivants ont été importés : Listing/Cancel/Caption: Annuler Listing/Hint: Les tiddlers suivants sont prêts pour l'importation : Listing/Import/Caption: Importer From 98b6a45044b4b2842c83962af661cb7d583d627b Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 15:00:25 +0100 Subject: [PATCH 115/242] fr-FR translations for strings related to Internal Javascript Errors --- languages/fr-FR/Misc.multids | 2 ++ 1 file changed, 2 insertions(+) diff --git a/languages/fr-FR/Misc.multids b/languages/fr-FR/Misc.multids index 939c16e2d..f7a9b338a 100644 --- a/languages/fr-FR/Misc.multids +++ b/languages/fr-FR/Misc.multids @@ -18,6 +18,8 @@ Encryption/Password: Mot de passe Encryption/RepeatPassword: Répéter le mot de passe Encryption/PasswordNoMatch: Les mots de passe ne correspondent pas Encryption/SetPassword: Définir ce mot de passe +InternalJavaScriptError/Title: Erreur interne JavaScript +InternalJavaScriptError/Hint: C'est assez embarrassant. Il est recommandé de rafraîchir l'affichage de votre navigateur InvalidFieldName: Caractères illicites dans le nom du champ « <$text text=<<fieldName>>/> ». Les champs ne peuvent contenir que des lettres minuscules non accentuées et les caractères souligné (`_`), tiret (`-`) et point (`.`) MissingTiddler/Hint: Le tiddler « <$text text=<<currentTiddler>>/> » est manquant - cliquez sur {{$:/core/images/edit-button}} pour le créer RecentChanges/DateFormat: DD MMM YYYY From 8c2ecca7e69b5cbb88045364af62b75c7db28d7b Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 15:03:56 +0100 Subject: [PATCH 116/242] fr-FR translations for strings related to search matches --- languages/fr-FR/Search.multids | 3 +++ 1 file changed, 3 insertions(+) diff --git a/languages/fr-FR/Search.multids b/languages/fr-FR/Search.multids index cd10f07d7..e85858fc1 100644 --- a/languages/fr-FR/Search.multids +++ b/languages/fr-FR/Search.multids @@ -4,6 +4,9 @@ Filter/Caption: Filtres Filter/Hint: Recherche via une combinaison de [[filtres|http://tiddlywiki.com/static/Filters.html]] Filter/Matches: //<small><<resultCount>> correspondances</small>// Matches: //<small><<resultCount>> correspondances</small>// +Matches/All: Toutes les correspondances : +Matches/Title: Correspondances sur les titres : +Search: Recherche Shadows/Caption: Shadows Shadows/Hint: Recherche parmi les tiddlers //shadow// Shadows/Matches: //<small><<resultCount>> correspondances</small>// From e209254bc661307d7c6c2f17d2de7606b8ded111 Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 15:12:32 +0100 Subject: [PATCH 117/242] More fr-FR translations for strings related to plugins --- languages/fr-FR/Misc.multids | 3 +++ 1 file changed, 3 insertions(+) diff --git a/languages/fr-FR/Misc.multids b/languages/fr-FR/Misc.multids index f7a9b338a..e1baff7e4 100644 --- a/languages/fr-FR/Misc.multids +++ b/languages/fr-FR/Misc.multids @@ -22,6 +22,9 @@ InternalJavaScriptError/Title: Erreur interne JavaScript InternalJavaScriptError/Hint: C'est assez embarrassant. Il est recommandé de rafraîchir l'affichage de votre navigateur InvalidFieldName: Caractères illicites dans le nom du champ « <$text text=<<fieldName>>/> ». Les champs ne peuvent contenir que des lettres minuscules non accentuées et les caractères souligné (`_`), tiret (`-`) et point (`.`) MissingTiddler/Hint: Le tiddler « <$text text=<<currentTiddler>>/> » est manquant - cliquez sur {{$:/core/images/edit-button}} pour le créer +OfficialPluginLibrary: Bibliothèque officielle des plugins ~TiddlyWiki +OfficialPluginLibrary/Hint: La bibliothèque officielle des plugins ~TiddlyWiki sur tiddlywiki.com. Plugins, thèmes et packs pour les différentes langues sont maintenus par l'équipe responsable du noyau. +PluginReloadWarning: Merci d'enregistrer {{$:/core/ui/Buttons/save-wiki}} et de recharger {{$:/core/ui/Buttons/refresh}} pour que les changements apportés aux plugins prennent effet RecentChanges/DateFormat: DD MMM YYYY SystemTiddler/Tooltip: Ceci est un tiddler système TagManager/Colour/Heading: Couleur From b0c9dcf35315c093a46b814594b6ce64b55ffa6b Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 15:42:04 +0100 Subject: [PATCH 118/242] fr-FR translations for strings related to Performance Instrumentation --- languages/fr-FR/ControlPanel.multids | 3 +++ 1 file changed, 3 insertions(+) diff --git a/languages/fr-FR/ControlPanel.multids b/languages/fr-FR/ControlPanel.multids index 36c9cfa6e..b72e24e0a 100644 --- a/languages/fr-FR/ControlPanel.multids +++ b/languages/fr-FR/ControlPanel.multids @@ -85,6 +85,9 @@ Settings/NavigationHistory/Caption: Historique de navigation Settings/NavigationHistory/Hint: Mise à jour de l'historique de navigation du navigateur lorsqu'on pointe vers un tiddler : Settings/NavigationHistory/No/Description: Ne pas mettre à jour l'historique Settings/NavigationHistory/Yes/Description: Mettre à jour l'historique +Settings/PerformanceInstrumentation/Caption: Instrumentation de la Performance +Settings/PerformanceInstrumentation/Hint: Affiche des statistiques de performance dans la console de développement du navigateur. Nécessite de recharger la page pour prendre effet. +Settings/PerformanceInstrumentation/Description: Active l'instrumentation de la performance Settings/ToolbarButtons/Caption: Boutons de la barre d'outils Settings/ToolbarButtons/Hint: Apparence par défaut des boutons sur la barre d'outils : Settings/ToolbarButtons/Icons/Description: Afficher l'icône From 65f891dcdf6a1a6c9de10432f4c17d7c191899ae Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 15:49:34 +0100 Subject: [PATCH 119/242] fr-FR translation for tidder date format --- languages/fr-FR/Misc.multids | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/fr-FR/Misc.multids b/languages/fr-FR/Misc.multids index e1baff7e4..0c32ff794 100644 --- a/languages/fr-FR/Misc.multids +++ b/languages/fr-FR/Misc.multids @@ -31,4 +31,5 @@ TagManager/Colour/Heading: Couleur TagManager/Icon/Heading: Icône TagManager/Info/Heading: Info TagManager/Tag/Heading: Tag +Tiddler/DateFormat: DD MMM YYYY à hhhmm UnsavedChangesWarning: Vos dernières modifications n'ont pas été sauvegardées dans votre TiddlyWiki From 4a2fc8cbc0158190a822152c3e18c088c08cf9a6 Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 15:55:35 +0100 Subject: [PATCH 120/242] fr-FR translation of the clarification for the password command --- languages/fr-FR/Help/password.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/fr-FR/Help/password.tid b/languages/fr-FR/Help/password.tid index 4bd6b350b..4a49f0aa0 100644 --- a/languages/fr-FR/Help/password.tid +++ b/languages/fr-FR/Help/password.tid @@ -6,4 +6,5 @@ Fournit un mot de passe pour les prochaines opérations de chiffrement. ``` --password <motdepasse> ``` +''Note'' : Cette commande n'est pas appropriée pour servir un TiddlyWiki protégé par mot de passe. Pour cela, utilisez plutôt l'option password de la [[ServerCommand|commande Server]]. From d48deefa91604bc585da5e9e6f9e6bdb0b91c643 Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 16:07:19 +0100 Subject: [PATCH 121/242] fr-FR translation for the Lazy Loading warning about external text --- languages/fr-FR/Misc.multids | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/fr-FR/Misc.multids b/languages/fr-FR/Misc.multids index 0c32ff794..7c2e08259 100644 --- a/languages/fr-FR/Misc.multids +++ b/languages/fr-FR/Misc.multids @@ -21,6 +21,7 @@ Encryption/SetPassword: Définir ce mot de passe InternalJavaScriptError/Title: Erreur interne JavaScript InternalJavaScriptError/Hint: C'est assez embarrassant. Il est recommandé de rafraîchir l'affichage de votre navigateur InvalidFieldName: Caractères illicites dans le nom du champ « <$text text=<<fieldName>>/> ». Les champs ne peuvent contenir que des lettres minuscules non accentuées et les caractères souligné (`_`), tiret (`-`) et point (`.`) +LazyLoadingWarning: <p>Chargement d'un texte externe ''<$text text={{!!_canonical_uri}}/>''</p><p>Si ce message ne disparaît pas, il se peut que vous utilisiez un navigateur qui n'accepte pas les textes externes dans cette configuration. Voir http://tiddlywiki.com/#ExternalText</p> MissingTiddler/Hint: Le tiddler « <$text text=<<currentTiddler>>/> » est manquant - cliquez sur {{$:/core/images/edit-button}} pour le créer OfficialPluginLibrary: Bibliothèque officielle des plugins ~TiddlyWiki OfficialPluginLibrary/Hint: La bibliothèque officielle des plugins ~TiddlyWiki sur tiddlywiki.com. Plugins, thèmes et packs pour les différentes langues sont maintenus par l'équipe responsable du noyau. From 1aa4cb5f5507846712cb0c42b63a5f9407d2eb17 Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 18:01:33 +0100 Subject: [PATCH 122/242] fr-FR translation of the warning about loading TW Classic --- languages/fr-FR/Misc.multids | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/fr-FR/Misc.multids b/languages/fr-FR/Misc.multids index 7c2e08259..9c63d5d43 100644 --- a/languages/fr-FR/Misc.multids +++ b/languages/fr-FR/Misc.multids @@ -1,5 +1,6 @@ title: $:/language/ +AboveStory/ClassicPlugin/Warning: On dirait que vous essayez de charger un plugin conçu pour ~TiddlyWiki Classic. Merci de noter que [[ces plugins ne fonctionnent pas avec TiddlyWiki version 5.x.x|http://tiddlywiki.com/#TiddlyWikiClassic]]. Plugins ~TiddlyWiki Classic détectés : BinaryWarning/Prompt: Ce tiddler contient des données binaires ClassicWarning/Hint: Ce tiddler est écrit au format TiddlyWiki Classic, qui n'est pas entièrement compatible avec TiddlyWiki version 5. Pour en savoir plus, rendez-vous à l'adresse http://tiddlywiki.com/static/Upgrading.html. ClassicWarning/Upgrade/Caption: Mettre à jour From 05f0bea61fe272627fa0b632e04849e2f67a2c1b Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 18:17:41 +0100 Subject: [PATCH 123/242] fr-FR translation for updates to the help for the rendertiddler command --- languages/fr-FR/Help/rendertiddler.tid | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/languages/fr-FR/Help/rendertiddler.tid b/languages/fr-FR/Help/rendertiddler.tid index e295ea36c..9bd995727 100644 --- a/languages/fr-FR/Help/rendertiddler.tid +++ b/languages/fr-FR/Help/rendertiddler.tid @@ -1,10 +1,12 @@ title: $:/language/Help/rendertiddler description: Enregistre un tiddler avec un rendu correspondant au type de contenu spécifié -Enregistre un tiddler sous le chemin de fichier indiqué, avec un rendu correspondant au type de contenu (ContentType) spécifié — par défaut `text/html` : +Enregistre un tiddler sous le chemin de fichier indiqué, avec un rendu correspondant au type de contenu (ContentType) spécifié — par défaut `text/html`. Un tiddler modèle (template) peut être indiqué optionnellement. Dans ce cas, c'est le tiddler modèle qui est rendu, avec la variable "currentTiddler" initialisée avec le tiddler dont le titre est donné en valeur du premier paramètre. ``` ---rendertiddler <titre> <chemindufichier> [<type>] +--rendertiddler <titre> <chemindufichier> [<type>] [<modèle>] ``` +Par défaut, le nom de fichier est résolu relativement au sous-répertoire `output` du répertoire de l'édition. La commande `--output` peut servir à rediriger la sortie vers un répertoire différent. + Les répertoires présents dans le chemin du fichier et qui n'existent pas encore sont créés automatiquement. \ No newline at end of file From 9e03252e01809a4092dda7d4e97f3b9ef9c7ee8e Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 18:27:34 +0100 Subject: [PATCH 124/242] fr-FR translation of updates to the help of the savetiddlers command --- languages/fr-FR/Help/savetiddlers.tid | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/languages/fr-FR/Help/savetiddlers.tid b/languages/fr-FR/Help/savetiddlers.tid index bc58ef596..7ce1542de 100644 --- a/languages/fr-FR/Help/savetiddlers.tid +++ b/languages/fr-FR/Help/savetiddlers.tid @@ -4,9 +4,11 @@ description: Enregistre un groupe de tiddlers vers un répertoire Enregistre un groupe de tiddlers vers le chemin spécifié, sous leur forme brute, texte ou binaire. ``` ---savetiddlers <filtre> <chemin-de-répertoire> +--savetiddlers <filtre> <chemin-de-répertoire> ["noclean"] ``` -Par défaut, le répertoire de sortie est calculé relativement au sous-répertoire `output` du répertoire //edition//. La commande `--output` peut servir à diriger la sortie vers un répertoire différent. +Par défaut, le répertoire de sortie est calculé relativement au sous-répertoire `output` du répertoire de l'édition. La commande `--output` peut servir à diriger la sortie vers un répertoire différent. + +Les fichiers présents dans le répertoire de sortie sont supprimés avant d'enregistrer les fichiers des tiddlers spécifiés par le filtre. Pour empêcher cette suppression, ajouter le drapeau ''noclean''. Les éventuels répertoires manquants dans le chemin spécifié sont créés automatiquement. From 85018479425f8f25c7cf1dd1bb5cf58e12986687 Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 18:37:51 +0100 Subject: [PATCH 125/242] Typo in Parsing hint --- languages/fr-FR/ControlPanel.multids | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/languages/fr-FR/ControlPanel.multids b/languages/fr-FR/ControlPanel.multids index b72e24e0a..3849241a4 100644 --- a/languages/fr-FR/ControlPanel.multids +++ b/languages/fr-FR/ControlPanel.multids @@ -57,6 +57,11 @@ Plugins/Plugins/Hint: Plugins Plugins/Reinstall: réinstalle Plugins/Themes/Caption: Thèmes Plugins/Themes/Hint: Plugins de thème +Parsing/Caption: Parsing +Parsing/Hint: Ici, vous pouvez désactiver globalement des règles individuelles de parsing du wiki. Soyez prudent, car désactiver certaines règles peuvent empêcher ~TiddlyWiki de fonctionner correctement (vous pouvez revenir au parsing par défaut avec le [[safe mode|http://tiddlywiki.com/#SafeMode]] ) +Parsing/Block/Caption: Block Parse Rules +Parsing/Inline/Caption: Inline Parse Rules +Parsing/Pragma/Caption: Pragma Parse Rules Saving/Caption: Sauvegarde Saving/Heading: Sauvegarde Saving/TiddlySpot/Advanced/Heading: Paramètres avancés From 8d2bdaa33854bb94cba446d04d84b81f358d68ed Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 18:40:06 +0100 Subject: [PATCH 126/242] fr-FR translation of Parsing hint --- core/language/en-GB/ControlPanel.multids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/language/en-GB/ControlPanel.multids b/core/language/en-GB/ControlPanel.multids index f6f09f5b0..abd4e9ae7 100644 --- a/core/language/en-GB/ControlPanel.multids +++ b/core/language/en-GB/ControlPanel.multids @@ -39,7 +39,7 @@ Palette/HideEditor/Caption: hide editor Palette/Prompt: Current palette: Palette/ShowEditor/Caption: show editor Parsing/Caption: Parsing -Parsing/Hint: Here you can globally disable individual wiki parser rules. Take care as disabling some paser rules can prevent ~TiddlyWiki functioning correctly (you can restore normal operation with [[safe mode|http://tiddlywiki.com/#SafeMode]] ) +Parsing/Hint: Here you can globally disable individual wiki parser rules. Take care as disabling some parser rules can prevent ~TiddlyWiki functioning correctly (you can restore normal operation with [[safe mode|http://tiddlywiki.com/#SafeMode]] ) Parsing/Block/Caption: Block Parse Rules Parsing/Inline/Caption: Inline Parse Rules Parsing/Pragma/Caption: Pragma Parse Rules From d0c33ec3d2f7f5cbf83d5ed109799a2c2febb3da Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 18:45:57 +0100 Subject: [PATCH 127/242] fr-FR translation of strings related to CamelCase enabling/disabling --- languages/fr-FR/ControlPanel.multids | 3 +++ 1 file changed, 3 insertions(+) diff --git a/languages/fr-FR/ControlPanel.multids b/languages/fr-FR/ControlPanel.multids index 3849241a4..e99c82912 100644 --- a/languages/fr-FR/ControlPanel.multids +++ b/languages/fr-FR/ControlPanel.multids @@ -79,6 +79,9 @@ Settings/AutoSave/Caption: Sauvegarde automatique Settings/AutoSave/Disabled/Description: Pas de sauvegarde automatique des modifications Settings/AutoSave/Enabled/Description: Sauvegarde automatique des modifications Settings/AutoSave/Hint: Sauvegarde automatique des modifications pendant l'édition +Settings/CamelCase/Caption: Liens Wiki //Camel Case// +Settings/CamelCase/Hint: Vous pouvez désactiver globalement les liens créés à partir des expressions de la forme ~CamelCase. Pour que ce paramètres prenne effet, il est nécessaire de recharger le wiki +Settings/CamelCase/Description: Active les liens automatiques sur les expressions de la forme ~CamelCase Settings/Caption: Paramétrage Settings/Hint: Ce paramétrage vous permet de personnaliser le comportement de TiddlyWiki. Settings/NavigationAddressBar/Caption: Barre d'adresse pendant la navigation From 7dbb4240f1ae1c416a6a033f3fa2c1ebc4904c25 Mon Sep 17 00:00:00 2001 From: Xavier Cazin <xcazin@immateriel.fr> Date: Sat, 21 Nov 2015 18:50:25 +0100 Subject: [PATCH 128/242] fr-FR translation of strings related to Toolbar Button Style --- languages/fr-FR/ControlPanel.multids | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/languages/fr-FR/ControlPanel.multids b/languages/fr-FR/ControlPanel.multids index e99c82912..ce8982429 100644 --- a/languages/fr-FR/ControlPanel.multids +++ b/languages/fr-FR/ControlPanel.multids @@ -96,6 +96,11 @@ Settings/NavigationHistory/Yes/Description: Mettre à jour l'historique Settings/PerformanceInstrumentation/Caption: Instrumentation de la Performance Settings/PerformanceInstrumentation/Hint: Affiche des statistiques de performance dans la console de développement du navigateur. Nécessite de recharger la page pour prendre effet. Settings/PerformanceInstrumentation/Description: Active l'instrumentation de la performance +Settings/ToolbarButtonStyle/Caption: Style des boutons de la barre d'outils +Settings/ToolbarButtonStyle/Hint: Choix du style des boutons de la barre d'outils : +Settings/ToolbarButtonStyle/Styles/Borderless: Sans bordure +Settings/ToolbarButtonStyle/Styles/Boxed: Avec une bordure +Settings/ToolbarButtonStyle/Styles/Rounded: Arrondis Settings/ToolbarButtons/Caption: Boutons de la barre d'outils Settings/ToolbarButtons/Hint: Apparence par défaut des boutons sur la barre d'outils : Settings/ToolbarButtons/Icons/Description: Afficher l'icône From 6c89b273282f4b06be77001eb2a2fcb0bc591826 Mon Sep 17 00:00:00 2001 From: Jens <jho1965us@gmail.com> Date: Sun, 22 Nov 2015 13:53:59 +0100 Subject: [PATCH 129/242] Changed Transclusion from html to TidlerWiki syntax in order to force new tab when following With the html syntax when you go back after following the link knowledges of open tiddlers is lost. Not sure if there should also be feature request for TiddlerWiki to store knowledge of open tiddlers in browser history. --- editions/tw5.com/tiddlers/concepts/Transclusion.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/concepts/Transclusion.tid b/editions/tw5.com/tiddlers/concepts/Transclusion.tid index b1f9e48d5..e87032b29 100644 --- a/editions/tw5.com/tiddlers/concepts/Transclusion.tid +++ b/editions/tw5.com/tiddlers/concepts/Transclusion.tid @@ -3,7 +3,7 @@ modified: 20141130195444237 tags: Concepts title: Transclusion -<a href="http://en.wikipedia.org/wiki/Transclusion">Transclusion</a> is the process of referencing one tiddler "A" from another tiddler "B" such that the content of "A" appears to be a part of "B". +[[Transclusion|http://en.wikipedia.org/wiki/Transclusion]] is the process of referencing one tiddler "A" from another tiddler "B" such that the content of "A" appears to be a part of "B". Copying and pasting content creates multiple copies of the same content in several different places. With transclusion, there can be a single copy and a special instruction in "B" which indicates the point at which content should be inserted from tiddler "A". From 4e0a5c862cda39d4648679e5091157bc8827f35c Mon Sep 17 00:00:00 2001 From: Tobias Beer <beertobias@gmail.com> Date: Wed, 25 Nov 2015 15:22:15 +0100 Subject: [PATCH 130/242] fix broken template: core/ui/EditTemplate/shadow --- core/ui/EditTemplate/shadow.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/ui/EditTemplate/shadow.tid b/core/ui/EditTemplate/shadow.tid index d80c474f6..7bdff4e27 100644 --- a/core/ui/EditTemplate/shadow.tid +++ b/core/ui/EditTemplate/shadow.tid @@ -32,7 +32,7 @@ tags: $:/tags/EditTemplate <<lingo OverriddenWarning>> </div> +</$set> </$list> -</$list> -</$list> +</$list> \ No newline at end of file From aae1bf9f80ddc53e85c16eac56cba577703d0967 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 17 Nov 2015 21:40:43 +0000 Subject: [PATCH 131/242] Blog edition: Add classes for the static menu --- plugins/tiddlywiki/blog/templates/menu.tid | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/tiddlywiki/blog/templates/menu.tid b/plugins/tiddlywiki/blog/templates/menu.tid index c59582823..9ceb71656 100644 --- a/plugins/tiddlywiki/blog/templates/menu.tid +++ b/plugins/tiddlywiki/blog/templates/menu.tid @@ -1,6 +1,8 @@ title: $:/plugins/tiddlywiki/blog/templates/menu -<div> +<div class="tc-blog-menu"> + +<div class="tc-blog-menu-item"> <a href="../index.html"> @@ -9,3 +11,5 @@ title: $:/plugins/tiddlywiki/blog/templates/menu </a> </div> + +</div> From 4a8511c6f21ed0123bf790e668f153db75618bce Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 25 Nov 2015 15:32:50 +0000 Subject: [PATCH 132/242] Added file and folder icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These icons are skinnier than the regular icons; I found I couldn’t produce sufficiently detailed images with the regular line width. --- core/images/file.tid | 14 ++++++++++++++ core/images/folder.tid | 9 +++++++++ 2 files changed, 23 insertions(+) create mode 100644 core/images/file.tid create mode 100644 core/images/folder.tid diff --git a/core/images/file.tid b/core/images/file.tid new file mode 100644 index 000000000..bc91d4208 --- /dev/null +++ b/core/images/file.tid @@ -0,0 +1,14 @@ +title: $:/core/images/file +tags: $:/tags/Image + +<svg class="tc-image-file tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"> + <g fill-rule="nonzero"> + <path d="M111.96811,30.5 L112,30.5 L112,119.999079 C112,124.417866 108.419113,128 104.000754,128 L23.9992458,128 C19.5813843,128 16,124.417687 16,119.999079 L16,8.00092105 C16,3.58213437 19.5808867,0 23.9992458,0 L81,0 L81,0.0201838424 C83.1589869,-0.071534047 85.3482153,0.707077645 86.9982489,2.35711116 L109.625176,24.9840387 C111.151676,26.510538 111.932942,28.4998414 111.96811,30.5 L111.96811,30.5 Z M81,8 L24,8 L24,120 L104,120 L104,30.5 L89.0003461,30.5 C84.5818769,30.5 81,26.9216269 81,22.4996539 L81,8 Z"></path> + <rect x="32" y="36" width="64" height="8" rx="8"></rect> + <rect x="32" y="52" width="64" height="8" rx="8"></rect> + <rect x="32" y="68" width="64" height="8" rx="8"></rect> + <rect x="32" y="84" width="64" height="8" rx="8"></rect> + <rect x="32" y="100" width="64" height="8" rx="8"></rect> + <rect x="32" y="20" width="40" height="8" rx="8"></rect> + </g> +</svg> \ No newline at end of file diff --git a/core/images/folder.tid b/core/images/folder.tid new file mode 100644 index 000000000..354e6e633 --- /dev/null +++ b/core/images/folder.tid @@ -0,0 +1,9 @@ +title: $:/core/images/folder +tags: $:/tags/Image + +<svg class="tc-image-folder tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"> + <g fill-rule="evenodd"> + <path d="M55.6943257,128.000004 L7.99859666,128.000004 C3.5810937,128.000004 0,124.413822 0,119.996384 L0,48.0036243 C0,43.5833471 3.58387508,40.0000044 7.99859666,40.0000044 L16,40.0000044 L16,31.9999914 C16,27.5817181 19.5783731,24 24.0003461,24 L55.9996539,24 C60.4181231,24 64,27.5800761 64,31.9999914 L64,40.0000044 L104.001403,40.0000044 C108.418906,40.0000044 112,43.5861868 112,48.0036243 L112,59.8298353 L104,59.7475921 L104,51.9994189 C104,49.7887607 102.207895,48.0000044 99.9972215,48.0000044 L56,48.0000044 L56,36.0000255 C56,33.7898932 54.2072328,32 51.9957423,32 L28.0042577,32 C25.7890275,32 24,33.7908724 24,36.0000255 L24,48.0000044 L12.0027785,48.0000044 C9.78987688,48.0000044 8,49.7906032 8,51.9994189 L8,116.00059 C8,118.211248 9.79210499,120.000004 12.0027785,120.000004 L58.7630167,120.000004 L55.6943257,128.000004 L55.6943257,128.000004 Z"></path> + <path d="M23.8728955,55.5 L119.875702,55.5 C124.293205,55.5 126.87957,59.5532655 125.650111,64.5630007 L112.305967,118.936999 C111.077582,123.942356 106.497904,128 102.083183,128 L6.08037597,128 C1.66287302,128 -0.923492342,123.946735 0.305967145,118.936999 L13.650111,64.5630007 C14.878496,59.5576436 19.4581739,55.5 23.8728955,55.5 L23.8728955,55.5 L23.8728955,55.5 Z M25.6530124,64 L113.647455,64 C115.858129,64 117.151473,66.0930612 116.538306,68.6662267 L105.417772,115.333773 C104.803671,117.910859 102.515967,120 100.303066,120 L12.3086228,120 C10.0979492,120 8.8046054,117.906939 9.41777189,115.333773 L20.5383062,68.6662267 C21.1524069,66.0891409 23.4401107,64 25.6530124,64 L25.6530124,64 L25.6530124,64 Z"></path> + </g> +</svg> \ No newline at end of file From c2105de49c0eacaead3244b628f3c64301d3420e Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sun, 6 Dec 2015 19:11:41 +0000 Subject: [PATCH 133/242] Remove modifier/modified/revision fields from #2037 --- editions/tw5.com/tiddlers/filters/allafter.tid | 3 --- editions/tw5.com/tiddlers/filters/allbefore.tid | 3 --- editions/tw5.com/tiddlers/filters/append.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/allafter.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/allbefore.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/append.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/move.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/prepend.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/putafter.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/putbefore.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/putfirst.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/putlast.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/remove.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/replace.tid | 3 --- editions/tw5.com/tiddlers/filters/examples/sortby.tid | 3 --- editions/tw5.com/tiddlers/filters/move.tid | 3 --- editions/tw5.com/tiddlers/filters/prepend.tid | 3 --- editions/tw5.com/tiddlers/filters/putafter.tid | 3 --- editions/tw5.com/tiddlers/filters/putbefore.tid | 5 ----- editions/tw5.com/tiddlers/filters/putfirst.tid | 3 --- editions/tw5.com/tiddlers/filters/putlast.tid | 3 --- editions/tw5.com/tiddlers/filters/remove.tid | 3 --- editions/tw5.com/tiddlers/filters/replace.tid | 3 --- editions/tw5.com/tiddlers/filters/sortby.tid | 3 --- editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid | 3 --- editions/tw5.com/tiddlers/widgets/ListopsData.tid | 2 -- .../tiddlers/widgets/The Extended Listops Filters.tid | 2 -- 27 files changed, 81 deletions(-) diff --git a/editions/tw5.com/tiddlers/filters/allafter.tid b/editions/tw5.com/tiddlers/filters/allafter.tid index bdb21a919..5041995b5 100644 --- a/editions/tw5.com/tiddlers/filters/allafter.tid +++ b/editions/tw5.com/tiddlers/filters/allafter.tid @@ -1,15 +1,12 @@ caption: allafter created: 20151017145021839 -creator: matabele modified: 20151108051523860 -modifier: matabele op-input: a list of items op-output: all items after the marker op-parameter: the list item to be used as a marker op-parameter-name: marker op-purpose: discard all items except those after the marker op-suffix: specifying a suffix ('include') will include the marker in the output -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: allafter Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/allbefore.tid b/editions/tw5.com/tiddlers/filters/allbefore.tid index 51c176747..71196eec2 100644 --- a/editions/tw5.com/tiddlers/filters/allbefore.tid +++ b/editions/tw5.com/tiddlers/filters/allbefore.tid @@ -1,15 +1,12 @@ caption: allbefore created: 20151017145131857 -creator: matabele modified: 20151108051507578 -modifier: matabele op-input: a list of items op-output: all items before the marker op-parameter: the list item to be used as a marker op-parameter-name: marker op-purpose: discard all items except those before the marker op-suffix: specifying a suffix ('include') will include the marker in the output -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: allbefore Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/append.tid b/editions/tw5.com/tiddlers/filters/append.tid index c481a790e..881dfc257 100644 --- a/editions/tw5.com/tiddlers/filters/append.tid +++ b/editions/tw5.com/tiddlers/filters/append.tid @@ -1,8 +1,6 @@ caption: append created: 20151017145358368 -creator: matabele modified: 20151108051540981 -modifier: matabele op-input: a list of items op-neg-output: a list with items appended from the tail of the operand array op-output: a list with items appended from the head of the operand array @@ -10,7 +8,6 @@ op-parameter: the array of items to be appended to the tail of the list op-parameter-name: list op-purpose: append a range of items from an array to the list op-suffix: an integer N, defaulting to all -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: append Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/allafter.tid b/editions/tw5.com/tiddlers/filters/examples/allafter.tid index 62f29dbc2..e1224b56b 100644 --- a/editions/tw5.com/tiddlers/filters/examples/allafter.tid +++ b/editions/tw5.com/tiddlers/filters/examples/allafter.tid @@ -1,8 +1,5 @@ created: 20151022123929297 -creator: matabele modified: 20151108080543606 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[allafter Operator]] title: allafter Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/allbefore.tid b/editions/tw5.com/tiddlers/filters/examples/allbefore.tid index 4a125df86..01313dbec 100644 --- a/editions/tw5.com/tiddlers/filters/examples/allbefore.tid +++ b/editions/tw5.com/tiddlers/filters/examples/allbefore.tid @@ -1,8 +1,5 @@ created: 20151017150902487 -creator: matabele modified: 20151108051438263 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[allbefore Operator]] title: allbefore Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/append.tid b/editions/tw5.com/tiddlers/filters/examples/append.tid index 3eddb92de..33c5c2dc4 100644 --- a/editions/tw5.com/tiddlers/filters/examples/append.tid +++ b/editions/tw5.com/tiddlers/filters/examples/append.tid @@ -1,8 +1,5 @@ created: 20151017150942725 -creator: matabele modified: 20151108051557748 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[append Operator]] title: append Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/move.tid b/editions/tw5.com/tiddlers/filters/examples/move.tid index a7c90e9ef..367f3f0c3 100644 --- a/editions/tw5.com/tiddlers/filters/examples/move.tid +++ b/editions/tw5.com/tiddlers/filters/examples/move.tid @@ -1,8 +1,5 @@ created: 20151022123633433 -creator: matabele modified: 20151108051643871 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[move Operator]] title: move Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/prepend.tid b/editions/tw5.com/tiddlers/filters/examples/prepend.tid index d2dceced5..0c66d1002 100644 --- a/editions/tw5.com/tiddlers/filters/examples/prepend.tid +++ b/editions/tw5.com/tiddlers/filters/examples/prepend.tid @@ -1,8 +1,5 @@ created: 20151017151508135 -creator: matabele modified: 20151108051743531 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[prepend Operator]] title: prepend Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/putafter.tid b/editions/tw5.com/tiddlers/filters/examples/putafter.tid index 0241e0a32..e433ee250 100644 --- a/editions/tw5.com/tiddlers/filters/examples/putafter.tid +++ b/editions/tw5.com/tiddlers/filters/examples/putafter.tid @@ -1,8 +1,5 @@ created: 20151017151905558 -creator: matabele modified: 20151108051825288 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[putafter Operator]] title: putafter Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/putbefore.tid b/editions/tw5.com/tiddlers/filters/examples/putbefore.tid index 467cc09e6..321d7605d 100644 --- a/editions/tw5.com/tiddlers/filters/examples/putbefore.tid +++ b/editions/tw5.com/tiddlers/filters/examples/putbefore.tid @@ -1,8 +1,5 @@ created: 20151022142602628 -creator: matabele modified: 20151108051906935 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[putbefore Operator]] title: putbefore Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/putfirst.tid b/editions/tw5.com/tiddlers/filters/examples/putfirst.tid index 7cbc0aece..46684366b 100644 --- a/editions/tw5.com/tiddlers/filters/examples/putfirst.tid +++ b/editions/tw5.com/tiddlers/filters/examples/putfirst.tid @@ -1,8 +1,5 @@ created: 20151017152847899 -creator: matabele modified: 20151108051943204 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[putfirst Operator]] title: putfirst Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/putlast.tid b/editions/tw5.com/tiddlers/filters/examples/putlast.tid index c31e28ced..981042c8b 100644 --- a/editions/tw5.com/tiddlers/filters/examples/putlast.tid +++ b/editions/tw5.com/tiddlers/filters/examples/putlast.tid @@ -1,8 +1,5 @@ created: 20151017153037776 -creator: matabele modified: 20151108052020761 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[putlast Operator]] title: putlast Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/remove.tid b/editions/tw5.com/tiddlers/filters/examples/remove.tid index aa5755d10..b402fc04f 100644 --- a/editions/tw5.com/tiddlers/filters/examples/remove.tid +++ b/editions/tw5.com/tiddlers/filters/examples/remove.tid @@ -1,8 +1,5 @@ created: 20151018054129966 -creator: matabele modified: 20151108052052606 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[remove Operator]] title: remove Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/replace.tid b/editions/tw5.com/tiddlers/filters/examples/replace.tid index 0e660be3b..3f1d024a7 100644 --- a/editions/tw5.com/tiddlers/filters/examples/replace.tid +++ b/editions/tw5.com/tiddlers/filters/examples/replace.tid @@ -1,8 +1,5 @@ created: 20151017153634099 -creator: matabele modified: 20151108052127454 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[replace Operator]] title: replace Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/examples/sortby.tid b/editions/tw5.com/tiddlers/filters/examples/sortby.tid index d69147ef7..83b94a3c9 100644 --- a/editions/tw5.com/tiddlers/filters/examples/sortby.tid +++ b/editions/tw5.com/tiddlers/filters/examples/sortby.tid @@ -1,8 +1,5 @@ created: 20151018123433917 -creator: matabele modified: 20151108052158811 -modifier: matabele -revision: 0 tags: [[Operator Examples]] [[sortby Operator]] title: sortby Operator (Examples) type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/move.tid b/editions/tw5.com/tiddlers/filters/move.tid index 6007c6da3..313e3722e 100644 --- a/editions/tw5.com/tiddlers/filters/move.tid +++ b/editions/tw5.com/tiddlers/filters/move.tid @@ -1,15 +1,12 @@ caption: move created: 20151022123413501 -creator: matabele modified: 20151108082424017 -modifier: matabele op-input: a list of items op-output: re-ordered list of items op-parameter: the list item to be used as a marker op-parameter-name: marker op-purpose: move marker N places in the list op-suffix: an integer N, defaulting to 1 -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: move Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/prepend.tid b/editions/tw5.com/tiddlers/filters/prepend.tid index e45c1b0b1..5f6cc102d 100644 --- a/editions/tw5.com/tiddlers/filters/prepend.tid +++ b/editions/tw5.com/tiddlers/filters/prepend.tid @@ -1,8 +1,6 @@ caption: prepend created: 20151017145439292 -creator: matabele modified: 20151108051701587 -modifier: matabele op-input: a list of items op-neg-output: a list with items prepended from the tail of the operand array op-output: a list with items prepended from the head of the operand array @@ -10,7 +8,6 @@ op-parameter: the array of items to be prepended to the head of the list op-parameter-name: list op-purpose: prepend a range of items from an array to the list op-suffix: an integer N, defaulting to all -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: prepend Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/putafter.tid b/editions/tw5.com/tiddlers/filters/putafter.tid index dd41a4c61..771a31687 100644 --- a/editions/tw5.com/tiddlers/filters/putafter.tid +++ b/editions/tw5.com/tiddlers/filters/putafter.tid @@ -1,15 +1,12 @@ caption: putafter created: 20151017144307862 -creator: matabele modified: 20151108051805137 -modifier: matabele op-input: a list of items op-output: re-ordered list of items op-parameter: the list item to be used as a marker op-parameter-name: marker op-purpose: move N trailing items after the marker op-suffix: an integer N, defaulting to 1 -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: putafter Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/putbefore.tid b/editions/tw5.com/tiddlers/filters/putbefore.tid index bf14b29eb..3c4441abc 100644 --- a/editions/tw5.com/tiddlers/filters/putbefore.tid +++ b/editions/tw5.com/tiddlers/filters/putbefore.tid @@ -1,15 +1,10 @@ caption: putbefore -created: 20140410103123179 -creator: matabele -modified: 20151108051842788 -modifier: matabele op-input: a [[selection of titles|Title Selection]] op-output: the first <<.place N>> input titles op-parameter: an integer, defaulting to 1 op-parameter-name: marker op-purpose: move N trailing items before the marker op-suffix: an integer N, defaulting to 1 -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: putbefore Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/putfirst.tid b/editions/tw5.com/tiddlers/filters/putfirst.tid index ed07a6ce2..3cf8f3dc9 100644 --- a/editions/tw5.com/tiddlers/filters/putfirst.tid +++ b/editions/tw5.com/tiddlers/filters/putfirst.tid @@ -1,14 +1,11 @@ caption: putfirst created: 20151017144802884 -creator: matabele modified: 20151108051922934 -modifier: matabele op-input: a list of items op-output: re-ordered list of items op-parameter: ignored op-purpose: move N trailing items to the head of the list op-suffix: an integer N, defaulting to 1 -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: putfirst Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/putlast.tid b/editions/tw5.com/tiddlers/filters/putlast.tid index 828315ec8..d40061f83 100644 --- a/editions/tw5.com/tiddlers/filters/putlast.tid +++ b/editions/tw5.com/tiddlers/filters/putlast.tid @@ -1,14 +1,11 @@ caption: putlast created: 20151017144822139 -creator: matabele modified: 20151108052000425 -modifier: matabele op-input: a list of items op-output: re-ordered list of items op-parameter: ignored op-purpose: move N leading items to the tail of the list op-suffix: an integer N, defaulting to 1 -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: putlast Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/remove.tid b/editions/tw5.com/tiddlers/filters/remove.tid index bc656fae2..172948345 100644 --- a/editions/tw5.com/tiddlers/filters/remove.tid +++ b/editions/tw5.com/tiddlers/filters/remove.tid @@ -1,8 +1,6 @@ caption: remove created: 20151017144531676 -creator: matabele modified: 20151108052035773 -modifier: matabele op-input: a list of items op-neg-output: items removed from current list that appear at the tail of the operand array op-output: items removed from current list that appear at the head of the operand array @@ -11,7 +9,6 @@ op-parameter-name: array op-prefix: causes N items from the end of the array to be removed op-purpose: remove a range of items in an array from the current list op-suffix: an integer N, defaulting to all -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: remove Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/replace.tid b/editions/tw5.com/tiddlers/filters/replace.tid index 48cc4d45c..cda41d6a0 100644 --- a/editions/tw5.com/tiddlers/filters/replace.tid +++ b/editions/tw5.com/tiddlers/filters/replace.tid @@ -1,15 +1,12 @@ caption: replace created: 20151017144531676 -creator: matabele modified: 20151108052110493 -modifier: matabele op-input: a list of items op-output: re-ordered list of items op-parameter: the item to be used as a marker op-parameter-name: marker op-purpose: replace marker with N trailing items op-suffix: an integer N, defaulting to 1 -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: replace Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/filters/sortby.tid b/editions/tw5.com/tiddlers/filters/sortby.tid index 087bd6cef..d6555ae4d 100644 --- a/editions/tw5.com/tiddlers/filters/sortby.tid +++ b/editions/tw5.com/tiddlers/filters/sortby.tid @@ -1,14 +1,11 @@ caption: sortby created: 20151017145021839 -creator: matabele modified: 20151108052142057 -modifier: matabele op-input: a list of items op-output: all items sorted by lookup list op-parameter: a list specifying the order in which to sort the current list op-parameter-name: order op-purpose: sort the current list in the order of the list referenced in the operand -revision: 0 tags: [[Filter Operators]] [[Order Operators]] [[Listops Operators]] title: sortby Operator type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid b/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid index 926a21f15..46968e91b 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid @@ -1,10 +1,7 @@ caption: action-listops created: 20141025120850184 -creator: matabele modified: 20151108075247352 -modifier: matabele myfield: -revision: 0 tags: ActionWidgets Widgets title: ActionListopsWidget type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/widgets/ListopsData.tid b/editions/tw5.com/tiddlers/widgets/ListopsData.tid index 2c64aebad..5b8d062be 100644 --- a/editions/tw5.com/tiddlers/widgets/ListopsData.tid +++ b/editions/tw5.com/tiddlers/widgets/ListopsData.tid @@ -1,8 +1,6 @@ created: 20151017094630847 -creator: matabele daysoftheweek: four three Fri Thu Wed Tue Mon modified: 20151108041839747 -modifier: matabele title: ListopsData type: application/x-tiddler-dictionary diff --git a/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid b/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid index 7c4a57152..92af38fc4 100644 --- a/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid +++ b/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid @@ -1,5 +1,4 @@ created: 20151014170727812 -creator: matabele days: Fri Wed Mon Tue dofwks: Mon Tue Wed Thu Fri Sat Sun item1: six @@ -8,7 +7,6 @@ item3: eight list: Yesterday Today Tomorrow marker: Thursday modified: 20151108054957921 -modifier: matabele myfield: Monday Tuesday [[Middle of the Week]] Thursday Friday Saturday Sunday numbers: 1 2 3 4 five 6 7 8 9 title: The Extended Listops Filters From ea8a8f1b53e31148fc699ab25bb189d0054b1e26 Mon Sep 17 00:00:00 2001 From: Tobias Beer <beertobias@gmail.com> Date: Wed, 9 Dec 2015 23:33:07 +0100 Subject: [PATCH 134/242] always set emptyValue, not just for filter --- core/modules/widgets/setvariable.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/modules/widgets/setvariable.js b/core/modules/widgets/setvariable.js index a3057356d..f75fa2c98 100755 --- a/core/modules/widgets/setvariable.js +++ b/core/modules/widgets/setvariable.js @@ -61,6 +61,8 @@ SetWidget.prototype.getValue = function() { if(results.length === 0 && this.setEmptyValue !== undefined) { value = this.setEmptyValue; } + } else if(!value && this.setEmptyValue) { + value = this.setEmptyValue; } return value; }; From 6e7f5328253e3c3727eb32ef4088c76c387863d4 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sun, 13 Dec 2015 18:26:37 +0000 Subject: [PATCH 135/242] Remove extraneous icon for blog plugin We had just reused the text-slicer icon --- plugins/tiddlywiki/blog/icon.tid | 11 ---------- plugins/tiddlywiki/blog/images/blog-icon.tid | 23 -------------------- 2 files changed, 34 deletions(-) delete mode 100644 plugins/tiddlywiki/blog/icon.tid delete mode 100644 plugins/tiddlywiki/blog/images/blog-icon.tid diff --git a/plugins/tiddlywiki/blog/icon.tid b/plugins/tiddlywiki/blog/icon.tid deleted file mode 100644 index 3800fd62a..000000000 --- a/plugins/tiddlywiki/blog/icon.tid +++ /dev/null @@ -1,11 +0,0 @@ -title: $:/plugins/tiddlywiki/blog/icon -tags: $:/tags/Image - -<svg class="tc-image-text-slicer tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"> - <g fill-rule="evenodd" sketch:type="MSPage"> - <path d="M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z" ></path> - <g transform="translate(32.000000, 32.000000) scale(2.19)" fill="#ffffff"> - {{$:/plugins/tiddlywiki/blog/images/blog-icon}} - </g> - </g> -</svg> \ No newline at end of file diff --git a/plugins/tiddlywiki/blog/images/blog-icon.tid b/plugins/tiddlywiki/blog/images/blog-icon.tid deleted file mode 100644 index 99f28c29b..000000000 --- a/plugins/tiddlywiki/blog/images/blog-icon.tid +++ /dev/null @@ -1,23 +0,0 @@ -title: $:/plugins/tiddlywiki/blog/images/blog-icon -tags: $:/tags/Image - -<svg class="tc-image-blog tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"> - <g fill-rule="evenodd"> - <g transform="translate(4.000000, 0.000000)"> - <path d="M38.3411765,60.8692043 L37.0438554,60.5934502 L36.1060169,61.5312888 L30.0358967,67.6014089 L26.8546358,70.7826698 L31.2553046,71.7180609 L57.49096,77.2946216 L55.6094677,75.4131293 L60.2969414,97.4659591 L62.6863095,96.9580832 L63.4542053,94.6391709 C61.3968756,93.9578968 59.2178345,93.6803997 57.0133961,93.834549 C47.752502,94.4821338 40.7734518,102.529805 41.4221661,111.806851 C42.0708803,121.083897 50.1020302,128.081953 59.3629243,127.434368 C68.6238185,126.786783 75.6028686,118.739112 74.9541544,109.462066 C74.9172571,108.93441 74.8561906,108.411074 74.7713217,107.893227 L72.3607324,108.288294 L74.8030833,108.332344 C74.8113029,107.876617 74.7676676,107.419644 74.6718491,106.968854 L68.0968468,76.0359001 L65.1996027,78.9331442 L95.7256082,85.4216469 C97.3484677,85.8346681 99.1301315,85.9957158 100.927243,85.8700496 C110.188137,85.2224648 117.167187,77.1747935 116.518473,67.8977477 C115.869758,58.6207018 107.838608,51.622646 98.5777143,52.2702308 C89.3168202,52.9178156 82.3377701,60.9654868 82.9864843,70.2425327 C83.0829952,71.6227022 83.3447327,72.9713395 83.7634295,74.2666802 L86.0877705,73.5153767 L86.5956464,71.1260085 L64.5768319,66.445765 L66.4583242,68.3272573 L52.9962533,4.9931931 C52.3027992,1.7307483 49.0908655,-0.351931923 45.8299389,0.34119942 C42.5678304,1.03458199 40.4828911,4.24818153 41.1753213,7.50580974 L53.9709451,67.7044865 L56.8681892,64.8072424 L38.3411765,60.8692043 L38.3411765,60.8692043 Z M62.9704214,109.856258 C62.9938415,110.000792 63.0107875,110.147165 63.0211368,110.295166 C63.2044836,112.917148 61.2347613,115.188472 58.6247241,115.370983 C56.014687,115.553495 53.7480268,113.578408 53.5646799,110.956426 C53.3813331,108.334444 55.3510554,106.063121 57.9610925,105.880609 C60.1295425,105.728976 62.1103551,107.076498 62.7888621,109.116336 L65.1067464,108.345342 L62.7173781,108.853218 L62.850917,109.48147 C62.9106646,109.76256 62.989888,110.03773 63.0878857,110.305385 L65.3817182,109.465533 L62.9704214,109.856258 L62.9704214,109.856258 Z M100.189042,73.8066649 C97.5790052,73.9891764 95.312345,72.0140901 95.1289982,69.3921077 C94.9456513,66.7701254 96.9153736,64.4988023 99.5254108,64.3162907 C102.135448,64.1337792 104.402108,66.1088655 104.585455,68.7308479 C104.768802,71.3528302 102.79908,73.6241533 100.189042,73.8066649 L100.189042,73.8066649 L100.189042,73.8066649 Z"></path> - <g transform="translate(37.805833, 47.877863) rotate(-135.000000) translate(-37.805833, -47.877863) translate(34.692000, -1.943461)"> - <path d="M6.22766546,40.4798255 C6.22766546,38.7601032 4.83355506,37.3659928 3.11383273,37.3659928 C1.3941104,37.3659928 -1.32677371e-13,38.7601032 -1.32782674e-13,40.4798255 C-1.32887976e-13,42.1995478 1.3941104,43.5936583 3.11383273,43.5936583 C4.83355506,43.5936583 6.22766546,42.1995478 6.22766546,40.4798255 L6.22766546,40.4798255 Z" id="Oval-251"></path> - <path d="M6.22766546,87.1873165 C6.22766546,85.4675942 4.83355506,84.0734838 3.11383273,84.0734838 C1.3941104,84.0734838 -1.93517593e-13,85.4675942 -1.93622895e-13,87.1873165 C-1.93728198e-13,88.9070388 1.3941104,90.3011492 3.11383273,90.3011492 C4.83355506,90.3011492 6.22766546,88.9070388 6.22766546,87.1873165 L6.22766546,87.1873165 Z"></path> - <path d="M6.22766546,96.5288147 C6.22766546,94.8090924 4.83355506,93.414982 3.11383273,93.414982 C1.3941104,93.414982 -1.26904211e-13,94.8090924 -1.27009514e-13,96.5288147 C-1.27114817e-13,98.248537 1.3941104,99.6426474 3.11383273,99.6426474 C4.83355506,99.6426474 6.22766546,98.248537 6.22766546,96.5288147 L6.22766546,96.5288147 Z"></path> - <path d="M6.22766546,31.1383273 C6.22766546,29.418605 4.83355506,28.0244946 3.11383273,28.0244946 C1.3941104,28.0244946 -2.01955288e-13,29.418605 -2.0206059e-13,31.1383273 C-2.02165893e-13,32.8580497 1.3941104,34.2521601 3.11383273,34.2521601 C4.83355506,34.2521601 6.22766546,32.8580497 6.22766546,31.1383273 L6.22766546,31.1383273 Z"></path> - <path d="M6.22766546,78.0925797 C6.22766546,76.3728573 4.83355506,74.9787469 3.11383273,74.9787469 C1.3941104,74.9787469 -8.33239236e-15,76.3728573 -8.43769499e-15,78.0925797 C-8.54299761e-15,79.812302 1.3941104,81.2064124 3.11383273,81.2064124 C4.83355506,81.2064124 6.22766546,79.812302 6.22766546,78.0925797 L6.22766546,78.0925797 Z"></path> - <path d="M6.22766546,21.7968291 C6.22766546,20.0771068 4.83355506,18.6829964 3.11383273,18.6829964 C1.3941104,18.6829964 4.14055991e-14,20.0771068 4.13002965e-14,21.7968291 C4.11949939e-14,23.5165515 1.3941104,24.9106619 3.11383273,24.9106619 C4.83355506,24.9106619 6.22766546,23.5165515 6.22766546,21.7968291 L6.22766546,21.7968291 Z"></path> - <path d="M6.22766546,68.7510815 C6.22766546,67.0313591 4.83355506,65.6372487 3.11383273,65.6372487 C1.3941104,65.6372487 -8.33239236e-15,67.0313591 -8.43769499e-15,68.7510815 C-8.54299761e-15,70.4708038 1.3941104,71.8649142 3.11383273,71.8649142 C4.83355506,71.8649142 6.22766546,70.4708038 6.22766546,68.7510815 L6.22766546,68.7510815 Z"></path> - <path d="M6.22766546,12.4553309 C6.22766546,10.7356086 4.83355506,9.3414982 3.11383273,9.3414982 C1.3941104,9.3414982 -2.74282284e-14,10.7356086 -2.7533531e-14,12.4553309 C-2.76388336e-14,14.1750533 1.3941104,15.5691637 3.11383273,15.5691637 C4.83355506,15.5691637 6.22766546,14.1750533 6.22766546,12.4553309 L6.22766546,12.4553309 Z"></path> - <path d="M6.22766546,59.4095833 C6.22766546,57.6898609 4.83355506,56.2957505 3.11383273,56.2957505 C1.3941104,56.2957505 -7.71662199e-14,57.6898609 -7.72715225e-14,59.4095833 C-7.73768251e-14,61.1293056 1.3941104,62.523416 3.11383273,62.523416 C4.83355506,62.523416 6.22766546,61.1293056 6.22766546,59.4095833 L6.22766546,59.4095833 Z"></path> - <path d="M6.22766546,3.11383273 C6.22766546,1.3941104 4.83355506,3.33066907e-14 3.11383273,3.33066907e-14 C1.3941104,3.33066907e-14 -2.74282284e-14,1.3941104 -2.7533531e-14,3.11383273 C-2.76388336e-14,4.83355506 1.3941104,6.22766546 3.11383273,6.22766546 C4.83355506,6.22766546 6.22766546,4.83355506 6.22766546,3.11383273 L6.22766546,3.11383273 Z"></path> - <path d="M6.22766546,50.0680851 C6.22766546,48.3483627 4.83355506,46.9542523 3.11383273,46.9542523 C1.3941104,46.9542523 -7.71662199e-14,48.3483627 -7.72715225e-14,50.0680851 C-7.73768251e-14,51.7878074 1.3941104,53.1819178 3.11383273,53.1819178 C4.83355506,53.1819178 6.22766546,51.7878074 6.22766546,50.0680851 L6.22766546,50.0680851 Z"></path> - </g> - </g> - </g> -</svg> From 9468e501462d92afaf65229a1b6dcfbbabbe84b7 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Fri, 18 Dec 2015 11:58:02 +0100 Subject: [PATCH 136/242] added plugin link to the EditTemplate --- languages/de-DE/EditTemplate.multids | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/languages/de-DE/EditTemplate.multids b/languages/de-DE/EditTemplate.multids index 1f30cbd8c..5e9414172 100644 --- a/languages/de-DE/EditTemplate.multids +++ b/languages/de-DE/EditTemplate.multids @@ -13,8 +13,8 @@ Fields/Add/Prompt: Feld einfügen: Fields/Add/Value/Placeholder: Feld Text / Wert Fields/Add/Dropdown/System: System Felder Fields/Add/Dropdown/User: Anwender Felder -Shadow/Warning: Dies ist ein Schatten-Tiddler. Jede Änderung überschreibt die Standardversion. -Shadow/OverriddenWarning: Dies ist ein veränderter Tiddler. Um zur Standardversion zurückzukehren, löschen Sie diesen Tiddler. +Shadow/Warning: Dies ist ein Schatten-Tiddler. Jede Änderung überschreibt die Standardversion des plugins: <<pluginLink>> +Shadow/OverriddenWarning: Dies ist ein veränderter Tiddler. Um zur Standardversion zurückzukehren, löschen Sie diesen Tiddler. Plugin: <<pluginLink>> Tags/Add/Button: ok Tags/Add/Placeholder: neuer Tag Tags/Dropdown/Caption: Tag Liste From b0dce4f8e4aff239d2d0402a6adc61c1bd158691 Mon Sep 17 00:00:00 2001 From: Mario Pietsch <pmariojo@gmail.com> Date: Fri, 18 Dec 2015 14:14:38 +0100 Subject: [PATCH 137/242] fix spelling .. --- languages/de-DE/EditTemplate.multids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/de-DE/EditTemplate.multids b/languages/de-DE/EditTemplate.multids index 5e9414172..341e84e7e 100644 --- a/languages/de-DE/EditTemplate.multids +++ b/languages/de-DE/EditTemplate.multids @@ -13,7 +13,7 @@ Fields/Add/Prompt: Feld einfügen: Fields/Add/Value/Placeholder: Feld Text / Wert Fields/Add/Dropdown/System: System Felder Fields/Add/Dropdown/User: Anwender Felder -Shadow/Warning: Dies ist ein Schatten-Tiddler. Jede Änderung überschreibt die Standardversion des plugins: <<pluginLink>> +Shadow/Warning: Dies ist ein Schatten-Tiddler. Jede Änderung überschreibt die Standardversion des Plugins: <<pluginLink>> Shadow/OverriddenWarning: Dies ist ein veränderter Tiddler. Um zur Standardversion zurückzukehren, löschen Sie diesen Tiddler. Plugin: <<pluginLink>> Tags/Add/Button: ok Tags/Add/Placeholder: neuer Tag From aaf3e6bb9ed34a9b1db22c1d4fb1a8bb6569b558 Mon Sep 17 00:00:00 2001 From: Santiago Pelufo <santiagopelufo@gmail.com> Date: Fri, 18 Dec 2015 11:41:37 -0300 Subject: [PATCH 138/242] Add displayMode attribute to katex widget. --- licenses/cla-individual.md | 2 ++ plugins/tiddlywiki/katex/wrapper.js | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index e4ca78d44..cb9bd3f97 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -256,3 +256,5 @@ Tony Grosinger @tgrosinger 2015/10/03 Antaeus Feldspar @afeldspar 2015/10/20 Soeren Enevoldsen, @senevoldsen90, 2015/10/09 + +Santiago Pelufo, @spelufo, 2015/12/18 diff --git a/plugins/tiddlywiki/katex/wrapper.js b/plugins/tiddlywiki/katex/wrapper.js index 2f36d7ee4..ec35f5e3c 100644 --- a/plugins/tiddlywiki/katex/wrapper.js +++ b/plugins/tiddlywiki/katex/wrapper.js @@ -34,9 +34,10 @@ KaTeXWidget.prototype.render = function(parent,nextSibling) { this.execute(); // Get the source text var text = this.getAttribute("text",this.parseTreeNode.text || ""); + var displayMode = this.getAttribute("displayMode",this.parseTreeNode.displayMode || "false") === "true"; // Render it into a span var span = this.document.createElement("span"), - options = {throwOnError: false}; + options = {throwOnError: false, displayMode: displayMode}; try { if(!this.document.isTiddlyWikiFakeDom) { katex.render(text,span,options); From 231d0a3dc8385fcb2173436754f00f464d7b018e Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sat, 19 Dec 2015 18:47:42 +0000 Subject: [PATCH 139/242] Add plugin wrappers for async and jszip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The immediate motivation is the work I’m doing to integrate with Amazon Web Services. We should be able to use JSZip to export multiple tiddlers in a single operation from the browser. --- plugins/tiddlywiki/async/files/LICENSE | 19 + .../async/files/async.min.v1.5.0.js | 2 + .../tiddlywiki/async/files/tiddlywiki.files | 20 + plugins/tiddlywiki/async/plugin.info | 7 + plugins/tiddlywiki/async/readme.tid | 3 + .../tiddlywiki/jszip/files/LICENSE.markdown | 651 ++++++++++++++++++ .../jszip/files/jszip.min.v2.5.0.js | 14 + .../tiddlywiki/jszip/files/tiddlywiki.files | 20 + plugins/tiddlywiki/jszip/plugin.info | 7 + plugins/tiddlywiki/jszip/readme.tid | 3 + 10 files changed, 746 insertions(+) create mode 100644 plugins/tiddlywiki/async/files/LICENSE create mode 100644 plugins/tiddlywiki/async/files/async.min.v1.5.0.js create mode 100644 plugins/tiddlywiki/async/files/tiddlywiki.files create mode 100644 plugins/tiddlywiki/async/plugin.info create mode 100644 plugins/tiddlywiki/async/readme.tid create mode 100755 plugins/tiddlywiki/jszip/files/LICENSE.markdown create mode 100755 plugins/tiddlywiki/jszip/files/jszip.min.v2.5.0.js create mode 100644 plugins/tiddlywiki/jszip/files/tiddlywiki.files create mode 100644 plugins/tiddlywiki/jszip/plugin.info create mode 100644 plugins/tiddlywiki/jszip/readme.tid diff --git a/plugins/tiddlywiki/async/files/LICENSE b/plugins/tiddlywiki/async/files/LICENSE new file mode 100644 index 000000000..8f2969858 --- /dev/null +++ b/plugins/tiddlywiki/async/files/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010-2014 Caolan McMahon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/plugins/tiddlywiki/async/files/async.min.v1.5.0.js b/plugins/tiddlywiki/async/files/async.min.v1.5.0.js new file mode 100644 index 000000000..b947fc489 --- /dev/null +++ b/plugins/tiddlywiki/async/files/async.min.v1.5.0.js @@ -0,0 +1,2 @@ +!function(){function n(){}function t(n){return n}function e(n){return!!n}function r(n){return!n}function u(n){return function(){if(null===n)throw new Error("Callback was already called.");n.apply(this,arguments),n=null}}function i(n){return function(){null!==n&&(n.apply(this,arguments),n=null)}}function o(n){return M(n)||"number"==typeof n.length&&n.length>=0&&n.length%1===0}function c(n,t){for(var e=-1,r=n.length;++e<r;)t(n[e],e,n)}function a(n,t){for(var e=-1,r=n.length,u=Array(r);++e<r;)u[e]=t(n[e],e,n);return u}function f(n){return a(Array(n),function(n,t){return t})}function l(n,t,e){return c(n,function(n,r,u){e=t(e,n,r,u)}),e}function s(n,t){c(W(n),function(e){t(n[e],e)})}function p(n,t){for(var e=0;e<n.length;e++)if(n[e]===t)return e;return-1}function h(n){var t,e,r=-1;return o(n)?(t=n.length,function(){return r++,t>r?r:null}):(e=W(n),t=e.length,function(){return r++,t>r?e[r]:null})}function m(n,t){return t=null==t?n.length-1:+t,function(){for(var e=Math.max(arguments.length-t,0),r=Array(e),u=0;e>u;u++)r[u]=arguments[u+t];switch(t){case 0:return n.call(this,r);case 1:return n.call(this,arguments[0],r)}}}function y(n){return function(t,e,r){return n(t,r)}}function v(t){return function(e,r,o){o=i(o||n),e=e||[];var c=h(e);if(0>=t)return o(null);var a=!1,f=0,l=!1;!function s(){if(a&&0>=f)return o(null);for(;t>f&&!l;){var n=c();if(null===n)return a=!0,void(0>=f&&o(null));f+=1,r(e[n],n,u(function(n){f-=1,n?(o(n),l=!0):s()}))}}()}}function d(n){return function(t,e,r){return n(C.eachOf,t,e,r)}}function g(n){return function(t,e,r,u){return n(v(e),t,r,u)}}function k(n){return function(t,e,r){return n(C.eachOfSeries,t,e,r)}}function b(t,e,r,u){u=i(u||n),e=e||[];var c=o(e)?[]:{};t(e,function(n,t,e){r(n,function(n,r){c[t]=r,e(n)})},function(n){u(n,c)})}function w(n,t,e,r){var u=[];n(t,function(n,t,r){e(n,function(e){e&&u.push({index:t,value:n}),r()})},function(){r(a(u.sort(function(n,t){return n.index-t.index}),function(n){return n.value}))})}function O(n,t,e,r){w(n,t,function(n,t){e(n,function(n){t(!n)})},r)}function S(n,t,e){return function(r,u,i,o){function c(){o&&o(e(!1,void 0))}function a(n,r,u){return o?void i(n,function(r){o&&t(r)&&(o(e(!0,n)),o=i=!1),u()}):u()}arguments.length>3?n(r,u,a,c):(o=i,i=u,n(r,a,c))}}function E(n,t){return t}function L(t,e,r){r=r||n;var u=o(e)?[]:{};t(e,function(n,t,e){n(m(function(n,r){r.length<=1&&(r=r[0]),u[t]=r,e(n)}))},function(n){r(n,u)})}function I(n,t,e,r){var u=[];n(t,function(n,t,r){e(n,function(n,t){u=u.concat(t||[]),r(n)})},function(n){r(n,u)})}function x(t,e,r){function i(t,e,r,u){if(null!=u&&"function"!=typeof u)throw new Error("task callback must be a function");return t.started=!0,M(e)||(e=[e]),0===e.length&&t.idle()?C.setImmediate(function(){t.drain()}):(c(e,function(e){var i={data:e,callback:u||n};r?t.tasks.unshift(i):t.tasks.push(i),t.tasks.length===t.concurrency&&t.saturated()}),void C.setImmediate(t.process))}function o(n,t){return function(){f-=1;var e=!1,r=arguments;c(t,function(n){c(l,function(t,r){t!==n||e||(l.splice(r,1),e=!0)}),n.callback.apply(n,r)}),n.tasks.length+f===0&&n.drain(),n.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var f=0,l=[],s={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(n,t){i(s,n,!1,t)},kill:function(){s.drain=n,s.tasks=[]},unshift:function(n,t){i(s,n,!0,t)},process:function(){if(!s.paused&&f<s.concurrency&&s.tasks.length)for(;f<s.concurrency&&s.tasks.length;){var n=s.payload?s.tasks.splice(0,s.payload):s.tasks.splice(0,s.tasks.length),e=a(n,function(n){return n.data});0===s.tasks.length&&s.empty(),f+=1,l.push(n[0]);var r=u(o(s,n));t(e,r)}},length:function(){return s.tasks.length},running:function(){return f},workersList:function(){return l},idle:function(){return s.tasks.length+f===0},pause:function(){s.paused=!0},resume:function(){if(s.paused!==!1){s.paused=!1;for(var n=Math.min(s.concurrency,s.tasks.length),t=1;n>=t;t++)C.setImmediate(s.process)}}};return s}function j(n){return m(function(t,e){t.apply(null,e.concat([m(function(t,e){"object"==typeof console&&(t?console.error&&console.error(t):console[n]&&c(e,function(t){console[n](t)}))})]))})}function A(n){return function(t,e,r){n(f(t),e,r)}}function T(n){return m(function(t,e){var r=m(function(e){var r=this,u=e.pop();return n(t,function(n,t,u){n.apply(r,e.concat([u]))},u)});return e.length?r.apply(this,e):r})}function z(n){return m(function(t){var e=t.pop();t.push(function(){var n=arguments;r?C.setImmediate(function(){e.apply(null,n)}):e.apply(null,n)});var r=!0;n.apply(this,t),r=!1})}var q,C={},P="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this;null!=P&&(q=P.async),C.noConflict=function(){return P.async=q,C};var H=Object.prototype.toString,M=Array.isArray||function(n){return"[object Array]"===H.call(n)},U=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},W=Object.keys||function(n){var t=[];for(var e in n)n.hasOwnProperty(e)&&t.push(e);return t},B="function"==typeof setImmediate&&setImmediate,D=B?function(n){B(n)}:function(n){setTimeout(n,0)};"object"==typeof process&&"function"==typeof process.nextTick?C.nextTick=process.nextTick:C.nextTick=D,C.setImmediate=B?D:C.nextTick,C.forEach=C.each=function(n,t,e){return C.eachOf(n,y(t),e)},C.forEachSeries=C.eachSeries=function(n,t,e){return C.eachOfSeries(n,y(t),e)},C.forEachLimit=C.eachLimit=function(n,t,e,r){return v(t)(n,y(e),r)},C.forEachOf=C.eachOf=function(t,e,r){function o(n){f--,n?r(n):null===c&&0>=f&&r(null)}r=i(r||n),t=t||[];for(var c,a=h(t),f=0;null!=(c=a());)f+=1,e(t[c],c,u(o));0===f&&r(null)},C.forEachOfSeries=C.eachOfSeries=function(t,e,r){function o(){var n=!0;return null===a?r(null):(e(t[a],a,u(function(t){if(t)r(t);else{if(a=c(),null===a)return r(null);n?C.setImmediate(o):o()}})),void(n=!1))}r=i(r||n),t=t||[];var c=h(t),a=c();o()},C.forEachOfLimit=C.eachOfLimit=function(n,t,e,r){v(t)(n,e,r)},C.map=d(b),C.mapSeries=k(b),C.mapLimit=g(b),C.inject=C.foldl=C.reduce=function(n,t,e,r){C.eachOfSeries(n,function(n,r,u){e(t,n,function(n,e){t=e,u(n)})},function(n){r(n,t)})},C.foldr=C.reduceRight=function(n,e,r,u){var i=a(n,t).reverse();C.reduce(i,e,r,u)},C.transform=function(n,t,e,r){3===arguments.length&&(r=e,e=t,t=M(n)?[]:{}),C.eachOf(n,function(n,r,u){e(t,n,r,u)},function(n){r(n,t)})},C.select=C.filter=d(w),C.selectLimit=C.filterLimit=g(w),C.selectSeries=C.filterSeries=k(w),C.reject=d(O),C.rejectLimit=g(O),C.rejectSeries=k(O),C.any=C.some=S(C.eachOf,e,t),C.someLimit=S(C.eachOfLimit,e,t),C.all=C.every=S(C.eachOf,r,r),C.everyLimit=S(C.eachOfLimit,r,r),C.detect=S(C.eachOf,t,E),C.detectSeries=S(C.eachOfSeries,t,E),C.detectLimit=S(C.eachOfLimit,t,E),C.sortBy=function(n,t,e){function r(n,t){var e=n.criteria,r=t.criteria;return r>e?-1:e>r?1:0}C.map(n,function(n,e){t(n,function(t,r){t?e(t):e(null,{value:n,criteria:r})})},function(n,t){return n?e(n):void e(null,a(t.sort(r),function(n){return n.value}))})},C.auto=function(t,e,r){function u(n){d.unshift(n)}function o(n){var t=p(d,n);t>=0&&d.splice(t,1)}function a(){h--,c(d.slice(0),function(n){n()})}r||(r=e,e=null),r=i(r||n);var f=W(t),h=f.length;if(!h)return r(null);e||(e=h);var y={},v=0,d=[];u(function(){h||r(null,y)}),c(f,function(n){function i(){return e>v&&l(g,function(n,t){return n&&y.hasOwnProperty(t)},!0)&&!y.hasOwnProperty(n)}function c(){i()&&(v++,o(c),h[h.length-1](d,y))}for(var f,h=M(t[n])?t[n]:[t[n]],d=m(function(t,e){if(v--,e.length<=1&&(e=e[0]),t){var u={};s(y,function(n,t){u[t]=n}),u[n]=e,r(t,u)}else y[n]=e,C.setImmediate(a)}),g=h.slice(0,h.length-1),k=g.length;k--;){if(!(f=t[g[k]]))throw new Error("Has inexistant dependency");if(M(f)&&p(f,n)>=0)throw new Error("Has cyclic dependencies")}i()?(v++,h[h.length-1](d,y)):u(c)})},C.retry=function(n,t,e){function r(n,t){if("number"==typeof t)n.times=parseInt(t,10)||i;else{if("object"!=typeof t)throw new Error("Unsupported argument type for 'times': "+typeof t);n.times=parseInt(t.times,10)||i,n.interval=parseInt(t.interval,10)||o}}function u(n,t){function e(n,e){return function(r){n(function(n,t){r(!n||e,{err:n,result:t})},t)}}function r(n){return function(t){setTimeout(function(){t(null)},n)}}for(;a.times;){var u=!(a.times-=1);c.push(e(a.task,u)),!u&&a.interval>0&&c.push(r(a.interval))}C.series(c,function(t,e){e=e[e.length-1],(n||a.callback)(e.err,e.result)})}var i=5,o=0,c=[],a={times:i,interval:o},f=arguments.length;if(1>f||f>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=f&&"function"==typeof n&&(e=t,t=n),"function"!=typeof n&&r(a,n),a.callback=e,a.task=t,a.callback?u():u},C.waterfall=function(t,e){function r(n){return m(function(t,u){if(t)e.apply(null,[t].concat(u));else{var i=n.next();i?u.push(r(i)):u.push(e),z(n).apply(null,u)}})}if(e=i(e||n),!M(t)){var u=new Error("First argument to waterfall must be an array of functions");return e(u)}return t.length?void r(C.iterator(t))():e()},C.parallel=function(n,t){L(C.eachOf,n,t)},C.parallelLimit=function(n,t,e){L(v(t),n,e)},C.series=function(n,t){L(C.eachOfSeries,n,t)},C.iterator=function(n){function t(e){function r(){return n.length&&n[e].apply(null,arguments),r.next()}return r.next=function(){return e<n.length-1?t(e+1):null},r}return t(0)},C.apply=m(function(n,t){return m(function(e){return n.apply(null,t.concat(e))})}),C.concat=d(I),C.concatSeries=k(I),C.whilst=function(t,e,r){if(r=r||n,t()){var u=m(function(n,i){n?r(n):t.apply(this,i)?e(u):r(null)});e(u)}else r(null)},C.doWhilst=function(n,t,e){var r=0;return C.whilst(function(){return++r<=1||t.apply(this,arguments)},n,e)},C.until=function(n,t,e){return C.whilst(function(){return!n.apply(this,arguments)},t,e)},C.doUntil=function(n,t,e){return C.doWhilst(n,function(){return!t.apply(this,arguments)},e)},C.during=function(t,e,r){r=r||n;var u=m(function(n,e){n?r(n):(e.push(i),t.apply(this,e))}),i=function(n,t){n?r(n):t?e(u):r(null)};t(i)},C.doDuring=function(n,t,e){var r=0;C.during(function(n){r++<1?n(null,!0):t.apply(this,arguments)},n,e)},C.queue=function(n,t){var e=x(function(t,e){n(t[0],e)},t,1);return e},C.priorityQueue=function(t,e){function r(n,t){return n.priority-t.priority}function u(n,t,e){for(var r=-1,u=n.length-1;u>r;){var i=r+(u-r+1>>>1);e(t,n[i])>=0?r=i:u=i-1}return r}function i(t,e,i,o){if(null!=o&&"function"!=typeof o)throw new Error("task callback must be a function");return t.started=!0,M(e)||(e=[e]),0===e.length?C.setImmediate(function(){t.drain()}):void c(e,function(e){var c={data:e,priority:i,callback:"function"==typeof o?o:n};t.tasks.splice(u(t.tasks,c,r)+1,0,c),t.tasks.length===t.concurrency&&t.saturated(),C.setImmediate(t.process)})}var o=C.queue(t,e);return o.push=function(n,t,e){i(o,n,t,e)},delete o.unshift,o},C.cargo=function(n,t){return x(n,1,t)},C.log=j("log"),C.dir=j("dir"),C.memoize=function(n,e){var r={},u={};e=e||t;var i=m(function(t){var i=t.pop(),o=e.apply(null,t);o in r?C.setImmediate(function(){i.apply(null,r[o])}):o in u?u[o].push(i):(u[o]=[i],n.apply(null,t.concat([m(function(n){r[o]=n;var t=u[o];delete u[o];for(var e=0,i=t.length;i>e;e++)t[e].apply(null,n)})])))});return i.memo=r,i.unmemoized=n,i},C.unmemoize=function(n){return function(){return(n.unmemoized||n).apply(null,arguments)}},C.times=A(C.map),C.timesSeries=A(C.mapSeries),C.timesLimit=function(n,t,e,r){return C.mapLimit(f(n),t,e,r)},C.seq=function(){var t=arguments;return m(function(e){var r=this,u=e[e.length-1];"function"==typeof u?e.pop():u=n,C.reduce(t,e,function(n,t,e){t.apply(r,n.concat([m(function(n,t){e(n,t)})]))},function(n,t){u.apply(r,[n].concat(t))})})},C.compose=function(){return C.seq.apply(null,Array.prototype.reverse.call(arguments))},C.applyEach=T(C.eachOf),C.applyEachSeries=T(C.eachOfSeries),C.forever=function(t,e){function r(n){return n?i(n):void o(r)}var i=u(e||n),o=z(t);r()},C.ensureAsync=z,C.constant=m(function(n){var t=[null].concat(n);return function(n){return n.apply(this,t)}}),C.wrapSync=C.asyncify=function(n){return m(function(t){var e,r=t.pop();try{e=n.apply(this,t)}catch(u){return r(u)}U(e)&&"function"==typeof e.then?e.then(function(n){r(null,n)})["catch"](function(n){r(n.message?n:new Error(n))}):r(null,e)})},"object"==typeof module&&module.exports?module.exports=C:"function"==typeof define&&define.amd?define([],function(){return C}):P.async=C}(); +//# sourceMappingURL=dist/async.min.map \ No newline at end of file diff --git a/plugins/tiddlywiki/async/files/tiddlywiki.files b/plugins/tiddlywiki/async/files/tiddlywiki.files new file mode 100644 index 000000000..5292bab73 --- /dev/null +++ b/plugins/tiddlywiki/async/files/tiddlywiki.files @@ -0,0 +1,20 @@ +{ + "tiddlers": [ + { + "file": "async.min.v1.5.0.js", + "fields": { + "type": "application/javascript", + "title": "$:/plugins/tiddlywiki/async/async.js", + "module-type": "library" + }, + "prefix": "", + "suffix": "" + },{ + "file": "LICENSE", + "fields": { + "type": "text/plain", + "title": "$:/plugins/tiddlywiki/async/license" + } + } + ] +} diff --git a/plugins/tiddlywiki/async/plugin.info b/plugins/tiddlywiki/async/plugin.info new file mode 100644 index 000000000..701c3bd41 --- /dev/null +++ b/plugins/tiddlywiki/async/plugin.info @@ -0,0 +1,7 @@ +{ + "title": "$:/plugins/tiddlywiki/async", + "description": "Wrapper for async.js by Caolan McMahon", + "author": "JeremyRuston", + "core-version": ">=5.0.0", + "list": "readme license" +} diff --git a/plugins/tiddlywiki/async/readme.tid b/plugins/tiddlywiki/async/readme.tid new file mode 100644 index 000000000..2e559bdcb --- /dev/null +++ b/plugins/tiddlywiki/async/readme.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/async/readme + +This plugin packages [[async.js|https://github.com/caolan/async]] for use by other plugins. It does not provide any end-user visible features. diff --git a/plugins/tiddlywiki/jszip/files/LICENSE.markdown b/plugins/tiddlywiki/jszip/files/LICENSE.markdown new file mode 100755 index 000000000..c0b10c095 --- /dev/null +++ b/plugins/tiddlywiki/jszip/files/LICENSE.markdown @@ -0,0 +1,651 @@ +JSZip is dual licensed. You may use it under the MIT license *or* the GPLv3 +license. + +The MIT License +=============== + +Copyright (c) 2009-2014 Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +GPL version 3 +============= + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS diff --git a/plugins/tiddlywiki/jszip/files/jszip.min.v2.5.0.js b/plugins/tiddlywiki/jszip/files/jszip.min.v2.5.0.js new file mode 100755 index 000000000..a09f35b86 --- /dev/null +++ b/plugins/tiddlywiki/jszip/files/jszip.min.v2.5.0.js @@ -0,0 +1,14 @@ +/*! + +JSZip - A Javascript class for generating and reading zip files +<http://stuartk.com/jszip> + +(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com> +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ +!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";c.encode=function(a){for(var b,c,e,f,g,h,i,j="",k=0;k<a.length;)b=a.charCodeAt(k++),c=a.charCodeAt(k++),e=a.charCodeAt(k++),f=b>>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j="",k=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k<a.length;)f=d.indexOf(a.charAt(k++)),g=d.indexOf(a.charAt(k++)),h=d.indexOf(a.charAt(k++)),i=d.indexOf(a.charAt(k++)),b=f<<2|g>>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)),64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){"use strict";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){"use strict";c.STORE={magic:"\x00\x00",compress:function(a){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a("./flate")},{"./flate":8}],4:[function(a,b){"use strict";var c=a("./utils"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if("undefined"==typeof a||!a.length)return 0;var e="string"!==c.getTypeOf(a);"undefined"==typeof b&&(b=0);var f=0,g=0,h=0;b=-1^b;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{"./utils":21}],5:[function(a,b){"use strict";function c(){this.data=null,this.length=0,this.index=0}var d=a("./utils");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<a||0>a)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{"./utils":21}],6:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],7:[function(a,b,c){"use strict";var d=a("./utils");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo("uint8array",a)},c.uint8Array2String=function(a){return d.transformTo("string",a)},c.string2Blob=function(a){var b=d.transformTo("arraybuffer",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{"./utils":21}],8:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,e=a("pako");c.uncompressInputType=d?"uint8array":"array",c.compressInputType=d?"uint8array":"array",c.magic="\b\x00",c.compress=function(a,b){return e.deflateRaw(a,{level:b.level||-1})},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){"use strict";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root="",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a("./base64");c.prototype=a("./object"),c.prototype.load=a("./load"),c.support=a("./support"),c.defaults=a("./defaults"),c.utils=a("./deprecatedPublicUtils"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a("./compressions"),b.exports=c},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;g<e.length;g++)h=e[g],this.file(h.fileName,h.decompressed,{binary:!0,optimizedBinaryString:!0,date:h.date,dir:h.dir,comment:h.fileComment.length?h.fileComment:null,unixPermissions:h.unixPermissions,dosPermissions:h.dosPermissions,createFolders:b.createFolders});return f.zipComment.length&&(this.comment=f.zipComment),this}},{"./base64":1,"./zipEntries":22}],11:[function(a,b){(function(a){"use strict";b.exports=function(b,c){return new a(b,c)},b.exports.test=function(b){return a.isBuffer(b)}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],12:[function(a,b){"use strict";function c(a){this.data=a,this.length=this.data.length,this.index=0}var d=a("./uint8ArrayReader");c.prototype=new d,c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./uint8ArrayReader":18}],13:[function(a,b){"use strict";var c=a("./support"),d=a("./utils"),e=a("./crc32"),f=a("./signature"),g=a("./defaults"),h=a("./base64"),i=a("./compressions"),j=a("./compressedObject"),k=a("./nodeBuffer"),l=a("./utf8"),m=a("./stringWriter"),n=a("./uint8ArrayWriter"),o=function(a){if(a._data instanceof j&&(a._data=a._data.getContent(),a.options.binary=!0,a.options.base64=!1,"uint8array"===d.getTypeOf(a._data))){var b=a._data;a._data=new Uint8Array(b.length),0!==b.length&&a._data.set(b,0)}return a._data},p=function(a){var b=o(a),e=d.getTypeOf(b);return"string"===e?!a.options.binary&&c.nodebuffer?k(b,"utf-8"):a.asBinary():b},q=function(a){var b=o(this);return null===b||"undefined"==typeof b?"":(this.options.base64&&(b=h.decode(b)),b=a&&this.options.binary?D.utf8decode(b):d.transformTo("string",b),a||this.options.binary||(b=d.transformTo("string",D.utf8encode(b))),b)},r=function(a,b,c){this.name=a,this.dir=c.dir,this.date=c.date,this.comment=c.comment,this.unixPermissions=c.unixPermissions,this.dosPermissions=c.dosPermissions,this._data=b,this.options=c,this._initialMetadata={dir:c.dir,date:c.date}};r.prototype={asText:function(){return q.call(this,!0)},asBinary:function(){return q.call(this,!1)},asNodeBuffer:function(){var a=p(this);return d.transformTo("nodebuffer",a)},asUint8Array:function(){var a=p(this);return d.transformTo("uint8array",a)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var s=function(a,b){var c,d="";for(c=0;b>c;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a<arguments.length;a++)for(b in arguments[a])arguments[a].hasOwnProperty(b)&&"undefined"==typeof c[b]&&(c[b]=arguments[a][b]);return c},u=function(a){return a=a||{},a.base64!==!0||null!==a.binary&&void 0!==a.binary||(a.binary=!0),a=t(a,g),a.date=a.date||new Date,null!==a.compression&&(a.compression=a.compression.toUpperCase()),a},v=function(a,b,c){var e,f=d.getTypeOf(b);if(c=u(c),"string"==typeof c.unixPermissions&&(c.unixPermissions=parseInt(c.unixPermissions,8)),c.unixPermissions&&16384&c.unixPermissions&&(c.dir=!0),c.dosPermissions&&16&c.dosPermissions&&(c.dir=!0),c.dir&&(a=x(a)),c.createFolders&&(e=w(a))&&y.call(this,e,!0),c.dir||null===b||"undefined"==typeof b)c.base64=!1,c.binary=!1,b=null,f=null;else if("string"===f)c.binary&&!c.base64&&c.optimizedBinaryString!==!0&&(b=d.string2binary(b));else{if(c.base64=!1,c.binary=!0,!(f||b instanceof j))throw new Error("The data of '"+a+"' is in an unsupported format !");"arraybuffer"===f&&(b=d.transformTo("uint8array",b))}var g=new r(a,b,c);return this.files[a]=g,g},w=function(a){"/"==a.slice(-1)&&(a=a.substring(0,a.length-1));var b=a.lastIndexOf("/");return b>0?a.substring(0,b):""},x=function(a){return"/"!=a.slice(-1)&&(a+="/"),a},y=function(a,b){return b="undefined"!=typeof b?b:!1,a=x(a),this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},z=function(a,b,c){var f,g=new j;return a._data instanceof j?(g.uncompressedSize=a._data.uncompressedSize,g.crc32=a._data.crc32,0===g.uncompressedSize||a.dir?(b=i.STORE,g.compressedContent="",g.crc32=0):a._data.compressionMethod===b.magic?g.compressedContent=a._data.getCompressedContent():(f=a._data.getContent(),g.compressedContent=b.compress(d.transformTo(b.compressInputType,f),c))):(f=p(a),(!f||0===f.length||a.dir)&&(b=i.STORE,f=""),g.uncompressedSize=f.length,g.crc32=e(f),g.compressedContent=b.compress(d.transformTo(b.compressInputType,f),c)),g.compressedSize=g.compressedContent.length,g.compressionMethod=b.magic,g},A=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},B=function(a){return 63&(a||0)},C=function(a,b,c,g,h){var i,j,k,m,n=(c.compressedContent,d.transformTo("string",l.utf8encode(b.name))),o=b.comment||"",p=d.transformTo("string",l.utf8encode(o)),q=n.length!==b.name.length,r=p.length!==o.length,t=b.options,u="",v="",w="";k=b._initialMetadata.dir!==b.dir?b.dir:t.dir,m=b._initialMetadata.date!==b.date?b.date:t.date;var x=0,y=0;k&&(x|=16),"UNIX"===h?(y=798,x|=A(b.unixPermissions,k)):(y=20,x|=B(b.dosPermissions,k)),i=m.getHours(),i<<=6,i|=m.getMinutes(),i<<=5,i|=m.getSeconds()/2,j=m.getFullYear()-1980,j<<=4,j|=m.getMonth()+1,j<<=5,j|=m.getDate(),q&&(v=s(1,1)+s(e(n),4)+n,u+="up"+s(v.length,2)+v),r&&(w=s(1,1)+s(this.crc32(p),4)+p,u+="uc"+s(w.length,2)+w);var z="";z+="\n\x00",z+=q||r?"\x00\b":"\x00\x00",z+=c.compressionMethod,z+=s(i,2),z+=s(j,2),z+=s(c.crc32,4),z+=s(c.compressedSize,4),z+=s(c.uncompressedSize,4),z+=s(n.length,2),z+=s(u.length,2);var C=f.LOCAL_FILE_HEADER+z+n+u,D=f.CENTRAL_FILE_HEADER+s(y,2)+z+s(p.length,2)+"\x00\x00\x00\x00"+s(x,4)+s(g,4)+n+u+p;return{fileRecord:C,dirRecord:D,compressedObject:c}},D={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=y.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d<c.length;d++)delete this.files[c[d].name];return this},generate:function(a){a=t(a||{},{base64:!0,compression:"STORE",compressionOptions:null,type:"base64",platform:"DOS",comment:null,mimeType:"application/zip"}),d.checkSupport(a.type),("darwin"===a.platform||"freebsd"===a.platform||"linux"===a.platform||"sunos"===a.platform)&&(a.platform="UNIX"),"win32"===a.platform&&(a.platform="DOS");var b,c,e=[],g=0,j=0,k=d.transformTo("string",this.utf8encode(a.comment||this.comment||""));for(var l in this.files)if(this.files.hasOwnProperty(l)){var o=this.files[l],p=o.options.compression||a.compression.toUpperCase(),q=i[p];if(!q)throw new Error(p+" is not a valid compression method !");var r=o.options.compressionOptions||a.compressionOptions||{},u=z.call(this,o,q,r),v=C.call(this,l,o,u,g,a.platform);g+=v.fileRecord.length+u.compressedSize,j+=v.dirRecord.length,e.push(v)}var w="";w=f.CENTRAL_DIRECTORY_END+"\x00\x00\x00\x00"+s(e.length,2)+s(e.length,2)+s(j,4)+s(g,4)+s(k.length,2)+k;var x=a.type.toLowerCase();for(b="uint8array"===x||"arraybuffer"===x||"blob"===x||"nodebuffer"===x?new n(g+j+w.length):new m(g+j+w.length),c=0;c<e.length;c++)b.append(e[c].fileRecord),b.append(e[c].compressedObject.compressedContent);for(c=0;c<e.length;c++)b.append(e[c].dirRecord);b.append(w);var y=b.finalize();switch(a.type.toLowerCase()){case"uint8array":case"arraybuffer":case"nodebuffer":return d.transformTo(a.type.toLowerCase(),y);case"blob":return d.arrayBuffer2Blob(d.transformTo("arraybuffer",y),a.mimeType);case"base64":return a.base64?h.encode(y):y;default:return y}},crc32:function(a,b){return e(a,b)},utf8encode:function(a){return d.transformTo("string",l.utf8encode(a))},utf8decode:function(a){return l.utf8decode(a)}};b.exports=D},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(a,b,c){"use strict";c.LOCAL_FILE_HEADER="PK",c.CENTRAL_FILE_HEADER="PK",c.CENTRAL_DIRECTORY_END="PK",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",c.ZIP64_CENTRAL_DIRECTORY_END="PK",c.DATA_DESCRIPTOR="PK\b"},{}],15:[function(a,b){"use strict";function c(a,b){this.data=a,b||(this.data=e.string2binary(this.data)),this.length=this.data.length,this.index=0}var d=a("./dataReader"),e=a("./utils");c.prototype=new d,c.prototype.byteAt=function(a){return this.data.charCodeAt(a)},c.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)},c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5,"./utils":21}],16:[function(a,b){"use strict";var c=a("./utils"),d=function(){this.data=[]};d.prototype={append:function(a){a=c.transformTo("string",a),this.data.push(a)},finalize:function(){return this.data.join("")}},b.exports=d},{"./utils":21}],17:[function(a,b,c){(function(a){"use strict";if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,c.nodebuffer="undefined"!=typeof a,c.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)c.blob=!1;else{var b=new ArrayBuffer(0);try{c.blob=0===new Blob([b],{type:"application/zip"}).size}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;f.append(b),c.blob=0===f.getBlob("application/zip").size}catch(d){c.blob=!1}}}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],18:[function(a,b){"use strict";function c(a){a&&(this.data=a,this.length=this.data.length,this.index=0)}var d=a("./dataReader");c.prototype=new d,c.prototype.byteAt=function(a){return this.data[a]},c.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5}],19:[function(a,b){"use strict";var c=a("./utils"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{"./utils":21}],20:[function(a,b,c){"use strict";for(var d=a("./utils"),e=a("./support"),f=a("./nodeBuffer"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(e=a[b++],128>e)i[c++]=e;else if(f=g[e],f>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,"utf-8"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo("nodebuffer",a).toString("utf-8");a=d.transformTo(e.uint8array?"uint8array":"array",a);for(var b=[],c=0,f=a.length,g=65536;f>c;){var h=j(a,Math.min(c+g,f));b.push(e.uint8array?k(a.subarray(c,h)):k(a.slice(c,h))),c=h}return b.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;c<a.length;++c)b[c]=255&a.charCodeAt(c);return b}function f(a){var b=65536,d=[],e=a.length,f=c.getTypeOf(a),g=0,h=!0;try{switch(f){case"uint8array":String.fromCharCode.apply(null,new Uint8Array(0));break;case"nodebuffer":String.fromCharCode.apply(null,j(0))}}catch(i){h=!1}if(!h){for(var k="",l=0;l<a.length;l++)k+=String.fromCharCode(a[l]);return k}for(;e>g&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(i){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;c<a.length;c++)b[c]=a[c];return b}var h=a("./support"),i=a("./compressions"),j=a("./nodeBuffer");c.string2binary=function(a){for(var b="",c=0;c<a.length;c++)b+=String.fromCharCode(255&a.charCodeAt(c));return b},c.arrayBuffer2Blob=function(a,b){c.checkSupport("blob"),b=b||"application/zip";try{return new Blob([a],{type:b})}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;return f.append(a),f.getBlob(b)}catch(d){throw new Error("Bug : can't construct the Blob.")}}},c.applyFromCharCode=f;var k={};k.string={string:d,array:function(a){return e(a,new Array(a.length))},arraybuffer:function(a){return k.string.uint8array(a).buffer},uint8array:function(a){return e(a,new Uint8Array(a.length))},nodebuffer:function(a){return e(a,j(a.length))}},k.array={string:f,array:d,arraybuffer:function(a){return new Uint8Array(a).buffer},uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(a)}},k.arraybuffer={string:function(a){return f(new Uint8Array(a))},array:function(a){return g(new Uint8Array(a),new Array(a.byteLength))},arraybuffer:d,uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(new Uint8Array(a))}},k.uint8array={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return a.buffer},uint8array:d,nodebuffer:function(a){return j(a)}},k.nodebuffer={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return k.nodebuffer.uint8array(a).buffer},uint8array:function(a){return g(a,new Uint8Array(a.length))},nodebuffer:d},c.transformTo=function(a,b){if(b||(b=""),!a)return b;c.checkSupport(a);var d=c.getTypeOf(b),e=k[d][a](b);return e},c.getTypeOf=function(a){return"string"==typeof a?"string":"[object Array]"===Object.prototype.toString.call(a)?"array":h.nodebuffer&&j.test(a)?"nodebuffer":h.uint8array&&a instanceof Uint8Array?"uint8array":h.arraybuffer&&a instanceof ArrayBuffer?"arraybuffer":void 0},c.checkSupport=function(a){var b=h[a.toLowerCase()];if(!b)throw new Error(a+" is not supported by this browser")},c.MAX_VALUE_16BITS=65535,c.MAX_VALUE_32BITS=-1,c.pretty=function(a){var b,c,d="";for(c=0;c<(a||"").length;c++)b=a.charCodeAt(c),d+="\\x"+(16>b?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support"),k=a("./object");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;d>e;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a<this.files.length;a++)b=this.files[a],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(h.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8(),b.processAttributes()},readCentralDir:function(){var a;for(this.reader.setIndex(this.centralDirOffset);this.reader.readString(4)===h.CENTRAL_FILE_HEADER;)a=new i({zip64:this.zip64},this.loadOptions),a.readCentralPart(this.reader),this.files.push(a)},readEndOfCentral:function(){var a=this.reader.lastIndexOfSignature(h.CENTRAL_DIRECTORY_END);if(-1===a){var b=!0;try{this.reader.setIndex(0),this.checkSignature(h.LOCAL_FILE_HEADER),b=!1}catch(c){}throw new Error(b?"Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html":"Corrupted zip : can't find end of central directory")}if(this.reader.setIndex(a),this.checkSignature(h.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===g.MAX_VALUE_16BITS||this.diskWithCentralDirStart===g.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===g.MAX_VALUE_16BITS||this.centralDirRecords===g.MAX_VALUE_16BITS||this.centralDirSize===g.MAX_VALUE_32BITS||this.centralDirOffset===g.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),-1===a)throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");this.reader.setIndex(a),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}},prepareReader:function(a){var b=g.getTypeOf(a);this.reader="string"!==b||j.uint8array?"nodebuffer"===b?new e(a):new f(g.transformTo("uint8array",a)):new d(a,this.loadOptions.optimizedBinaryString)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=c},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(a,b){"use strict";function c(a,b){this.options=a,this.loadOptions=b}var d=a("./stringReader"),e=a("./utils"),f=a("./compressedObject"),g=a("./object"),h=0,i=3;c.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},prepareCompressedContent:function(a,b,c){return function(){var d=a.index;a.setIndex(b);var e=a.readData(c);return a.setIndex(d),e}},prepareContent:function(a,b,c,d,f){return function(){var a=e.transformTo(d.uncompressInputType,this.getCompressedContent()),b=d.uncompress(a);if(b.length!==f)throw new Error("Bug : uncompressed data size mismatch");return b}},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readString(this.fileNameLength),a.skip(c),-1==this.compressedSize||-1==this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)");if(b=e.findCompression(this.compressionMethod),null===b)throw new Error("Corrupted zip : compression "+e.pretty(this.compressionMethod)+" unknown (inner file : "+this.fileName+")");if(this.decompressed=new f,this.decompressed.compressedSize=this.compressedSize,this.decompressed.uncompressedSize=this.uncompressedSize,this.decompressed.crc32=this.crc32,this.decompressed.compressionMethod=this.compressionMethod,this.decompressed.getCompressedContent=this.prepareCompressedContent(a,a.index,this.compressedSize,b),this.decompressed.getContent=this.prepareContent(a,a.index,this.compressedSize,b,this.uncompressedSize),this.loadOptions.checkCRC32&&(this.decompressed=e.transformTo("string",this.decompressed.getContent()),g.crc32(this.decompressed)!==this.crc32))throw new Error("Corrupted zip : CRC32 mismatch")},readCentralPart:function(a){if(this.versionMadeBy=a.readInt(2),this.versionNeeded=a.readInt(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4),this.fileNameLength=a.readInt(2),this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");this.fileName=a.readString(this.fileNameLength),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readString(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=16&this.externalFileAttributes?!0:!1,a===h&&(this.dosPermissions=63&this.externalFileAttributes),a===i&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileName.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var a=new d(this.extraFields[1].value);this.uncompressedSize===e.MAX_VALUE_32BITS&&(this.uncompressedSize=a.readInt(8)),this.compressedSize===e.MAX_VALUE_32BITS&&(this.compressedSize=a.readInt(8)),this.localHeaderOffset===e.MAX_VALUE_32BITS&&(this.localHeaderOffset=a.readInt(8)),this.diskNumberStart===e.MAX_VALUE_32BITS&&(this.diskNumberStart=a.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index;for(this.extraFields=this.extraFields||{};a.index<e+this.extraFieldsLength;)b=a.readInt(2),c=a.readInt(2),d=a.readString(c),this.extraFields[b]={id:b,length:c,value:d}},handleUTF8:function(){if(this.useUTF8())this.fileName=g.utf8decode(this.fileName),this.fileComment=g.utf8decode(this.fileComment);else{var a=this.findExtraFieldUnicodePath();null!==a&&(this.fileName=a);var b=this.findExtraFieldUnicodeComment();null!==b&&(this.fileComment=b)}},findExtraFieldUnicodePath:function(){var a=this.extraFields[28789];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileName)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5)) +}return null},findExtraFieldUnicodeComment:function(){var a=this.extraFields[25461];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileComment)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))}return null}},b.exports=c},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(a,b){"use strict";var c=a("./lib/utils/common").assign,d=a("./lib/deflate"),e=a("./lib/inflate"),f=a("./lib/zlib/constants"),g={};c(g,d,e,f),b.exports=g},{"./lib/deflate":25,"./lib/inflate":26,"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(a,b,c){"use strict";function d(a,b){var c=new s(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}function f(a,b){return b=b||{},b.gzip=!0,d(a,b)}var g=a("./zlib/deflate.js"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=0,m=4,n=0,o=1,p=-1,q=0,r=8,s=function(a){this.options=h.assign({level:p,method:r,chunkSize:16384,windowBits:15,memLevel:8,strategy:q,to:""},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==n)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};s.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?m:l,e.input="string"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),c=g.deflate(e,d),c!==o&&c!==n)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&d===m)&&this.onData("string"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&c!==o);return d===m?(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===n):!0},s.prototype.onData=function(a){this.chunks.push(a)},s.prototype.onEnd=function(a){a===n&&(this.result="string"===this.options.to?this.chunks.join(""):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=s,c.deflate=d,c.deflateRaw=e,c.gzip=f},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(a,b,c){"use strict";function d(a,b){var c=new m(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a("./zlib/inflate.js"),g=a("./utils/common"),h=a("./utils/strings"),i=a("./zlib/constants"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=a("./zlib/gzheader"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?i.Z_FINISH:i.Z_NO_FLUSH,l.input="string"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),c=f.inflate(l,i.Z_NO_FLUSH),c!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&("string"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d===i.Z_FINISH?(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK):!0},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result="string"===this.options.to?this.chunks.join(""):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;256>j;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;h>c;)if(f=a[c++],128>f)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&h>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":27}],29:[function(a,b){"use strict";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){"use strict";function c(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function d(a,b,c,d){var f=e,g=d+c;a=-1^a;for(var h=d;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var e=c();b.exports=d},{}],32:[function(a,b,c){"use strict";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-jb?a.strstart-(a.w_size-jb):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ib,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ib-(m-f),f=m-ib,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-jb)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=hb)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+1])&a.hash_mask;a.insert&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+hb-1])&a.hash_mask,a.prev[f&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=f,f++,a.insert--,!(a.lookahead+a.insert<hb)););}while(a.lookahead<jb&&0!==a.strm.avail_in)}function n(a,b){var c=65535;for(c>a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return sb;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return sb;if(a.strstart-a.block_start>=a.w_size-jb&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?sb:sb}function o(a,b){for(var c,d;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),0!==c&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c)),a.match_length>=hb)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-hb),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=hb){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart;while(0!==--a.match_length);a.strstart++}else a.strstart+=a.match_length,a.match_length=0,a.ins_h=a.window[a.strstart],a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+1])&a.hash_mask;else d=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++;if(d&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function p(a,b){for(var c,d,e;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),a.prev_length=a.match_length,a.prev_match=a.match_start,a.match_length=hb-1,0!==c&&a.prev_length<a.max_lazy_match&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c),a.match_length<=5&&(a.strategy===S||a.match_length===hb&&a.strstart-a.match_start>4096)&&(a.match_length=hb-1)),a.prev_length>=hb&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-hb,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-hb),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart);while(0!==--a.prev_length);if(a.match_available=0,a.match_length=hb-1,a.strstart++,d&&(h(a,!1),0===a.strm.avail_out))return sb}else if(a.match_available){if(d=D._tr_tally(a,0,a.window[a.strstart-1]),d&&h(a,!1),a.strstart++,a.lookahead--,0===a.strm.avail_out)return sb}else a.match_available=1,a.strstart++,a.lookahead--}return a.match_available&&(d=D._tr_tally(a,0,a.window[a.strstart-1]),a.match_available=0),a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function q(a,b){for(var c,d,e,f,g=a.window;;){if(a.lookahead<=ib){if(m(a),a.lookahead<=ib&&b===H)return sb;if(0===a.lookahead)break}if(a.match_length=0,a.lookahead>=hb&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ib;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ib-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=hb?(c=D._tr_tally(a,1,a.match_length-hb),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return sb;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=hb-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*fb),this.dyn_dtree=new C.Buf16(2*(2*db+1)),this.bl_tree=new C.Buf16(2*(2*eb+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(gb+1),this.heap=new C.Buf16(2*cb+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*cb+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?lb:qb,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<<i.w_bits,i.w_mask=i.w_size-1,i.hash_bits=f+7,i.hash_size=1<<i.hash_bits,i.hash_mask=i.hash_size-1,i.hash_shift=~~((i.hash_bits+hb-1)/hb),i.window=new C.Buf8(2*i.w_size),i.head=new C.Buf16(i.hash_size),i.prev=new C.Buf16(i.w_size),i.lit_bufsize=1<<f+6,i.pending_buf_size=4*i.lit_bufsize,i.pending_buf=new C.Buf8(i.pending_buf_size),i.d_buf=i.lit_bufsize>>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===rb&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===lb)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=mb):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,wb),h.status=qb);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=kb),m+=31-m%31,h.status=qb,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===mb)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=nb)}else h.status=nb;if(h.status===nb)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.name.length?255&h.gzhead.name.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ob)}else h.status=ob;if(h.status===ob)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.comment.length?255&h.gzhead.comment.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=pb)}else h.status=pb;if(h.status===pb&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=qb)):h.status=qb),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===rb&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==rb){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===ub||o===vb)&&(h.status=rb),o===sb||o===ub)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===tb&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==lb&&b!==mb&&b!==nb&&b!==ob&&b!==pb&&b!==qb&&b!==rb?d(a,O):(a.state=null,b===qb?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,ab=29,bb=256,cb=bb+1+ab,db=30,eb=19,fb=2*cb+1,gb=15,hb=3,ib=258,jb=ib+hb+1,kb=32,lb=42,mb=69,nb=73,ob=91,pb=103,qb=113,rb=666,sb=1,tb=2,ub=3,vb=4,wb=3,xb=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new xb(0,0,0,0,n),new xb(4,4,8,4,o),new xb(4,5,16,8,o),new xb(4,6,32,32,o),new xb(4,4,16,16,p),new xb(8,16,32,32,p),new xb(8,16,128,128,p),new xb(8,32,128,256,p),new xb(32,128,258,1024,p),new xb(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";var c=30,d=12;b.exports=function(a,b){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;e=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=e.dmax,l=e.wsize,m=e.whave,n=e.wnext,o=e.window,p=e.hold,q=e.bits,r=e.lencode,s=e.distcode,t=(1<<e.lenbits)-1,u=(1<<e.distbits)-1;a:do{15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=r[p&t];b:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<<w)-1)];continue b}if(32&w){e.mode=d;break a}a.msg="invalid literal/length code",e.mode=c;break a}x=65535&v,w&=15,w&&(w>q&&(p+=B[f++]<<q,q+=8),x+=p&(1<<w)-1,p>>>=w,q-=w),15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=s[p&u];c:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<<w)-1)];continue c}a.msg="invalid distance code",e.mode=c;break a}if(y=65535&v,w&=15,w>q&&(p+=B[f++]<<q,q+=8,w>q&&(p+=B[f++]<<q,q+=8)),y+=p&(1<<w)-1,y>k){a.msg="invalid distance too far back",e.mode=c;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&e.sane){a.msg="invalid distance too far back",e.mode=c;break a}if(z=0,A=o,0===n){if(z+=l-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(w>n){if(z+=l+n-w,w-=n,x>w){x-=w;do C[h++]=o[z++];while(--w);if(z=0,x>n){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(g>f&&j>h);x=q>>3,f-=x,q-=x<<3,p&=(1<<q)-1,a.next_in=f,a.next_out=h,a.avail_in=g>f?5+(g-f):5-(f-g),a.avail_out=j>h?257+(j-h):257-(h-j),e.hold=p,e.bits=q}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(ob),b.distcode=b.distdyn=new r.Buf32(pb),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=(b>>4)+1,48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,rb)}function k(a){if(sb){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),sb=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<<f.wbits,f.wnext=0,f.whave=0,f.window=new r.Buf8(f.wsize)),d>=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave<f.wsize&&(f.whave+=e))),0}function m(a,b){var c,e,f,g,h,i,j,m,n,o,p,q,ob,pb,qb,rb,sb,tb,ub,vb,wb,xb,yb,zb,Ab=0,Bb=new r.Buf8(4),Cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!a||!a.state||!a.output||!a.input&&0!==a.avail_in)return F;c=a.state,c.mode===V&&(c.mode=W),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,o=i,p=j,xb=C;a:for(;;)switch(c.mode){case K:if(0===c.wrap){c.mode=W;break}for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(2&c.wrap&&35615===m){c.check=0,Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=lb;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=lb;break}if(m>>>=4,n-=4,wb=(15&m)+8,0===c.wbits)c.wbits=wb;else if(wb>c.wbits){a.msg="invalid window size",c.mode=lb;break}c.dmax=1<<wb,a.adler=c.check=1,c.mode=512&m?T:V,m=0,n=0;break;case L:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.flags=m,(255&c.flags)!==J){a.msg="unknown compression method",c.mode=lb;break}if(57344&c.flags){a.msg="unknown header flags set",c.mode=lb;break}c.head&&(c.head.text=m>>8&1),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.time=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,Bb[2]=m>>>16&255,Bb[3]=m>>>24&255,c.check=t(c.check,Bb,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.xflags=255&m,c.head.os=m>>8),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length=m,c.head&&(c.head.extra_len=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wb=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wb)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.name+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.comment+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(65535&c.check)){a.msg="header crc mismatch",c.mode=lb;break}m=0,n=0}c.head&&(c.head.hcrc=c.flags>>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}a.adler=c.check=d(m),m=0,n=0,c.mode=U;case U:if(0===c.havedict)return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,E;a.adler=c.check=1,c.mode=V;case V:if(b===A||b===B)break a;case W:if(c.last){m>>>=7&n,n-=7&n,c.mode=ib;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}switch(c.last=1&m,m>>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=bb,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=lb}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if((65535&m)!==(m>>>16^65535)){a.msg="invalid stored block lengths",c.mode=lb;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.nlen=(31&m)+257,m>>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=lb;break}c.have=0,c.mode=_;case _:for(;c.have<c.ncode;){for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.lens[Cb[c.have++]]=7&m,m>>>=3,n-=3}for(;c.have<19;)c.lens[Cb[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,yb={bits:c.lenbits},xb=v(w,c.lens,0,19,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg="invalid code lengths set",c.mode=lb;break}c.have=0,c.mode=ab;case ab:for(;c.have<c.nlen+c.ndist;){for(;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(16>sb)m>>>=qb,n-=qb,c.lens[c.have++]=sb;else{if(16===sb){for(zb=qb+2;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m>>>=qb,n-=qb,0===c.have){a.msg="invalid bit length repeat",c.mode=lb;break}wb=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sb){for(zb=qb+3;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=3+(7&m),m>>>=3,n-=3}else{for(zb=qb+7;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=lb;break}for(;q--;)c.lens[c.have++]=wb}}if(c.mode===lb)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=lb;break}if(c.lenbits=9,yb={bits:c.lenbits},xb=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg="invalid literal/lengths set",c.mode=lb;break}if(c.distbits=6,c.distcode=c.distdyn,yb={bits:c.distbits},xb=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,yb),c.distbits=yb.bits,xb){a.msg="invalid distances set",c.mode=lb;break}if(c.mode=bb,b===B)break a;case bb:c.mode=cb;case cb:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1); +break}for(c.back=0;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(rb&&0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.lencode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,c.length=sb,0===rb){c.mode=hb;break}if(32&rb){c.back=-1,c.mode=V;break}if(64&rb){a.msg="invalid literal/length code",c.mode=lb;break}c.extra=15&rb,c.mode=db;case db:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=eb;case eb:for(;Ab=c.distcode[m&(1<<c.distbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.distcode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,64&rb){a.msg="invalid distance code",c.mode=lb;break}c.offset=sb,c.extra=15&rb,c.mode=fb;case fb:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.offset+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=lb;break}c.mode=gb;case gb:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=lb;break}q>c.wnext?(q-=c.wnext,ob=c.wsize-q):ob=c.wnext-q,q>c.length&&(q=c.length),pb=c.window}else pb=f,ob=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pb[ob++];while(--q);0===c.length&&(c.mode=cb);break;case hb:if(0===j)break a;f[h++]=c.length,j--,c.mode=cb;break;case ib:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<<n,n+=8}if(p-=j,a.total_out+=p,c.total+=p,p&&(a.adler=c.check=c.flags?t(c.check,f,p,h-p):s(c.check,f,p,h-p)),p=j,(c.flags?m:d(m))!==c.check){a.msg="incorrect data check",c.mode=lb;break}m=0,n=0}c.mode=jb;case jb:if(c.wrap&&c.flags){for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(4294967295&c.total)){a.msg="incorrect length check",c.mode=lb;break}m=0,n=0}c.mode=kb;case kb:xb=D;break a;case lb:xb=G;break a;case mb:return H;case nb:default:return F}return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,(c.wsize||p!==a.avail_out&&c.mode<lb&&(c.mode<ib||b!==z))&&l(a,a.output,a.next_out,p-a.avail_out)?(c.mode=mb,H):(o-=a.avail_in,p-=a.avail_out,a.total_in+=o,a.total_out+=p,c.total+=p,c.wrap&&p&&(a.adler=c.check=c.flags?t(c.check,f,p,a.next_out-p):s(c.check,f,p,a.next_out-p)),a.data_type=c.bits+(c.last?64:0)+(c.mode===V?128:0)+(c.mode===bb||c.mode===Y?256:0),(0===o&&0===p||b===z)&&xb===C&&(xb=I),xb)}function n(a){if(!a||!a.state)return F;var b=a.state;return b.window&&(b.window=null),a.state=null,C}function o(a,b){var c;return a&&a.state?(c=a.state,0===(2&c.wrap)?F:(c.head=b,b.done=!1,C)):F}var p,q,r=a("../utils/common"),s=a("./adler32"),t=a("./crc32"),u=a("./inffast"),v=a("./inftrees"),w=0,x=1,y=2,z=4,A=5,B=6,C=0,D=1,E=2,F=-2,G=-3,H=-4,I=-5,J=8,K=1,L=2,M=3,N=4,O=5,P=6,Q=7,R=8,S=9,T=10,U=11,V=12,W=13,X=14,Y=15,Z=16,$=17,_=18,ab=19,bb=20,cb=21,db=22,eb=23,fb=24,gb=25,hb=26,ib=27,jb=28,kb=29,lb=30,mb=31,nb=32,ob=852,pb=592,qb=15,rb=qb,sb=!0;c.inflateReset=g,c.inflateReset2=h,c.inflateResetKeep=f,c.inflateInit=j,c.inflateInit2=i,c.inflate=m,c.inflateEnd=n,c.inflateGetHeader=o,c.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(a,b){"use strict";var c=a("../utils/common"),d=15,e=852,f=592,g=0,h=1,i=2,j=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],k=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],l=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],m=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];b.exports=function(a,b,n,o,p,q,r,s){var t,u,v,w,x,y,z,A,B,C=s.bits,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=null,O=0,P=new c.Buf16(d+1),Q=new c.Buf16(d+1),R=null,S=0;for(D=0;d>=D;D++)P[D]=0;for(E=0;o>E;E++)P[b[n+E]]++;for(H=C,G=d;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;G>F&&0===P[F];F++);for(F>H&&(H=F),K=1,D=1;d>=D;D++)if(K<<=1,K-=P[D],0>K)return-1;if(K>0&&(a===g||1!==G))return-1;for(Q[1]=0,D=1;d>D;D++)Q[D+1]=Q[D]+P[D];for(E=0;o>E;E++)0!==b[n+E]&&(r[Q[b[n+E]]++]=E);if(a===g?(N=R=r,y=19):a===h?(N=j,O-=257,R=k,S-=257,y=256):(N=l,R=m,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<<H,w=L-1,a===h&&L>e||a===i&&L>f)return 1;for(var T=0;;){T++,z=D-J,r[E]<y?(A=0,B=r[E]):r[E]>y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<<D-J,u=1<<I,F=u;do u-=t,p[x+(M>>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<<D-1;M&t;)t>>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[n+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<<I;G>I+J&&(K-=P[I+J],!(0>=K));)I++,K<<=1;if(L+=1<<I,a===h&&L>e||a===i&&L>f)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?gb[a]:gb[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>V-c?(a.bi_buf|=b<<a.bi_valid&65535,f(a,a.bi_buf),a.bi_buf=b>>V-a.bi_valid,a.bi_valid+=c-V):(a.bi_buf|=b<<a.bi_valid&65535,a.bi_valid+=c)}function h(a,b,c){g(a,c[2*b],c[2*b+1])}function i(a,b){var c=0;do c|=1&a,a>>>=1,c<<=1;while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;U>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;T>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(U+1),g=0;for(d=1;U>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(U+1);for(c=0,d=0;O-1>d;d++)for(ib[d]=c,a=0;a<1<<_[d];a++)hb[c++]=d;for(hb[c-1]=d,e=0,d=0;16>d;d++)for(jb[d]=e,a=0;a<1<<ab[d];a++)gb[e++]=d;for(e>>=7;R>d;d++)for(jb[d]=e<<7,a=0;a<1<<ab[d]-7;a++)gb[256+e++]=d;for(b=0;U>=b;b++)f[b]=0;for(a=0;143>=a;)eb[2*a+1]=8,a++,f[8]++;for(;255>=a;)eb[2*a+1]=9,a++,f[9]++;for(;279>=a;)eb[2*a+1]=7,a++,f[7]++;for(;287>=a;)eb[2*a+1]=8,a++,f[8]++;for(l(eb,Q+1,f),a=0;R>a;a++)fb[2*a+1]=5,fb[2*a]=i(a,5);kb=new nb(eb,_,P+1,Q,U),lb=new nb(fb,ab,0,R,U),mb=new nb(new Array(0),bb,0,S,W)}function n(a){var b;for(b=0;Q>b;b++)a.dyn_ltree[2*b]=0;for(b=0;R>b;b++)a.dyn_dtree[2*b]=0;for(b=0;S>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*X]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]<a[f]||a[e]===a[f]&&d[b]<=d[c]}function r(a,b,c){for(var d=a.heap[c],e=c<<1;e<=a.heap_len&&(e<a.heap_len&&q(b,a.heap[e+1],a.heap[e],a.depth)&&e++,!q(b,d,a.heap[e],a.depth));)a.heap[c]=a.heap[e],c=e,e<<=1;a.heap[c]=d}function s(a,b,c){var d,f,i,j,k=0;if(0!==a.last_lit)do d=a.pending_buf[a.d_buf+2*k]<<8|a.pending_buf[a.d_buf+2*k+1],f=a.pending_buf[a.l_buf+k],k++,0===d?h(a,f,b):(i=hb[f],h(a,i+P+1,b),j=_[i],0!==j&&(f-=ib[i],g(a,f,j)),d--,i=e(d),h(a,i,c),j=ab[i],0!==j&&(d-=jb[i],g(a,d,j)));while(k<a.last_lit);h(a,X,b)}function t(a,b){var c,d,e,f=b.dyn_tree,g=b.stat_desc.static_tree,h=b.stat_desc.has_stree,i=b.stat_desc.elems,j=-1;for(a.heap_len=0,a.heap_max=T,c=0;i>c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++h<i&&e===g||(j>h?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*Y]++):10>=h?a.bl_tree[2*Z]++:a.bl_tree[2*$]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++j<k&&e===i)){if(l>j){do h(a,e,a.bl_tree);while(0!==--j)}else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,Y,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,Z,a.bl_tree),g(a,j-3,3)):(h(a,$,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc),b=S-1;b>=3&&0===a.bl_tree[2*cb[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*cb[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;P>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){pb||(m(),pb=!0),a.l_desc=new ob(a.dyn_ltree,kb),a.d_desc=new ob(a.dyn_dtree,lb),a.bl_desc=new ob(a.bl_tree,mb),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,X,eb),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,eb,fb)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(hb[c]+P+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=3,N=258,O=29,P=256,Q=P+1+O,R=30,S=19,T=2*Q+1,U=15,V=16,W=7,X=256,Y=16,Z=17,$=18,_=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ab=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],bb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],db=512,eb=new Array(2*(Q+2));d(eb);var fb=new Array(2*R);d(fb);var gb=new Array(db);d(gb);var hb=new Array(N-M+1);d(hb);var ib=new Array(O);d(ib);var jb=new Array(R);d(jb);var kb,lb,mb,nb=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},ob=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},pb=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}); \ No newline at end of file diff --git a/plugins/tiddlywiki/jszip/files/tiddlywiki.files b/plugins/tiddlywiki/jszip/files/tiddlywiki.files new file mode 100644 index 000000000..a903df3d4 --- /dev/null +++ b/plugins/tiddlywiki/jszip/files/tiddlywiki.files @@ -0,0 +1,20 @@ +{ + "tiddlers": [ + { + "file": "jszip.min.v2.5.0.js", + "fields": { + "type": "application/javascript", + "title": "$:/plugins/tiddlywiki/jszip/jszip.js", + "module-type": "library" + }, + "prefix": "", + "suffix": "" + },{ + "file": "LICENSE.markdown", + "fields": { + "type": "text/markdown", + "title": "$:/plugins/tiddlywiki/jszip/license" + } + } + ] +} diff --git a/plugins/tiddlywiki/jszip/plugin.info b/plugins/tiddlywiki/jszip/plugin.info new file mode 100644 index 000000000..f3cf1789f --- /dev/null +++ b/plugins/tiddlywiki/jszip/plugin.info @@ -0,0 +1,7 @@ +{ + "title": "$:/plugins/tiddlywiki/jszip", + "description": "Wrapper for JSZip by Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso", + "author": "JeremyRuston", + "core-version": ">=5.0.0", + "list": "readme license" +} diff --git a/plugins/tiddlywiki/jszip/readme.tid b/plugins/tiddlywiki/jszip/readme.tid new file mode 100644 index 000000000..a641e5b1e --- /dev/null +++ b/plugins/tiddlywiki/jszip/readme.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/async/readme + +This plugin packages [[JSZip|https://stuk.github.io/jszip/]] for use by other plugins. It does not provide any end-user visible features. From 64b916bb43bd19ce35b0b9e2f41324d4c3aa5886 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sat, 19 Dec 2015 18:47:58 +0000 Subject: [PATCH 140/242] Ignore any node_modules directory --- .gitignore | 1 + .jshintignore | 1 + .npmignore | 1 + 3 files changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index d8c42b06a..5d7cc4870 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .c9/ tmp/ output/ +node_modules/ diff --git a/.jshintignore b/.jshintignore index cca917270..1e934b384 100644 --- a/.jshintignore +++ b/.jshintignore @@ -5,3 +5,4 @@ plugins/tiddlywiki/highlight/files/ plugins/tiddlywiki/jasmine/files/ plugins/tiddlywiki/markdown/files/ plugins/tiddlywiki/markdown/files/ +node_modules/ diff --git a/.npmignore b/.npmignore index d8c42b06a..5d7cc4870 100644 --- a/.npmignore +++ b/.npmignore @@ -2,3 +2,4 @@ .c9/ tmp/ output/ +node_modules/ From ad1793c8f58f5732a16ba978bfe4aa787b3f590b Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sat, 19 Dec 2015 18:52:25 +0000 Subject: [PATCH 141/242] Minor tweaks to boot kernel for AWS Part of the upcoming AWS integration work is a custom build of TiddlyWiki that can run as an Amazon Lambda function. These tweaks enable the new build to control the loading of SJCL, the package info, and any preloaded tiddlers. --- boot/boot.js | 12 ++++++------ boot/bootprefix.js | 9 ++++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/boot/boot.js b/boot/boot.js index dab39238f..9d47c9ba8 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -590,7 +590,7 @@ Crypto helper object for encrypted content. It maintains the password text in a the password, and to encrypt/decrypt a block of text */ $tw.utils.Crypto = function() { - var sjcl = $tw.node ? require("./sjcl.js") : window.sjcl, + var sjcl = $tw.node ? (global.sjcl || require("./sjcl.js")) : window.sjcl, currentPassword = null, callSjcl = function(method,inputText,password) { password = password || currentPassword; @@ -1399,10 +1399,6 @@ $tw.loadTiddlersBrowser = function() { for(var t=0; t<containerIds.length; t++) { $tw.wiki.addTiddlers($tw.wiki.deserializeTiddlers("(DOM)",document.getElementById(containerIds[t]))); } - // Load any preloaded tiddlers - if($tw.preloadTiddlers) { - $tw.wiki.addTiddlers($tw.preloadTiddlers); - } }; } else { @@ -1808,7 +1804,7 @@ $tw.boot.startup = function(options) { $tw.boot.wikiPath = process.cwd(); } // Read package info - $tw.packageInfo = require("../package.json"); + $tw.packageInfo = $tw.packageInfo || require("../package.json"); // Check node version number if(!$tw.utils.checkVersions(process.version.substr(1),$tw.packageInfo.engines.node.substr(2))) { $tw.utils.error("TiddlyWiki5 requires node.js version " + $tw.packageInfo.engines.node); @@ -1866,6 +1862,10 @@ $tw.boot.startup = function(options) { } else { $tw.loadTiddlersNode(); } + // Load any preloaded tiddlers + if($tw.preloadTiddlers) { + $tw.wiki.addTiddlers($tw.preloadTiddlers); + } // Unpack plugin tiddlers $tw.wiki.readPluginInfo(); $tw.wiki.registerPluginTiddlers("plugin",$tw.safeMode ? ["$:/core"] : undefined); diff --git a/boot/bootprefix.js b/boot/bootprefix.js index ae0712d4e..e9c3f3c32 100644 --- a/boot/bootprefix.js +++ b/boot/bootprefix.js @@ -99,7 +99,14 @@ $tw.preloadTiddler = function(fields) { $tw.preloadTiddlers.push(fields); }; -return $tw +/* +Convenience function for pushing an array of tiddlers onto the preloading array +*/ +$tw.preloadTiddlerArray = function(fieldsArray) { + $tw.preloadTiddlers.push.apply($tw.preloadTiddlers,fieldsArray); +}; + +return $tw; }); From 07ac75b08409a2f3d696bce4172e52429c8c6386 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sun, 20 Dec 2015 08:53:29 +0000 Subject: [PATCH 142/242] Fix search dropdown positioning This fixes a problem introduced in 72941f3e9a916948222ff7be540d896e2b1901f6 whereby the change to tc-drop-down affected other dropdowns. --- core/ui/SideBarLists.tid | 8 ++------ themes/tiddlywiki/vanilla/base.tid | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/core/ui/SideBarLists.tid b/core/ui/SideBarLists.tid index 2e75a63ff..dfe012502 100644 --- a/core/ui/SideBarLists.tid +++ b/core/ui/SideBarLists.tid @@ -29,16 +29,12 @@ title: $:/core/ui/SideBarLists </$reveal> </div> -<$reveal state="$:/temp/search" type="nomatch" text=""> +<$reveal tag="div" class="tc-block-dropdown-wrapper" state="$:/temp/search" type="nomatch" text=""> -<$reveal state=<<qualify "$:/state/popup/search-dropdown">> type="nomatch" text="" default=""> - -<div class="tc-drop-down tc-search-drop-down tc-popup-handle"> +<$reveal tag="div" class="tc-block-dropdown tc-search-drop-down tc-popup-handle" state=<<qualify "$:/state/popup/search-dropdown">> type="nomatch" text="" default=""> {{$:/core/ui/SearchResults}} -</div> - </$reveal> </$reveal> diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index 2ceda5931..b809ba9dc 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1191,8 +1191,6 @@ html body.tc-body.tc-single-tiddler-window { } .tc-drop-down { - position: absolute; - z-index: 1000; min-width: 380px; border: 1px solid <<colour dropdown-border>>; background-color: <<colour dropdown-background>>; @@ -1203,10 +1201,6 @@ html body.tc-body.tc-single-tiddler-window { line-height: 1.4; } -.tc-search-drop-down { - margin-left: -12px; -} - .tc-drop-down .tc-drop-down { margin-left: 14px; } @@ -1304,6 +1298,11 @@ html body.tc-body.tc-single-tiddler-window { margin: 4px 0 0 0; white-space: nowrap; z-index: 1000; + text-shadow: none; +} + +.tc-block-dropdown.tc-search-drop-down { + margin-left: -12px; } .tc-block-dropdown a { @@ -1311,6 +1310,11 @@ html body.tc-body.tc-single-tiddler-window { padding: 4px 14px 4px 14px; } +.tc-block-dropdown.tc-search-drop-down a { + display: block; + padding: 0px 10px 0px 10px; +} + .tc-drop-down .tc-dropdown-item, .tc-block-dropdown .tc-dropdown-item { padding: 4px 14px 4px 7px; @@ -1323,6 +1327,10 @@ html body.tc-body.tc-single-tiddler-window { text-decoration: none; } +.tc-search-results { + padding: 0 7px 0 7px; +} + /* ** Modals */ From 3959b1b89e95595ee073ce723a4bfc8aea8e2bd7 Mon Sep 17 00:00:00 2001 From: Irene Knapp <ireneista@google.com> Date: Mon, 21 Dec 2015 15:00:05 -0800 Subject: [PATCH 143/242] Add Google, Inc as a signer of the entity CLA. I emailed a PDF with an actual signature, a moment ago, to jeremy@jermolene.com. My understanding is that this signature would be valid not just for me but for other Googlers who contribute to TiddlyWiki in future, if there are any. So I've omitted my personal name from the signature line - I think this is probably the way it's supposed to be? If you look at the PDF you'll see that it's actually one of our lawyers who agreed to it, not me as an individual. I'll be using my @google.com email address for this and any future patches, so record-keeping at TiddlyWiki's end shouldn't need a record of GitHub usernames. --- licenses/cla-entity.md | 1 + 1 file changed, 1 insertion(+) diff --git a/licenses/cla-entity.md b/licenses/cla-entity.md index 0d2af0d67..cacf862c2 100644 --- a/licenses/cla-entity.md +++ b/licenses/cla-entity.md @@ -114,3 +114,4 @@ Contributors ------------ Jeremy Ruston, @Jermolene for Federatial Limited, 2011/11/22 +Google Inc, 2015/12/21 From 7037b66479c57d921b9e91b9b7e236546ac8a211 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 23 Dec 2015 08:34:52 +0000 Subject: [PATCH 144/242] Updated Dutch translation from @gernert --- languages/nl-NL/Buttons.multids | 14 ++++++++++++- languages/nl-NL/ControlPanel.multids | 21 ++++++++++++++++++- languages/nl-NL/Docs/ModuleTypes.multids | 6 +++--- languages/nl-NL/Docs/PaletteColours.multids | 13 ++++++------ languages/nl-NL/EditTemplate.multids | 2 ++ languages/nl-NL/Fields.multids | 4 ++-- languages/nl-NL/Help/unpackplugin.tid | 8 ++----- languages/nl-NL/Import.multids | 1 + languages/nl-NL/Misc.multids | 7 +++++++ languages/nl-NL/Search.multids | 3 +++ .../application%2Fx-tiddler-dictionary.tid | 2 +- 11 files changed, 61 insertions(+), 20 deletions(-) diff --git a/languages/nl-NL/Buttons.multids b/languages/nl-NL/Buttons.multids index ec56ce2fd..c09f650fb 100644 --- a/languages/nl-NL/Buttons.multids +++ b/languages/nl-NL/Buttons.multids @@ -21,7 +21,7 @@ Edit/Hint: Wijzig deze tiddler Encryption/Caption: versleuteling Encryption/ClearPassword/Caption: verwijder wachtwoord Encryption/ClearPassword/Hint: Verwijder het wachtwoord en sla de wiki onversleuteld op -Encryption/Hint: Vul in / verwijder een wachtwoord om deze wiki op te slaan +Encryption/Hint: Vul in / verwijder wachtwoord om deze wiki op te slaan Encryption/SetPassword/Caption: vul wachtwoord in Encryption/SetPassword/Hint: Vul een wachtwoord in om deze wiki versleuteld op te slaan ExportPage/Caption: exporteer alle @@ -30,6 +30,14 @@ ExportTiddler/Caption: exporteer tiddler ExportTiddler/Hint: Exporteer tiddler ExportTiddlers/Caption: exporteer tiddlers ExportTiddlers/Hint: Exporteer tiddlers +Fold/Caption: klap tiddler in +Fold/FoldBar/Caption: in- / uitklap balk +Fold/FoldBar/Hint: Optionele in- / uitklapbalken +Fold/Hint: Klap de tekst van deze tiddler in +FoldAll/Caption: klap alle tiddlers in +FoldAll/Hint: Klap de tekst van alle open tiddlers in +FoldOthers/Caption: klap andere tiddlers in +FoldOthers/Hint: Klap de tekst van alle andere open tiddlers in FullScreen/Caption: volledig scherm FullScreen/Hint: Start of verlaat 'volledig scherm' Help/Caption: hulp @@ -74,3 +82,7 @@ TagManager/Caption: labelmanager TagManager/Hint: Open labelmanager Theme/Caption: thema Theme/Hint: Kies het thema +Unfold/Caption: klap tiddler uit +Unfold/Hint: Klap de tekst van deze tiddler uit +UnfoldAll/Caption: klap alle tiddlers uit +UnfoldAll/Hint: Klap de tekst van alle open tiddlers uit diff --git a/languages/nl-NL/ControlPanel.multids b/languages/nl-NL/ControlPanel.multids index fca1322d8..58573d2f8 100644 --- a/languages/nl-NL/ControlPanel.multids +++ b/languages/nl-NL/ControlPanel.multids @@ -38,6 +38,11 @@ Palette/Editor/Reset/Caption: reset Palette/HideEditor/Caption: verberg editor Palette/Prompt: Huidig palet: Palette/ShowEditor/Caption: toon editor +Parsing/Block/Caption: 'Block parse' regels +Parsing/Caption: 'Parsing' (ontleding) +Parsing/Hint: Hier kan je globaal individuele wiki 'parser' regels uitzetten. Wees voorzichtig daar het uitzetten van sommige 'parser' regels het juist functioneren van ~Tiddlywiki kan beletten (je kan het normale gedrag herstellen met [['safe mode'|http://tiddlywiki.com/#SafeMode]]) +Parsing/Inline/Caption: 'Inline parse' regels +Parsing/Pragma/Caption: 'Pragma parse' regels Plugins/Add/Caption: Verkrijg meer plugins Plugins/Add/Hint: Installeer plugins van de officiële bibliotheek Plugins/Caption: Plugins @@ -47,11 +52,14 @@ Plugins/Disabled/Status: (uitgeschakeld) Plugins/Empty/Hint: Niets Plugins/Enable/Caption: activeer Plugins/Enable/Hint: Activeer deze plugin bij verversen van deze pagina +Plugins/Install: installeer Plugins/Installed/Hint: Geïnstalleerde plugins: Plugins/Language/Prompt: Talen Plugins/Languages/Caption: Talen Plugins/Languages/Hint: Taal plugins +Plugins/OpenPluginLibrary: open plugin bibliotheek Plugins/Plugin/Prompt: Plugins +Plugins/Reinstall: herinstalleer Plugins/Theme/Prompt: Thema's Plugins/Themes/Caption: Thema's Plugins/Themes/Hint: Thema plugins @@ -72,6 +80,9 @@ Settings/AutoSave/Caption: Automatisch opslaan Settings/AutoSave/Disabled/Description: Sla veranderingen niet automatisch op Settings/AutoSave/Enabled/Description: Sla veranderingen automatisch op Settings/AutoSave/Hint: Sla veranderingen tijdens wijzigen automatisch op +Settings/CamelCase/Caption: 'Camel Case' wiki links +Settings/CamelCase/Description: Zet automatisch ~CamelCase linken aan +Settings/CamelCase/Hint: Je kan globaal het automatisch linken van ~CamelCase woorden uitzetten. Dit vereist herladen van de wiki om effect te hebben. Settings/Caption: Instellingen Settings/DefaultSidebarTab/Caption: Standaard tab in zijpaneel Settings/DefaultSidebarTab/Hint: Geef aan welke tab in het zijpaneel standaard wordt getoond @@ -92,6 +103,9 @@ Settings/NavigationHistory/Caption: Navigeer-geschiedenis Settings/NavigationHistory/Hint: Werk de browsergeschiedenis bij als er naar een tiddler genavigeerd wordt: Settings/NavigationHistory/No/Description: Werk de browsergeschiedenis niet bij Settings/NavigationHistory/Yes/Description: Werk de browsergeschiedenis bij +Settings/PerformanceInstrumentation/Caption: Prestatiemeting +Settings/PerformanceInstrumentation/Description: Zet prestatiemeting aan +Settings/PerformanceInstrumentation/Hint: Toont prestatiestatistieken in de 'browser console'. Dit vereist herladen van de wiki om effect te hebben Settings/TitleLinks/Caption: Titels van tiddlers Settings/TitleLinks/Hint: Toon (optioneel) tiddler titels als link Settings/TitleLinks/No/Description: Toon tiddler titels niet als links @@ -100,7 +114,12 @@ Settings/ToolbarButtons/Caption: Knoppen van knoppenbalk Settings/ToolbarButtons/Hint: Uiterlijk van standaard knop in knoppenbalk: Settings/ToolbarButtons/Icons/Description: Met pictogram (icon) Settings/ToolbarButtons/Text/Description: Met tekst -StoryView/Caption: Story view +Settings/ToolbarButtonStyle/Caption: Stijl van knoppen in knoppenbalk +Settings/ToolbarButtonStyle/Hint: Kies de stijl voor knoppen in knoppenbalk: +Settings/ToolbarButtonStyle/Styles/Borderless: Zonder rand +Settings/ToolbarButtonStyle/Styles/Boxed: Vierkante rand +Settings/ToolbarButtonStyle/Styles/Rounded: Ronde rand +StoryView/Caption: 'Story' view StoryView/Prompt: Huidige view: Theme/Caption: Thema Theme/Prompt: Huidig thema: diff --git a/languages/nl-NL/Docs/ModuleTypes.multids b/languages/nl-NL/Docs/ModuleTypes.multids index c782eef1f..dcd7ad27c 100644 --- a/languages/nl-NL/Docs/ModuleTypes.multids +++ b/languages/nl-NL/Docs/ModuleTypes.multids @@ -7,7 +7,7 @@ filteroperator: Individuele methodes voor een filter operator. global: Globale data die aan `$tw.config` moet worden toegevoegd. isfilteroperator: Operands voor de ''is'' filter operator. macro: JavaScript macro definities. -parser: Parsers voor verschillende inhoudstypes. +parser: 'Parsers' voor verschillende inhoudstypes. saver: 'Savers' gebruiken verschillende methodes voor het opslaan van bestanden vanuit de browser. startup: Startup functies. storyview: Story views passen de animatie en het gedrag van 'list' widgets aan. @@ -17,6 +17,6 @@ tiddlermethod: Voegt methodes aan het `$tw.Tiddler` prototype toe. upgrader: Past upgradeverwerking toe op tiddlers gedurende een upgrade / import. utils: Voegt methodes aan `$tw.utils` toe. utils-node: Voegt Node.js-specifieke methodes aan `$tw.utils` toe. -widget: Widgets omvatten DOM rendering (tonen) en verversing. +widget: 'Widgets' omvatten DOM 'rendering' en verversing. wikimethod: Voegt methodes aan `$tw.Wiki` toe. -wikirule: Individuele parser regels voor the hoofd WikiText parser. +wikirule: Individuele 'parser' regels voor de hoofd-WikiText-parser. diff --git a/languages/nl-NL/Docs/PaletteColours.multids b/languages/nl-NL/Docs/PaletteColours.multids index 81c4793fa..6ae797c2a 100644 --- a/languages/nl-NL/Docs/PaletteColours.multids +++ b/languages/nl-NL/Docs/PaletteColours.multids @@ -12,15 +12,15 @@ code-foreground: Voorgrond code dirty-indicator: Indicator voor niet-opgeslagen wijzigingen download-background: Achtergrond downloadknop download-foreground: Voorgrond downloadknop -dragger-background: Achtergrond "dragger" -dragger-foreground: Voorgrond "dragger" +dragger-background: Achtergrond 'dragger' +dragger-foreground: Voorgrond 'dragger' dropdown-background: Achtergrond dropdown dropdown-border: Rand dropdown dropdown-tab-background: Achtergrond dropdown tab dropdown-tab-background-selected: Achtergrond dropdown tab voor geselecteerde tabs -dropzone-background: Achtergrond "dropzone" +dropzone-background: Achtergrond 'dropzone' external-link-background: Achtergrond externe link -external-link-background-hover: Achtergrond mouseover externe link +external-link-background-hover: Achtergrond 'mouseover' externe link external-link-background-visited: Achtergrond bezochte externe link external-link-foreground: Voorgrond externe link external-link-foreground-hover: Voorgrond mouseover externe link @@ -48,7 +48,7 @@ sidebar-controls-foreground-hover: Voorgrond mouseover knoppen zijpaneel sidebar-foreground: Voorgrond zijpaneel sidebar-foreground-shadow: Voorgrond schaduw zijpaneel sidebar-muted-foreground: Voorgrond gedimd zijpaneel -sidebar-muted-foreground-hover: Voorgrond gedimd mouseover zijpaneel +sidebar-muted-foreground-hover: Voorgrond gedimd 'mouseover' zijpaneel sidebar-tab-background: Achtergrond tab zijpaneel sidebar-tab-background-selected: Achtergrond tab zijpaneel voor geselecteerde tabs sidebar-tab-border: Rand tab zijpaneel @@ -57,7 +57,8 @@ sidebar-tab-divider: Zijpaneel tabscheider sidebar-tab-foreground: Voorgrond tab zijpaneel sidebar-tab-foreground-selected: Voorgrond tab zijpaneel voor geselecteerde tabs sidebar-tiddler-link-foreground: Voorgrond tiddler link zijpaneel -sidebar-tiddler-link-foreground-hover: Voorgrond mouseover tiddler link zijpaneel +sidebar-tiddler-link-foreground-hover: Voorgrond 'mouseover' tiddler link zijpaneel +site-title-foreground: Voorgrond van de wikititel static-alert-foreground: Voorgrond statische alarmmelding tab-background: Achtergrond tab tab-background-selected: Achtergrond tab voor geselecteerde tabs diff --git a/languages/nl-NL/EditTemplate.multids b/languages/nl-NL/EditTemplate.multids index 7c6397078..44d89996d 100644 --- a/languages/nl-NL/EditTemplate.multids +++ b/languages/nl-NL/EditTemplate.multids @@ -8,6 +8,8 @@ Body/Preview/Button/Show: toon voorbeeld Field/Remove/Caption: verwijder veld Field/Remove/Hint: Verwijder veld Fields/Add/Button: + +Fields/Add/Dropdown/System: Systeemvelden +Fields/Add/Dropdown/User: Gebruikersvelden Fields/Add/Name/Placeholder: veldnaam Fields/Add/Prompt: Voeg een nieuw veld toe: Fields/Add/Value/Placeholder: veldwaarde diff --git a/languages/nl-NL/Fields.multids b/languages/nl-NL/Fields.multids index 1dd4e6802..30fa560cd 100644 --- a/languages/nl-NL/Fields.multids +++ b/languages/nl-NL/Fields.multids @@ -1,7 +1,7 @@ title: $:/language/Docs/Fields/ _canonical_uri: De volledige URI van een externe afbeeldingstiddler -bag: De naam van de "bag" waaruit de tiddler kwam +bag: De naam van de 'bag' waaruit de tiddler kwam caption: Tekst die op een tab of een knop getoond wordt color: De CSS-waarde van een kleur gekoppeld aan een tiddler component: De naam van de component die een [[alarmtiddler|AlertMechanism]] veroorzaakt @@ -15,7 +15,7 @@ draft.title: Voor concepttiddlers; bevat de voorgestelde titel van de tiddler footer: De voettekst van een wizard hack-to-give-us-something-to-compare-against: Een tijdelijk opslagveld dat in [[$:/core/templates/static.content]] gebruikt wordt icon: De titel van de pictogramtiddler die met deze tiddler gekoppeld is -library: Als "yes" ingevuld is, dient de tiddler als JavaScript-bibliotheek opgeslagen te worden +library: Als 'yes' ingevuld is, dient de tiddler als JavaScript-bibliotheek opgeslagen te worden list: Een geordende lijst van tiddlertitels gekoppeld met een tiddler list-after: Indien ingevuld, de titel van de tiddler waarna deze tiddler toegevoegd moet worden in de reeks tiddlertitels list-before: Indien ingevuld, de titel van de tiddler waarvoor deze tiddler toegevoegd moet worden in de reeks tiddlertitels, of aan het begin van de reeks als dit veld wel aanwezig maar leeg is diff --git a/languages/nl-NL/Help/unpackplugin.tid b/languages/nl-NL/Help/unpackplugin.tid index 63c8ff35f..a86d04e8b 100644 --- a/languages/nl-NL/Help/unpackplugin.tid +++ b/languages/nl-NL/Help/unpackplugin.tid @@ -1,8 +1,4 @@ title: $:/language/Help/unpackplugin -description: Extraheer de payload tiddlers van een plugin +description: Extraheer de 'payload' tiddlers van een plugin -Extraheer de payload tiddlers van een plugin en maak er gewone tiddlers van: - -``` ---unpackplugin <title> -``` +Extraheer de 'payload' tiddlers van een plugin en maak er gewone tiddlers van:```--unpackplugin <title>``` \ No newline at end of file diff --git a/languages/nl-NL/Import.multids b/languages/nl-NL/Import.multids index 1a7bc24c7..314f6f8c7 100644 --- a/languages/nl-NL/Import.multids +++ b/languages/nl-NL/Import.multids @@ -1,5 +1,6 @@ title: $:/language/Import/ +Imported: De volgende tiddlers werden geïmporteerd: Listing/Cancel/Caption: Annuleer Listing/Hint: Deze tiddlers staan klaar voor import: Listing/Import/Caption: Importeer diff --git a/languages/nl-NL/Misc.multids b/languages/nl-NL/Misc.multids index 6e48ba116..5dfab8558 100644 --- a/languages/nl-NL/Misc.multids +++ b/languages/nl-NL/Misc.multids @@ -1,5 +1,6 @@ title: $:/language/ +AboveStory/ClassicPlugin/Warning: Het lijkt erop dat je probeert een ~TiddlyWiki Classic plugin te laden. [[Deze plugins werken niet met ~TiddlyWiki version 5.x.x|http://tiddlywiki.com/#TiddlyWikiClassic]]. Gedetecteerde ~TiddlyWiki Classic plugins: BinaryWarning/Prompt: Deze tiddler bevat binaire data ClassicWarning/Hint: Deze tiddler is in TiddlyWiki Classic wiki tekstformaat geschreven dat niet geheel compatibel is met TiddlyWiki versie 5. Zie http://tiddlywiki.com/static/Upgrading.html voor meer details. ClassicWarning/Upgrade/Caption: upgrade @@ -22,14 +23,20 @@ Exporters/CsvFile: CSV tiddlers bestand Exporters/JsonFile: JSON tiddlers bestand Exporters/StaticRiver: Serie tiddlers als statisch HTML bestand Exporters/TidFile: Enkele tiddler ".tid" bestand +InternalJavaScriptError/Hint: Er is een probleem. Herstart TiddlyWiki door je browser te verversen +InternalJavaScriptError/Title: Interne JavaScript Error InvalidFieldName: Illegale lettertekens in veldnaam "<$text text=<<fieldName>>/>". Velden kunnen alleen kleine letters, cijfers en de lettertekens liggend streepje (`_`), koppelteken (`-`) en punt (`.`) +LazyLoadingWarning: <p>Er wordt externe tekst geladen van ''<$text text={{!!_canonical_uri}}/>''</p><p>Als deze mededeling niet verdwijnt ondersteunt de gebruikte browser in deze configuratie mogelijk geen externe tekst. Zie http://tiddlywiki.com/#ExternalText</p> MissingTiddler/Hint: Ontbrekende tiddler "<$text text=<<currentTiddler>>/>" - klik {{$:/core/images/edit-button}} om hem aan te maken OfficialPluginLibrary: Officiële ~TiddlyWiki plugin-bibliotheek +OfficialPluginLibrary/Hint: De officiële ~TiddlyWiki pluginbibliotheek op tiddlywiki.com. Plugins, thema's en taalpaketten worden door het core team onderhouden. PluginReloadWarning: Sla op {{$:/core/ui/Buttons/save-wiki}} en ververs {{$:/core/ui/Buttons/refresh}} om wijzigingen aan plugins door te voeren RecentChanges/DateFormat: DD MMM YYYY SystemTiddler/Tooltip: Dit is een systeem tiddler TagManager/Colour/Heading: Kleur +TagManager/Count/Heading: Aantal TagManager/Icon/Heading: Pictogram (icon) TagManager/Info/Heading: Info TagManager/Tag/Heading: Label +Tiddler/DateFormat: DD MMM YYYY om hh12:mmam UnsavedChangesWarning: Er zijn niet-opgeslagen veranderingen in TiddlyWiki diff --git a/languages/nl-NL/Search.multids b/languages/nl-NL/Search.multids index d358e59fc..b891c1a53 100644 --- a/languages/nl-NL/Search.multids +++ b/languages/nl-NL/Search.multids @@ -5,6 +5,9 @@ Filter/Caption: Filter Filter/Hint: Zoek via een [[filter expressie|http://tiddlywiki.com/static/Filters.html]] Filter/Matches: //<small><<resultCount>> resultaten</small>// Matches: //<small><<resultCount>> resultaten</small>// +Matches/All: Alle resultaten: +Matches/Title: Titel resultaten: +Search: Zoek Shadows/Caption: Schaduwen Shadows/Hint: Zoek schaduwtiddlers Shadows/Matches: //<small><<resultCount>> resultaten</small>// diff --git a/languages/nl-NL/Types/application%2Fx-tiddler-dictionary.tid b/languages/nl-NL/Types/application%2Fx-tiddler-dictionary.tid index e4c630515..93a656203 100644 --- a/languages/nl-NL/Types/application%2Fx-tiddler-dictionary.tid +++ b/languages/nl-NL/Types/application%2Fx-tiddler-dictionary.tid @@ -1,4 +1,4 @@ title: $:/language/Docs/Types/application/x-tiddler-dictionary -description: Data dictionary +description: Data 'dictionary' name: application/x-tiddler-dictionary group: Ontwikkelaar From 57ceffd67c72e54ea520109b58d5863db95d8b98 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 23 Dec 2015 12:19:47 +0000 Subject: [PATCH 145/242] Merge #1909 from @nameanyone --- core/modules/filters/days.js | 49 +++++++++++++++++++ core/modules/filters/recent.js | 35 ------------- core/modules/utils/utils.js | 11 +++++ .../tiddlers/staging/filters/days.tid | 16 ++++++ .../filters/examples/{recent.tid => days.tid} | 10 ++-- .../tiddlers/staging/filters/recent.tid | 15 ------ 6 files changed, 81 insertions(+), 55 deletions(-) create mode 100644 core/modules/filters/days.js delete mode 100644 core/modules/filters/recent.js create mode 100644 editions/prerelease/tiddlers/staging/filters/days.tid rename editions/prerelease/tiddlers/staging/filters/examples/{recent.tid => days.tid} (52%) delete mode 100644 editions/prerelease/tiddlers/staging/filters/recent.tid diff --git a/core/modules/filters/days.js b/core/modules/filters/days.js new file mode 100644 index 000000000..39cd375f7 --- /dev/null +++ b/core/modules/filters/days.js @@ -0,0 +1,49 @@ +/*\ +title: $:/core/modules/filters/days.js +type: application/javascript +module-type: filteroperator + +Filter operator that selects tiddlers with a specified date field within a specified date interval. + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +/* +Export our filter function +*/ +exports.days = function(source,operator,options) { + var results = [], + fieldName = operator.suffix || "modified", + dayInterval = (parseInt(operator.operand,10)||0), + dayIntervalSign = $tw.utils.sign(dayInterval), + targetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval, + isWithinDays = function(dateField) { + var sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0)); + return sign === 0 || sign === dayIntervalSign; + }; + + if(operator.prefix === "!") { + source(function(tiddler,title) { + if(tiddler && tiddler.fields[fieldName]) { + if(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) { + results.push(title); + } + } + }); + } else { + source(function(tiddler,title) { + if(tiddler && tiddler.fields[fieldName]) { + if(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) { + results.push(title); + } + } + }); + } + return results; +}; + +})(); diff --git a/core/modules/filters/recent.js b/core/modules/filters/recent.js deleted file mode 100644 index 897847d00..000000000 --- a/core/modules/filters/recent.js +++ /dev/null @@ -1,35 +0,0 @@ -/*\ -title: $:/core/modules/filters/recent.js -type: application/javascript -module-type: filteroperator - -Filter operator that selects tiddlers with a specified date field within the last N days. - -\*/ -(function(){ - -/*jslint node: true, browser: true */ -/*global $tw: false */ -"use strict"; - -/* -Export our filter function -*/ -exports.recent = function(source,operator,options) { - var results = [], - fieldName = operator.suffix || "modified", - targetTimeStamp = (new Date()).setHours(0,0,0,0) - 1000*60*60*24*(parseInt(operator.operand,10) || 0), - isRecent = function(dateField) { - return targetTimeStamp <= (new Date(dateField)).setHours(0,0,0,0); - }; - source(function(tiddler,title) { - if(tiddler && tiddler.fields[fieldName]) { - if(isRecent($tw.utils.parseDate(tiddler.fields[fieldName]))) { - results.push(title); - } - } - }); - return results; -}; - -})(); diff --git a/core/modules/utils/utils.js b/core/modules/utils/utils.js index b490c45f0..90015609d 100644 --- a/core/modules/utils/utils.js +++ b/core/modules/utils/utils.js @@ -643,4 +643,15 @@ exports.tagToCssSelector = function(tagName) { }; +/* +IE does not have sign function +*/ +exports.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +}; + })(); diff --git a/editions/prerelease/tiddlers/staging/filters/days.tid b/editions/prerelease/tiddlers/staging/filters/days.tid new file mode 100644 index 000000000..732bb3aab --- /dev/null +++ b/editions/prerelease/tiddlers/staging/filters/days.tid @@ -0,0 +1,16 @@ +tags: [[Filter Operators]] [[Date Operators]] [[Negatable Operators]] +title: days Operator +type: text/vnd.tiddlywiki +caption: days +op-input: a [[selection of titles|Title Selection]] +op-neg-output: those input tiddlers in which field <<.place F>> is more than <<.place D>> days in the { future | past }, where <<.place D>> is { positive | negative } +op-output: those input tiddlers in which field <<.place F>> is <<.place D>> days in the { future | past } or any time { before | after } that, including { past | future }, where <<.place D>> is { positive | negative } +op-parameter: a number of days, defaulting to 0 +op-parameter-name: D +op-purpose: filter the input by date +op-suffix: the name of a [[date field|Date Fields]], defaulting to <<.field modified>> +op-suffix-name: F + +Select tiddlers where a specified date field (default "modified") is withing a specified date range. Time portion is ignored. + +<<.operator-examples "days">> diff --git a/editions/prerelease/tiddlers/staging/filters/examples/recent.tid b/editions/prerelease/tiddlers/staging/filters/examples/days.tid similarity index 52% rename from editions/prerelease/tiddlers/staging/filters/examples/recent.tid rename to editions/prerelease/tiddlers/staging/filters/examples/days.tid index 9f366823d..c4cc2bf16 100644 --- a/editions/prerelease/tiddlers/staging/filters/examples/recent.tid +++ b/editions/prerelease/tiddlers/staging/filters/examples/days.tid @@ -1,9 +1,9 @@ -tags: [[recent Operator]] [[Operator Examples]] -title: recent Operator (Examples) +tags: [[Operator Examples]] [[days Operator]] +title: days Operator (Examples) type: text/vnd.tiddlywiki -<<.operator-example 1 "[recent[1]]" "tiddlers modified yesterday and today">> -<<.operator-example 2 "[recent:created[14]]" "tiddlers created within the last 14 days">> +<<.operator-example 1 "[days[-14]]" "tiddlers modified within the last 14 days">> +<<.operator-example 2 "[!days:created[-800]]" "tiddlers created more than 800 days ago">> The filter can be used to highlight new items in a list. For example: <$macrocall $name="wikitext-example-without-html" src= @@ -11,7 +11,7 @@ The filter can be used to highlight new items in a list. For example: <ul> <$list filter="[tag[ReleaseNotes]!<currentTiddler>!sort[modified]]"> <li> - <$link><$view field="title"/></$link><$list filter="[<currentTiddler>recent[90]]"> @@color:red;^^new^^@@</$list> + <$link><$view field="title"/></$link><$list filter="[<currentTiddler>days[-120]]"> @@color:red;^^new^^@@</$list> </li> </$list> </ul> diff --git a/editions/prerelease/tiddlers/staging/filters/recent.tid b/editions/prerelease/tiddlers/staging/filters/recent.tid deleted file mode 100644 index 4adeb8c96..000000000 --- a/editions/prerelease/tiddlers/staging/filters/recent.tid +++ /dev/null @@ -1,15 +0,0 @@ -tags: [[Filter Operators]] [[Date Operators]] -title: recent Operator -type: text/vnd.tiddlywiki -caption: recent -op-purpose: filter the input by age -op-input: a [[selection of titles|Title Selection]] -op-suffix: the name of a [[date field|Date Fields]], defaulting to <<.field modified>> -op-suffix-name: F -op-parameter: a number of days, defaulting to 0 -op-parameter-name: D -op-output: those input tiddlers in which field <<.place F>> is at most <<.place D>> days old, ignoring time - -Select tiddlers where a specified date field (default "modified") is within the last N days (default 0, meaning today). - -<<.operator-examples "recent">> From a94ba99ec2f573f48539cc28b097857ed0497f0d Mon Sep 17 00:00:00 2001 From: Santiago Pelufo <santiagopelufo@gmail.com> Date: Wed, 23 Dec 2015 14:14:58 -0300 Subject: [PATCH 146/242] Make latex-parser.js render $$$ as display mode math --- plugins/tiddlywiki/katex/latex-parser.js | 18 +++++++++++++----- plugins/tiddlywiki/katex/usage.tid | 4 +++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/plugins/tiddlywiki/katex/latex-parser.js b/plugins/tiddlywiki/katex/latex-parser.js index 067510fc2..0aacfd488 100644 --- a/plugins/tiddlywiki/katex/latex-parser.js +++ b/plugins/tiddlywiki/katex/latex-parser.js @@ -29,23 +29,26 @@ exports.types = {inline: true}; exports.init = function(parser) { this.parser = parser; // Regexp to match - this.matchRegExp = /\$\$(?!\$)/mg; + this.matchRegExp = /\$\$\$?(?!\$)/mg; }; exports.parse = function() { // Move past the match this.parser.pos = this.matchRegExp.lastIndex; - var reEnd = /\$\$/mg; + var reEnd = /\$\$\$?/mg; // Look for the end marker reEnd.lastIndex = this.parser.pos; var match = reEnd.exec(this.parser.source), - text; + text, + displayMode; // Process the text if(match) { text = this.parser.source.substring(this.parser.pos,match.index); + displayMode = match.indexOf('$$$') != -1; this.parser.pos = match.index + match[0].length; } else { text = this.parser.source.substr(this.parser.pos); + displayMode = false; this.parser.pos = this.parser.sourceLength; } return [{ @@ -54,8 +57,13 @@ exports.parse = function() { text: { type: "text", value: text - }} + }, + displayMode: { + type: "text", + value: displayMode ? "true" : "false" + } + } }]; }; -})(); \ No newline at end of file +})(); diff --git a/plugins/tiddlywiki/katex/usage.tid b/plugins/tiddlywiki/katex/usage.tid index b8ffd15a7..bb9101092 100644 --- a/plugins/tiddlywiki/katex/usage.tid +++ b/plugins/tiddlywiki/katex/usage.tid @@ -6,10 +6,12 @@ The usual way to include ~LaTeX is to use `$$`. For example: $$\displaystyle f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi$$ ``` +To make math render in display mode, use `$$$` instead of `$$`. + The underlying widget can also be used directly, giving more flexibility: ``` -<$latex text="\displaystyle f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi"></$latex> +<$latex text="f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi" displayMode="true"></$latex> ``` The KaTeX widget is provided under the name `<$latex>` and is also available under the alias `<$katex>`. It's better to use the generic `<$latex>` name unless you are running multiple ~LaTeX plugins and wish to specifically target KaTeX. From 5be0de798fdf4525654bfbab2c88f7196147731f Mon Sep 17 00:00:00 2001 From: Santiago Pelufo <santiagopelufo@gmail.com> Date: Wed, 23 Dec 2015 14:55:05 -0300 Subject: [PATCH 147/242] Show how to use display mode in katexdemo/tiddlers/HelloThere.tid --- editions/katexdemo/tiddlers/HelloThere.tid | 37 ++++++++-------------- 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/editions/katexdemo/tiddlers/HelloThere.tid b/editions/katexdemo/tiddlers/HelloThere.tid index fd633b109..e0a32b20a 100644 --- a/editions/katexdemo/tiddlers/HelloThere.tid +++ b/editions/katexdemo/tiddlers/HelloThere.tid @@ -22,59 +22,48 @@ These examples are taken from http://khan.github.io/KaTeX/ !! Example 1 +To render in display mode use `$$$`: + ``` -$$\displaystyle f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi$$ +$$$ f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi $$$ ``` -$$\displaystyle f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi$$ +$$$ f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi $$$ !! Example 2 ``` -$$\displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } }$$ +$$$ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } $$$ ``` -$$\displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } }$$ +$$$ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } $$$ + !! Example 3 -Use a wrapper element with the class `katex-display` to render math in display mode, centred on a single line in display style. - ``` -<div class="katex-display"> -$$\displaystyle \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$ -</div> +$$$ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for }\lvert q\rvert<1. $$$ ``` -<div class="katex-display"> -$$\displaystyle \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$ -</div> - -!! Example 4 - -``` -$$\displaystyle 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for }\lvert q\rvert<1.$$ -``` - -$$\displaystyle 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for }\lvert q\rvert<1.$$ +$$$ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for }\lvert q\rvert<1. $$$ !! Widget Example For more flexibility the KaTeX widget can also be used via the full widget syntax: ``` -<$latex text="\displaystyle f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi"></$latex> +<$latex text="f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi" displayMode="true"></$latex> ``` -<$latex text="\displaystyle f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi"></$latex> +<$latex text="f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi" displayMode="true"></$latex> ! Error Handling Any LaTeX syntax errors are flagged with the problematic syntax highlighted. For example: ``` -$$\displaystyle f(x) = \int_{-\infty}^\infinity\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi$$ +$$ f(x) = \int_{-\infty}^\infinity\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi $$ ``` -$$\displaystyle f(x) = \int_{-\infty}^\infinity\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi$$ +$$ f(x) = \int_{-\infty}^\infinity\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi $$ From 03519c14b06f86880259b21d3ba07f646606e828 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Wed, 23 Dec 2015 20:55:03 +0200 Subject: [PATCH 148/242] Added tooltip option Tooltips should be entered in the 'tooltip' field of each tab tiddler --- core/wiki/macros/tabs.tid | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/wiki/macros/tabs.tid b/core/wiki/macros/tabs.tid index da07dd2ee..df39d8f78 100644 --- a/core/wiki/macros/tabs.tid +++ b/core/wiki/macros/tabs.tid @@ -5,13 +5,15 @@ tags: $:/tags/Macro <div class="tc-tab-set $class$"> <div class="tc-tab-buttons $class$"> <$list filter="$tabsList$" variable="currentTab"> -<$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected"> +<$tiddler tiddler=<<currentTab>> > +<$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}> <$set name="tv-wikilinks" value="no"> <$transclude tiddler=<<currentTab>> field="caption"> <$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/> </$transclude> </$set> </$button> +</$tiddler> </$list> </div><div class="tc-tab-divider $class$"/><div class="tc-tab-content $class$"> <$list filter="$tabsList$" variable="currentTab"> From b905874c06dd443922a28ce972ff61ad2c082caf Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Wed, 23 Dec 2015 22:28:52 +0200 Subject: [PATCH 149/242] Added a paragraph describing the use of tooltips --- editions/tw5.com/tiddlers/macros/TabsMacro.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/macros/TabsMacro.tid b/editions/tw5.com/tiddlers/macros/TabsMacro.tid index c012135a2..0119afda2 100644 --- a/editions/tw5.com/tiddlers/macros/TabsMacro.tid +++ b/editions/tw5.com/tiddlers/macros/TabsMacro.tid @@ -7,7 +7,7 @@ type: text/vnd.tiddlywiki The <<.def tabs>> [[macro|Macros]] presents a [[selection of tiddlers|Title Selection]] as a set of tabs that the user can switch between. -The tabs display the <<.field caption>> field of a tiddler if it has one, or the tiddler's title otherwise. +The tabs display the <<.field caption>> field of a tiddler if it has one, or the tiddler's title otherwise. If specified, the tabs display the <<.field tooltip>> field of a tiddler as the respective button tooltip. By default the tabs are arranged horizontally above the content. To get vertical tabs, set the <<.param class>> parameter to <<.value tc-vertical>>. From 61235a12fb5b1ad761260b946d474b8e236ee723 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Wed, 23 Dec 2015 22:35:46 +0200 Subject: [PATCH 150/242] Added a tooltip --- editions/tw5.com/tiddlers/demonstrations/SampleTabThree.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/tw5.com/tiddlers/demonstrations/SampleTabThree.tid b/editions/tw5.com/tiddlers/demonstrations/SampleTabThree.tid index a13ab5786..f5e3c205a 100644 --- a/editions/tw5.com/tiddlers/demonstrations/SampleTabThree.tid +++ b/editions/tw5.com/tiddlers/demonstrations/SampleTabThree.tid @@ -2,5 +2,6 @@ created: 20150221211557000 title: SampleTabThree tags: sampletab order: 3 +tooltip: This tab specifies a tooltip only This is the third of our sample tabs. From d7f24a57795c81e11c34c7ae0413e3e921539e4e Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Wed, 23 Dec 2015 22:37:14 +0200 Subject: [PATCH 151/242] Added a tooltip --- editions/tw5.com/tiddlers/demonstrations/SampleTabFour.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/tw5.com/tiddlers/demonstrations/SampleTabFour.tid b/editions/tw5.com/tiddlers/demonstrations/SampleTabFour.tid index fe57544f4..87c01e931 100644 --- a/editions/tw5.com/tiddlers/demonstrations/SampleTabFour.tid +++ b/editions/tw5.com/tiddlers/demonstrations/SampleTabFour.tid @@ -3,6 +3,7 @@ modified: 20150221211613000 title: SampleTabFour tags: sampletab caption: Four +tooltip: This tab specifies both a caption and a tooltip order: 4 This is the fourth of our sample tabs. From c2dea12f1c36412c479ff46f500b33f1a7a62e2b Mon Sep 17 00:00:00 2001 From: Tobias Beer <beertobias@gmail.com> Date: Wed, 23 Dec 2015 23:28:47 +0100 Subject: [PATCH 152/242] documentation for "tc-popup-keep" --- editions/tw5.com/tiddlers/mechanisms/PopupMechanism.tid | 5 +++-- editions/tw5.com/tiddlers/widgets/RevealWidget.tid | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/editions/tw5.com/tiddlers/mechanisms/PopupMechanism.tid b/editions/tw5.com/tiddlers/mechanisms/PopupMechanism.tid index a8cc56710..60566a329 100644 --- a/editions/tw5.com/tiddlers/mechanisms/PopupMechanism.tid +++ b/editions/tw5.com/tiddlers/mechanisms/PopupMechanism.tid @@ -1,13 +1,14 @@ created: 20131212175656755 -modified: 20131212180213909 +modified: 20151223222712715 tags: Mechanisms title: PopupMechanism type: text/vnd.tiddlywiki The popup mechanism allows blocks of content to be selectively displayed and positioned with respect to an anchor. It has several parts: -* StateTiddlers to record whether a popup is currently displayed or not +* [[StateTiddlers|StateMechanism]] to record whether a popup is currently displayed or not * The RevealWidget to selectively display the popup content +** For "sticky" popups — those that don't close when clicking inside one — set the ''class'' attribute to `tc-popup-keep` * The ButtonWidget to trigger the display of the popup by setting the state tiddler appropriately diff --git a/editions/tw5.com/tiddlers/widgets/RevealWidget.tid b/editions/tw5.com/tiddlers/widgets/RevealWidget.tid index def34c3f4..18e1f6490 100644 --- a/editions/tw5.com/tiddlers/widgets/RevealWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/RevealWidget.tid @@ -1,9 +1,9 @@ +caption: reveal created: 20131024141900000 -modified: 20150518163239603 +modified: 20151223222838652 tags: Widgets title: RevealWidget type: text/vnd.tiddlywiki -caption: reveal ! Introduction @@ -22,7 +22,7 @@ The content of the `<$reveal>` widget is displayed according to the rules given |tag |Overrides the default HTML element tag (`<div>` in block mode or `<span>` in inline mode) | |type |The type of matching performed: ''match'', ''nomatch'' or ''popup'' | |text |The text to match when the type is ''match'' and ''nomatch'' | -|class |An optional CSS class name to be assigned to the HTML element| +|class |An optional CSS class name to be assigned to the HTML element<br/>» Set to `tc-popup-keep` to make a popup "sticky", so it won't close when you click inside of it| |style |An optional CSS style attribute to be assigned to the HTML element | |position |The position used for the popup when the type is ''popup''. Can be ''left'', ''above'', ''aboveright'', ''right'', ''belowleft'' or ''below'' | |default |Default value to use when the state tiddler is missing | From b7c2063f63520151ca93b9750ac92cd6320ada32 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Thu, 24 Dec 2015 09:02:33 +0200 Subject: [PATCH 153/242] Added sorting on 'order' field by default What do you think of this idea? --- core/wiki/macros/tabs.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/wiki/macros/tabs.tid b/core/wiki/macros/tabs.tid index df39d8f78..4d1a9dfc0 100644 --- a/core/wiki/macros/tabs.tid +++ b/core/wiki/macros/tabs.tid @@ -4,7 +4,7 @@ tags: $:/tags/Macro \define tabs(tabsList,default,state:"$:/state/tab",class,template) <div class="tc-tab-set $class$"> <div class="tc-tab-buttons $class$"> -<$list filter="$tabsList$" variable="currentTab"> +<$list filter="$tabsList$ +[nsort[order]]" variable="currentTab"> <$tiddler tiddler=<<currentTab>> > <$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}> <$set name="tv-wikilinks" value="no"> From f4f86e3c2376fc588957601077f8af97f8f44503 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 24 Dec 2015 11:00:47 +0000 Subject: [PATCH 154/242] Fixed problem with deleting alerts introduced in #1981 --- core/ui/AlertTemplate.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ui/AlertTemplate.tid b/core/ui/AlertTemplate.tid index dd51643ff..87ddbd376 100644 --- a/core/ui/AlertTemplate.tid +++ b/core/ui/AlertTemplate.tid @@ -2,7 +2,7 @@ title: $:/core/ui/AlertTemplate <div class="tc-alert"> <div class="tc-alert-toolbar"> -<$button class="tc-btn-invisible"><$action-deletetiddler tiddler=<<currentTiddler>>/>{{$:/core/images/delete-button}}</$button> +<$button class="tc-btn-invisible"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/delete-button}}</$button> </div> <div class="tc-alert-subtitle"> <$view field="component"/> - <$view field="modified" format="date" template="0hh:0mm:0ss DD MM YYYY"/> <$reveal type="nomatch" state="!!count" text=""><span class="tc-alert-highlight">(count: <$view field="count"/>)</span></$reveal> From 3a426dfd2aab2d30265c8890b118fef5a81b6ada Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 24 Dec 2015 14:12:50 +0000 Subject: [PATCH 155/242] Docs for #2049 --- editions/tw5.com/tiddlers/widgets/KeyboardWidget.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/widgets/KeyboardWidget.tid b/editions/tw5.com/tiddlers/widgets/KeyboardWidget.tid index e69b59932..69a784bff 100644 --- a/editions/tw5.com/tiddlers/widgets/KeyboardWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/KeyboardWidget.tid @@ -1,13 +1,13 @@ caption: keyboard created: 20140302192136805 -modified: 20150514091459257 +modified: 20151224141005939 tags: Widgets title: KeyboardWidget type: text/vnd.tiddlywiki ! Introduction -The keyboard widget allows [[Messages]] to be generated in response to key presses. +The keyboard widget allows ActionWidgets to be triggered by specific key combinations. There is also a shorthand for generating [[Messages]]. ! Content and Attributes From 456e7abc5d5871b0285a23c5168dccb607f28d75 Mon Sep 17 00:00:00 2001 From: Tobias Beer <beertobias@gmail.com> Date: Thu, 24 Dec 2015 15:40:00 +0100 Subject: [PATCH 156/242] add rows attribute to edittext, plus docs --- core/modules/widgets/edit-text.js | 8 ++++++-- editions/tw5.com/tiddlers/widgets/EditTextWidget.tid | 10 ++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/core/modules/widgets/edit-text.js b/core/modules/widgets/edit-text.js index c4cb588a5..c0588f93c 100644 --- a/core/modules/widgets/edit-text.js +++ b/core/modules/widgets/edit-text.js @@ -52,6 +52,9 @@ EditTextWidget.prototype.render = function(parent,nextSibling) { if(this.editSize) { domNode.setAttribute("size",this.editSize); } + if(this.editRows) { + domNode.setAttribute("rows",this.editRows); + } // Assign classes if(this.editClass) { domNode.className = this.editClass; @@ -79,7 +82,7 @@ EditTextWidget.prototype.render = function(parent,nextSibling) { if(this.editFocus === "true") { if(domNode.focus && domNode.select) { domNode.focus(); - domNode.select(); + domNode.select(); } } }; @@ -148,6 +151,7 @@ EditTextWidget.prototype.execute = function() { this.editClass = this.getAttribute("class"); this.editPlaceholder = this.getAttribute("placeholder"); this.editSize = this.getAttribute("size"); + this.editRows = this.getAttribute("rows"); this.editAutoHeight = this.getAttribute("autoHeight","yes") === "yes"; this.editMinHeight = this.getAttribute("minHeight",DEFAULT_MIN_TEXT_AREA_HEIGHT); this.editFocusPopup = this.getAttribute("focusPopup"); @@ -178,7 +182,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of EditTextWidget.prototype.refresh = function(changedTiddlers) { var changedAttributes = this.computeAttributes(); // Completely rerender if any of our attributes have changed - if(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes["default"] || changedAttributes["class"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup) { + if(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes["default"] || changedAttributes["class"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows) { this.refreshSelf(); return true; } else if(changedTiddlers[this.editTitle]) { diff --git a/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid b/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid index 51042756e..b4e7c3c31 100644 --- a/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/EditTextWidget.tid @@ -1,8 +1,9 @@ -title: EditTextWidget -created: 201310241419 -modified: 20150220162131000 -tags: Widgets caption: edit-text +created: 20131024141900000 +modified: 20151224143914772 +tags: Widgets +title: EditTextWidget +type: text/vnd.tiddlywiki ! Introduction @@ -28,6 +29,7 @@ The content of the `<$edit-text>` widget is ignored. |size |The size of the input field (in characters) | |autoHeight |Either "yes" or "no" to specify whether to automatically resize `textarea` editors to fit their content (defaults to "yes") | |minHeight |Minimum height for automatically resized `textarea` editors, specified in CSS length units such as "px", "em" or "%" | +|rows|Sets the rows attribute of a generated textarea | ! Notes From 2fe2c531e832cc58a02b3f33bf250888d0525922 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 24 Dec 2015 16:04:47 +0000 Subject: [PATCH 157/242] Update release note --- .../prerelease/tiddlers/Release 5.1.10.tid | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/editions/prerelease/tiddlers/Release 5.1.10.tid b/editions/prerelease/tiddlers/Release 5.1.10.tid index 1ce790d45..b086df445 100644 --- a/editions/prerelease/tiddlers/Release 5.1.10.tid +++ b/editions/prerelease/tiddlers/Release 5.1.10.tid @@ -1,6 +1,6 @@ caption: 5.1.10 -created: 20151105122712982 -modified: 20151105122712982 +created: 20151224152917252 +modified: 20151224152917252 tags: ReleaseNotes title: Release 5.1.10 type: text/vnd.tiddlywiki @@ -64,7 +64,7 @@ Revert * Added Swedish translation by @Superdos * Added Korean (Korean Republic) translation by @araname -* Improved Chinese, Danish, Dutch and Russian translations +* Improved Chinese, Danish, Dutch, French, Italian and Russian translations !! Usability Improvements @@ -74,6 +74,8 @@ Revert * [[Extended|https://github.com/Jermolene/TiddlyWiki5/commit/2cb6400773096b02b71c1851fb0fac5dfefbbd6f]] support for automatically linked system tiddler titles to include digits and underscore * [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/2c9b1ae2579f8d2452c60217aa3e153a29d32d1f]] warning when trying to use plugins designed for TiddlyWiki Classic * Upgraded to version v8.8.0 of highlight.js for the [[Highlight Plugin]] +* [[Removed|https://github.com/Jermolene/TiddlyWiki5/pull/1981]] the need to manually confirm deleting alerts +* [[Added|https://github.com/Jermolene/TiddlyWiki5/pull/2147]] optional tooltips to [[tabs Macro]] !! Hackability Improvements @@ -95,6 +97,12 @@ Revert * [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/33563d01baed4b4092fc834eb6a1df55e1671418]] option in [[control panel|$:/ControlPanel]] to enable the display of detailed performance instrumentation in the browser developer console * [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/bc0cbf907063ccd484da7d56c8e42cf5e90489b8]] a LazyLoading template for all non-system tiddlers * [[Improved|https://github.com/Jermolene/TiddlyWiki5/issues/1984]] handling of TiddlerLinks in Markdown tiddlers +* [[Extended|https://github.com/Jermolene/TiddlyWiki5/pull/2004]] FieldManglerWidget to create the target tiddler if it does not exist +* [[Extended|https://github.com/Jermolene/TiddlyWiki5/pull/2049]] KeyboardWidget to trigger ActionWidgets +* [[Extended|https://github.com/Jermolene/TiddlyWiki5/pull/2074]] SelectWidget to support multiple selections +* [[Added|https://github.com/Jermolene/TiddlyWiki5/pull/1909]] new [[days Operator]] +* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/231d0a3dc8385fcb2173436754f00f464d7b018e]] official plugin wrappers for the JavaScript libraries [[async.js|https://github.com/caolan/async]] and [[JSZip|https://stuk.github.io/jszip/]] +* [[Added|https://github.com/Jermolene/TiddlyWiki5/pull/2037]] new ActionListopsWidget !! Bug Fixes @@ -120,19 +128,26 @@ Revert * [[@araname|https://github.com/araname]] * [[@BramChen|https://github.com/BramChen]] * [[@danielo515|https://github.com/danielo515]] +* [[@Drakor|https://github.com/Drakor]] * [[@erwanm|https://github.com/erwanm]] +* [[@felixhayashi|https://github.com/felixhayashi]] * [[@Evolena|https://github.com/Evolena]] * [[@hegart-dmishiv|https://github.com/hegart-dmishiv]] * [[@idoine|https://github.com/idoine]] * [[@inmysocks|https://github.com/inmysocks]] +* [[@IreneKnapp|https://github.com/IreneKnapp]] +* [[@gernert|https://github.com/gernert]] * [[@kixam|https://github.com/kixam]] * [[@Marxsal|https://github.com/Marxsal]] * [[@matabele|https://github.com/matabele]] +* [[@mklauber|https://github.com/mklauber]] * [[@nameanyone|https://github.com/nameanyone]] * [[@pmario|https://github.com/pmario]] * [[@senevoldsen90|https://github.com/senevoldsen90]] * [[@Spangenhelm|https://github.com/Spangenhelm]] +* [[@spelufo|https://github.com/spelufo]] * [[@SuperDOS|https://github.com/SuperDOS]] * [[@tgrosinger|https://github.com/tgrosinger]] * [[@tobibeer|https://github.com/tobibeer]] +* [[@xcazin|https://github.com/xcazin]] * [[@zahlman|https://github.com/zahlman]] From 8e0239035357e31395cec7dafc2ee64c1f115714 Mon Sep 17 00:00:00 2001 From: Santiago Pelufo <santiagopelufo@gmail.com> Date: Thu, 24 Dec 2015 13:45:45 -0300 Subject: [PATCH 158/242] Revert katex plugin to using `$$`. Use multiline for display mode. --- editions/katexdemo/tiddlers/HelloThere.tid | 26 ++++++++++++++++------ plugins/tiddlywiki/katex/latex-parser.js | 6 ++--- plugins/tiddlywiki/katex/usage.tid | 2 +- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/editions/katexdemo/tiddlers/HelloThere.tid b/editions/katexdemo/tiddlers/HelloThere.tid index e0a32b20a..0d058a371 100644 --- a/editions/katexdemo/tiddlers/HelloThere.tid +++ b/editions/katexdemo/tiddlers/HelloThere.tid @@ -22,30 +22,42 @@ These examples are taken from http://khan.github.io/KaTeX/ !! Example 1 -To render in display mode use `$$$`: +If the text between `$$` contains newlines it will rendered in display mode: ``` -$$$ f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi $$$ +$$ +f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi +$$ ``` -$$$ f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi $$$ +$$ +f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi +$$ !! Example 2 ``` -$$$ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } $$$ +$$ +\frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } +$$ ``` -$$$ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } $$$ +$$ +\frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } +$$ !! Example 3 ``` -$$$ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for }\lvert q\rvert<1. $$$ +$$ +1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for }\lvert q\rvert<1. +$$ ``` -$$$ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for }\lvert q\rvert<1. $$$ +$$ +1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for }\lvert q\rvert<1. +$$ !! Widget Example diff --git a/plugins/tiddlywiki/katex/latex-parser.js b/plugins/tiddlywiki/katex/latex-parser.js index 0aacfd488..6b72c7f51 100644 --- a/plugins/tiddlywiki/katex/latex-parser.js +++ b/plugins/tiddlywiki/katex/latex-parser.js @@ -29,13 +29,13 @@ exports.types = {inline: true}; exports.init = function(parser) { this.parser = parser; // Regexp to match - this.matchRegExp = /\$\$\$?(?!\$)/mg; + this.matchRegExp = /\$\$(?!\$)/mg; }; exports.parse = function() { // Move past the match this.parser.pos = this.matchRegExp.lastIndex; - var reEnd = /\$\$\$?/mg; + var reEnd = /\$\$/mg; // Look for the end marker reEnd.lastIndex = this.parser.pos; var match = reEnd.exec(this.parser.source), @@ -44,7 +44,7 @@ exports.parse = function() { // Process the text if(match) { text = this.parser.source.substring(this.parser.pos,match.index); - displayMode = match.indexOf('$$$') != -1; + displayMode = text.indexOf('\n') != -1; this.parser.pos = match.index + match[0].length; } else { text = this.parser.source.substr(this.parser.pos); diff --git a/plugins/tiddlywiki/katex/usage.tid b/plugins/tiddlywiki/katex/usage.tid index bb9101092..8e7e53bb9 100644 --- a/plugins/tiddlywiki/katex/usage.tid +++ b/plugins/tiddlywiki/katex/usage.tid @@ -6,7 +6,7 @@ The usual way to include ~LaTeX is to use `$$`. For example: $$\displaystyle f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi$$ ``` -To make math render in display mode, use `$$$` instead of `$$`. +Single line equations will render in inline mode. If there are newlines between the `$$` delimiters, the equations will be rendered in display mode. The underlying widget can also be used directly, giving more flexibility: From 2f51c3695dd7fa428992c6a6b4e2c6c73b378885 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Mon, 28 Dec 2015 10:22:28 +0200 Subject: [PATCH 159/242] Changed the name of the 'list' attribute to 'field' Other users found this to be confusing -- I have made this change in both this widget and the $checklist widget to maintain consistency --- core/modules/widgets/action-listops.js | 142 +++++++++++++------------ 1 file changed, 72 insertions(+), 70 deletions(-) diff --git a/core/modules/widgets/action-listops.js b/core/modules/widgets/action-listops.js index c88130b39..4e8e8694f 100644 --- a/core/modules/widgets/action-listops.js +++ b/core/modules/widgets/action-listops.js @@ -3,87 +3,89 @@ title: $:/core/modules/widgets/action-listops.js type: application/javascript module-type: widget -Action widget to apply list operations to any tiddler field (defaults to the 'tags' field of the current tiddler) +Action widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler) \*/ (function () { - /*jslint node: true, browser: true */ - /*global $tw: false */ - "use strict"; + /*jslint node: true, browser: true */ + /*global $tw: false */ + "use strict"; - var Widget = require("$:/core/modules/widgets/widget.js").widget; + var Widget = require("$:/core/modules/widgets/widget.js") + .widget; - var ActionListopsWidget = function (parseTreeNode, options) { - this.initialise(parseTreeNode, options); - }; + var ActionListopsWidget = function (parseTreeNode, options) { + this.initialise(parseTreeNode, options); + }; - /* - Inherit from the base widget class - */ - ActionListopsWidget.prototype = new Widget(); + /* + Inherit from the base widget class + */ + ActionListopsWidget.prototype = new Widget(); - /* - Render this widget into the DOM - */ - ActionListopsWidget.prototype.render = function (parent, nextSibling) { - this.computeAttributes(); - this.execute(); - }; + /* + Render this widget into the DOM + */ + ActionListopsWidget.prototype.render = function (parent, nextSibling) { + this.computeAttributes(); + this.execute(); + }; - /* - Compute the internal state of the widget - */ - ActionListopsWidget.prototype.execute = function () { - // Get our parameters - this.target = this.getAttribute("$tiddler", this.getVariable("currentTiddler")); - this.filter = this.getAttribute("$filter"); - this.subfilter = this.getAttribute("$subfilter"); - this.listField = this.getAttribute("$list", "list"); - this.listIndex = this.getAttribute("$index"); - this.filtertags = this.getAttribute("$tags"); - }; + /* + Compute the internal state of the widget + */ + ActionListopsWidget.prototype.execute = function () { + // Get our parameters + this.target = this.getAttribute("$tiddler", this.getVariable("currentTiddler")); + this.filter = this.getAttribute("$filter"); + this.subfilter = this.getAttribute("$subfilter"); + this.listField = this.getAttribute("$field", "list"); + this.listIndex = this.getAttribute("$index"); + this.filtertags = this.getAttribute("$tags"); + }; - /* - Refresh the widget by ensuring our attributes are up to date - */ - ActionListopsWidget.prototype.refresh = function (changedTiddlers) { - var changedAttributes = this.computeAttributes(); - if (changedAttributes.$tiddler || changedAttributes.$filter || changedAttributes.$subfilter || changedAttributes.$list || changedAttributes.$index || changedAttributes.$tags) { - this.refreshSelf(); - return true; - } - return this.refreshChildren(changedTiddlers); - }; + /* + Refresh the widget by ensuring our attributes are up to date + */ + ActionListopsWidget.prototype.refresh = function (changedTiddlers) { + var changedAttributes = this.computeAttributes(); + if (changedAttributes.$tiddler || changedAttributes.$filter || changedAttributes.$subfilter || changedAttributes.$list || changedAttributes.$index || changedAttributes.$tags) { + this.refreshSelf(); + return true; + } + return this.refreshChildren(changedTiddlers); + }; - /* - Invoke the action associated with this widget - */ - ActionListopsWidget.prototype.invokeAction = function (triggeringWidget, event) { - //try this - var field = this.listField, - index = undefined, - type = "!!", - list = this.listField; - if (this.listIndex) { - field = undefined; - index = this.listIndex; type = "##"; - list = this.listIndex; - } - if (this.filter) { - this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(this.filter, this))); - } - if (this.subfilter) { - var subfilter = "[list[" + this.target + type + list + "]] " + this.subfilter; - this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter, this))); - } - if (this.filtertags) { - var tagfilter = "[list[" + this.target + "!!tags]] " + this.filtertags; - this.wiki.setText(this.target, "tags", undefined, $tw.utils.stringifyList(this.wiki.filterTiddlers(tagfilter, this))); - } - return true; // Action was invoked - }; + /* + Invoke the action associated with this widget + */ + ActionListopsWidget.prototype.invokeAction = function (triggeringWidget, event) { + //Apply the specified filters to the lists + var field = this.listField, + index = undefined, + type = "!!", + list = this.listField; + if (this.listIndex) { + field = undefined; + index = this.listIndex; + type = "##"; + list = this.listIndex; + } + if (this.filter) { + this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(this.filter, this))); + } + if (this.subfilter) { + var subfilter = "[list[" + this.target + type + list + "]] " + this.subfilter; + this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter, this))); + } + if (this.filtertags) { + var tagfilter = "[list[" + this.target + "!!tags]] " + this.filtertags; + this.wiki.setText(this.target, "tags", undefined, $tw.utils.stringifyList(this.wiki.filterTiddlers(tagfilter, this))); + } + return true; // Action was invoked + }; - exports["action-listops"] = ActionListopsWidget; + exports["action-listops"] = ActionListopsWidget; })(); From 48987e186a5eb33c652d7a5eddd987a8ee4670cd Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Mon, 28 Dec 2015 10:31:39 +0200 Subject: [PATCH 160/242] Tidied up the code in the filters --- core/modules/filters/x-listops.js | 329 +++++++++++++++--------------- 1 file changed, 163 insertions(+), 166 deletions(-) diff --git a/core/modules/filters/x-listops.js b/core/modules/filters/x-listops.js index 63edcd142..a20fd5646 100644 --- a/core/modules/filters/x-listops.js +++ b/core/modules/filters/x-listops.js @@ -8,185 +8,182 @@ Extended filter operators to manipulate the current list. \*/ (function () { - /*jslint node: true, browser: true */ - /*global $tw: false */ - "use strict"; + /*jslint node: true, browser: true */ + /*global $tw: false */ + "use strict"; - var prepare_results = function (source) { + /* + Fetch titles from the current list + */ + var prepare_results = function (source) { var results = []; - source(function (tiddler, title) { - results.push(title); - }); - return results; - }; + source(function (tiddler, title) { + results.push(title); + }); + return results; + }; - /* - Moves a number of items from the tail of the current list before the item named in the operand - */ - exports.putbefore = function (source, operator, options) { - var results = prepare_results(source), - index = results.indexOf(operator.operand), - count = parseInt(operator.suffix) || 1; - if (index === -1) { - return results.slice(0, -1); - } - return results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count)); - }; + /* + Moves a number of items from the tail of the current list before the item named in the operand + */ + exports.putbefore = function (source, operator) { + var results = prepare_results(source), + index = results.indexOf(operator.operand), + count = parseInt(operator.suffix) || 1; + return (index === -1) ? + results.slice(0, -1) : + results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count)); + }; - /* - Moves a number of items from the tail of the current list after the item named in the operand - */ - exports.putafter = function (source, operator, options) { - var results = prepare_results(source), - index = results.indexOf(operator.operand), - count = parseInt(operator.suffix) || 1; - if (index === -1) { - return results.slice(0, -1); - } - return results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count)); - }; + /* + Moves a number of items from the tail of the current list after the item named in the operand + */ + exports.putafter = function (source, operator) { + var results = prepare_results(source), + index = results.indexOf(operator.operand), + count = parseInt(operator.suffix) || 1; + return (index === -1) ? + results.slice(0, -1) : + results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count)); + }; - /* - Replaces the item named in the operand with a number of items from the tail of the current list - */ - exports.replace = function (source, operator, options) { - var results = prepare_results(source), - index = results.indexOf(operator.operand), - count = parseInt(operator.suffix) || 1; - if (index === -1) { - return results.slice(0, -count); - } - return results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count)); - }; + /* + Replaces the item named in the operand with a number of items from the tail of the current list + */ + exports.replace = function (source, operator) { + var results = prepare_results(source), + index = results.indexOf(operator.operand), + count = parseInt(operator.suffix) || 1; + return (index === -1) ? + results.slice(0, -count) : + results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count)); + }; - /* - Moves a number of items from the tail of the current list to the head of the list - */ - exports.putfirst = function (source, operator, options) { - var results = prepare_results(source), - count = parseInt(operator.suffix) || 1; - return results.slice(-count).concat(results.slice(0, -count)); - }; + /* + Moves a number of items from the tail of the current list to the head of the list + */ + exports.putfirst = function (source, operator) { + var results = prepare_results(source), + count = parseInt(operator.suffix) || 1; + return results.slice(-count).concat(results.slice(0, -count)); + }; - /* - Moves a number of items from the head of the current list to the tail of the list - */ - exports.putlast = function (source, operator, options) { - var results = prepare_results(source), - count = parseInt(operator.suffix) || 1; - return results.slice(count).concat(results.slice(0, count)); - }; + /* + Moves a number of items from the head of the current list to the tail of the list + */ + exports.putlast = function (source, operator) { + var results = prepare_results(source), + count = parseInt(operator.suffix) || 1; + return results.slice(count).concat(results.slice(0, count)); + }; -/* - Moves the item named in the operand a number of places forward or backward in the list - */ - exports.move = function (source, operator, options) { - var results = prepare_results(source), - index = results.indexOf(operator.operand), - count = parseInt(operator.suffix) || 1, - marker = results.splice(index, 1); - return results.slice(0, index + count).concat(marker).concat(results.slice(index + count)); - }; + /* + Moves the item named in the operand a number of places forward or backward in the list + */ + exports.move = function (source, operator) { + var results = prepare_results(source), + index = results.indexOf(operator.operand), + count = parseInt(operator.suffix) || 1, + marker = results.splice(index, 1); + return results.slice(0, index + count).concat(marker).concat(results.slice(index + count)); + }; - /* - Returns the items from the current list that are after the item named in the operand - */ - exports.allafter = function (source, operator, options) { - var results = prepare_results(source), - index = results.indexOf(operator.operand); - if (index === -1 || index > (results.length - 2)) { - return []; - } - if (operator.suffix) { - return results.slice(index); - } - return results.slice(index + 1); - }; + /* + Returns the items from the current list that are after the item named in the operand + */ + exports.allafter = function (source, operator) { + var results = prepare_results(source), + index = results.indexOf(operator.operand); + return (index === -1 || index > (results.length - 2)) ? [] : + (operator.suffix) ? results.slice(index) : + results.slice(index + 1); + }; - /* - Returns the items from the current list that are before the item named in the operand - */ - exports.allbefore = function (source, operator, options) { - var results = prepare_results(source), - index = results.indexOf(operator.operand); - if (index <= 0) { - return []; - } - if (operator.suffix) { - return results.slice(0, index + 1); - } - return results.slice(0, index); - }; + /* + Returns the items from the current list that are before the item named in the operand + */ + exports.allbefore = function (source, operator) { + var results = prepare_results(source), + index = results.indexOf(operator.operand); + return (index <= 0) ? [] : + (operator.suffix) ? results.slice(0, index + 1) : + results.slice(0, index); + }; - /* - Appends the items listed in the operand array to the tail of the current list - */ - exports.append = function (source, operator, options) { - var append = $tw.utils.parseStringArray(operator.operand), - results = prepare_results(source), - count = parseInt(operator.suffix) || append.length; - if (append.length === 0) { - return results; - } - if (operator.prefix) { - return results.concat(append.slice(-count)); - } else { - return results.concat(append.slice(0, count)); - } - }; + /* + Appends the items listed in the operand array to the tail of the current list + */ + exports.append = function (source, operator) { + var append = $tw.utils.parseStringArray(operator.operand, "true"), + results = prepare_results(source), + count = parseInt(operator.suffix) || append.length; + return (append.length === 0) ? results : + (operator.prefix) ? results.concat(append.slice(-count)) : + results.concat(append.slice(0, count)); + }; - /* - Prepends the items listed in the operand array to the head of the current list - */ - exports.prepend = function (source, operator, options) { - var prepend = $tw.utils.parseStringArray(operator.operand), - results = prepare_results(source), - count = parseInt(operator.suffix) || prepend.length; - if (prepend.length === 0) { - return results; - } - if (operator.prefix) { - return prepend.slice(-count).concat(results); - } else { - return prepend.slice(0, count).concat(results); - } - }; + /* + Prepends the items listed in the operand array to the head of the current list + */ + exports.prepend = function (source, operator) { + var prepend = $tw.utils.parseStringArray(operator.operand, "true"), + results = prepare_results(source), + count = parseInt(operator.suffix) || prepend.length; + return (prepend.length === 0) ? results : + (operator.prefix) ? prepend.slice(-count).concat(results) : + prepend.slice(0, count).concat(results); + }; - /* - Returns all items from the current list except the items listed in the operand array - */ - exports.remove = function (source, operator, options) { - var array = $tw.utils.parseStringArray(operator.operand), - results = prepare_results(source), - count = parseInt(operator.suffix) || array.length, - p, len, index; - len = array.length - 1; - for (p = 0; p < count; ++p) { - if (operator.prefix) { - index = results.indexOf(array[len - p]); - } else { - index = results.indexOf(array[p]); - } - if (index !== -1) { - results.splice(index, 1); - } - } - return results; - }; + /* + Returns all items from the current list except the items listed in the operand array + */ + exports.remove = function (source, operator) { + var array = $tw.utils.parseStringArray(operator.operand, "true"), + results = prepare_results(source), + count = parseInt(operator.suffix) || array.length, + p, + len, + index; + len = array.length - 1; + for (p = 0; p < count; ++p) { + if (operator.prefix) { + index = results.indexOf(array[len - p]); + } else { + index = results.indexOf(array[p]); + } + if (index !== -1) { + results.splice(index, 1); + } + } + return results; + }; - /* - Returns all items from the current list sorted in the order of the items in the operand array - */ - exports.sortby = function (source, operator, options) { - var results = prepare_results(source); - if (!results || results.length < 2) { - return results; - } - var lookup = $tw.utils.parseStringArray(operator.operand); - results.sort(function (a, b) { - return lookup.indexOf(a) - lookup.indexOf(b); - }); - return results; - }; + /* + Returns all items from the current list sorted in the order of the items in the operand array + */ + exports.sortby = function (source, operator) { + var results = prepare_results(source); + if (!results || results.length < 2) { + return results; + } + var lookup = $tw.utils.parseStringArray(operator.operand, "true"); + results.sort(function (a, b) { + return lookup.indexOf(a) - lookup.indexOf(b); + }); + return results; + }; + /* + Removes all duplicate items from the current list + */ + exports.unique = function (source, operator) { + var results = prepare_results(source); + var set = results.reduce(function (a, b) { + if (a.indexOf(b) < 0) { + a.push(b); + } + return a; + }, []); + return set; + }; })(); From 91b970e422d2c6a1e4e9e3b72270eda2a01a821a Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Mon, 28 Dec 2015 10:42:46 +0200 Subject: [PATCH 161/242] Updated docs of the ListOps widget to reflect changes to attribute names --- .../tiddlers/widgets/ActionListopsWidget.tid | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid b/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid index 46968e91b..bba6dafc6 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionListopsWidget.tid @@ -1,7 +1,9 @@ caption: action-listops created: 20141025120850184 -modified: 20151108075247352 +list: efg hlm pqr +modified: 20151228083329099 myfield: +revision: 0 tags: ActionWidgets Widgets title: ActionListopsWidget type: text/vnd.tiddlywiki @@ -28,7 +30,7 @@ The ''action-listops'' widget is invisible. Any content within it is ignored. |!Attribute |!Description | |$tiddler |The title of the tiddler whose lists are to be modified (if not provided defaults to the [[current tiddler|Current Tiddler]] | -|$list |The name of a field to be manipulated as a list (defaults to 'list') | +|$field |The name of a field to be manipulated as a list (defaults to 'list') | |$index |Optional index of a property in a [[data tiddler|DataTiddlers]] index to be manipulated as a list | |$filter |An optional filter expression, the output of which will be saved to the field/index being manipulated | |$subfilter |An optional subfilter expression, which takes the list being manipulated as input, and saves the modified list back to the field/index being manipulated | @@ -54,19 +56,19 @@ In this example we shall populate and then clear a list in an ordinary field (my <$macrocall $name='wikitext-example-without-html' src="""<$button> -<$action-listops $list="myfield" $subfilter="efg hlm pqr"/> +<$action-listops $field="myfield" $subfilter="efg hlm pqr"/> Populate 'myfield' </$button> <$button> -<$action-listops $list="myfield" $subfilter="abc xyz"/> +<$action-listops $field="myfield" $subfilter="abc xyz"/> Append More Items </$button> <$button> -<$action-listops $list="myfield" $subfilter="-abc -hlm"/> +<$action-listops $field="myfield" $subfilter="-abc -hlm"/> Remove Items </$button> <$button> -<$action-listops $list="myfield" $filter="[[]]"/> +<$action-listops $field="myfield" $filter="[[]]"/> Clear 'myfield' </$button> @@ -79,11 +81,11 @@ In this example we shall append and remove items from a list in an ordinary fiel <$macrocall $name='wikitext-example-without-html' src="""<$button> -<$action-listops $list="myfield" $subfilter="-efg ijk xyz [[this is a title]] +[sort[]]"/> +<$action-listops $field="myfield" $subfilter="-efg ijk xyz [[this is a title]] +[sort[]]"/> Mangle List </$button> <$button> -<$action-listops $list="myfield" $subfilter="-xyz -[[this is a title]] +[!sort[]]"/> +<$action-listops $field="myfield" $subfilter="-xyz -[[this is a title]] +[!sort[]]"/> Unmangle List </$button> From 471f28e52bf1b9c46206f1e34a9d1aad0e282c79 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Mon, 28 Dec 2015 18:08:05 +0200 Subject: [PATCH 162/242] Fix inadvertent clearing of text field (default) when `field` attribute of the ActionSetField widget isn't set. When using the widget with only short form SetText attributes (field="value) -- the default field (text) of the default tiddler is set to the default value ("") -- thus clearing the text field of the current tiddler. I have inserted a conditional to test for the presence of the `field` attribute. Whilst I was about this, I have inserted code to enable the setting of any number of TextReferences -- this fixes the issue of only being able to set one index per widget and also allows different tiddlers to be targeted by the same widget. --- core/modules/widgets/action-setfield.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/core/modules/widgets/action-setfield.js b/core/modules/widgets/action-setfield.js index 98079f00c..d9c2b2edf 100644 --- a/core/modules/widgets/action-setfield.js +++ b/core/modules/widgets/action-setfield.js @@ -59,14 +59,16 @@ Invoke the action associated with this widget */ SetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) { var self = this, - options = {}; + options = {}; options.suppressTimestamp = !this.actionTimestamp; - if((typeof this.actionField == "string") || (typeof this.actionIndex == "string") || (typeof this.actionValue == "string")) { - this.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options); + if (this.actionField) { + this.wiki.setText(this.actionTiddler, this.actionField, this.actionIndex, this.actionValue, options); } - $tw.utils.each(this.attributes,function(attribute,name) { - if(name.charAt(0) !== "$") { - self.wiki.setText(self.actionTiddler,name,undefined,attribute,options); + $tw.utils.each(this.attributes, function (attribute, name) { + if (name.charAt(0) !== "$") { + (name.search("!!") !== -1 || name.search("##") !== -1) ? + self.wiki.setTextReference(name, attribute, self.actionTiddler): + self.wiki.setText(self.actionTiddler, name, undefined, attribute, options); } }); return true; // Action was invoked From a44edee782915d191c524e8c0674648553a37b45 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Mon, 28 Dec 2015 18:12:22 +0200 Subject: [PATCH 163/242] Changed indents from spaces to tabs I am informed this is the correct convention for TW5. --- core/modules/widgets/action-listops.js | 142 ++++++++++++------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/core/modules/widgets/action-listops.js b/core/modules/widgets/action-listops.js index 4e8e8694f..de866619f 100644 --- a/core/modules/widgets/action-listops.js +++ b/core/modules/widgets/action-listops.js @@ -8,84 +8,84 @@ Action widget to apply list operations to any tiddler field (defaults to the 'li \*/ (function () { - /*jslint node: true, browser: true */ - /*global $tw: false */ - "use strict"; + /*jslint node: true, browser: true */ + /*global $tw: false */ + "use strict"; - var Widget = require("$:/core/modules/widgets/widget.js") - .widget; + var Widget = require("$:/core/modules/widgets/widget.js") + .widget; - var ActionListopsWidget = function (parseTreeNode, options) { - this.initialise(parseTreeNode, options); - }; + var ActionListopsWidget = function (parseTreeNode, options) { + this.initialise(parseTreeNode, options); + }; - /* - Inherit from the base widget class - */ - ActionListopsWidget.prototype = new Widget(); + /* + Inherit from the base widget class + */ + ActionListopsWidget.prototype = new Widget(); - /* - Render this widget into the DOM - */ - ActionListopsWidget.prototype.render = function (parent, nextSibling) { - this.computeAttributes(); - this.execute(); - }; + /* + Render this widget into the DOM + */ + ActionListopsWidget.prototype.render = function (parent, nextSibling) { + this.computeAttributes(); + this.execute(); + }; - /* - Compute the internal state of the widget - */ - ActionListopsWidget.prototype.execute = function () { - // Get our parameters - this.target = this.getAttribute("$tiddler", this.getVariable("currentTiddler")); - this.filter = this.getAttribute("$filter"); - this.subfilter = this.getAttribute("$subfilter"); - this.listField = this.getAttribute("$field", "list"); - this.listIndex = this.getAttribute("$index"); - this.filtertags = this.getAttribute("$tags"); - }; + /* + Compute the internal state of the widget + */ + ActionListopsWidget.prototype.execute = function () { + // Get our parameters + this.target = this.getAttribute("$tiddler", this.getVariable("currentTiddler")); + this.filter = this.getAttribute("$filter"); + this.subfilter = this.getAttribute("$subfilter"); + this.listField = this.getAttribute("$field", "list"); + this.listIndex = this.getAttribute("$index"); + this.filtertags = this.getAttribute("$tags"); + }; - /* - Refresh the widget by ensuring our attributes are up to date - */ - ActionListopsWidget.prototype.refresh = function (changedTiddlers) { - var changedAttributes = this.computeAttributes(); - if (changedAttributes.$tiddler || changedAttributes.$filter || changedAttributes.$subfilter || changedAttributes.$list || changedAttributes.$index || changedAttributes.$tags) { - this.refreshSelf(); - return true; - } - return this.refreshChildren(changedTiddlers); - }; + /* + Refresh the widget by ensuring our attributes are up to date + */ + ActionListopsWidget.prototype.refresh = function (changedTiddlers) { + var changedAttributes = this.computeAttributes(); + if (changedAttributes.$tiddler || changedAttributes.$filter || changedAttributes.$subfilter || changedAttributes.$list || changedAttributes.$index || changedAttributes.$tags) { + this.refreshSelf(); + return true; + } + return this.refreshChildren(changedTiddlers); + }; - /* - Invoke the action associated with this widget - */ - ActionListopsWidget.prototype.invokeAction = function (triggeringWidget, event) { - //Apply the specified filters to the lists - var field = this.listField, - index = undefined, - type = "!!", - list = this.listField; - if (this.listIndex) { - field = undefined; - index = this.listIndex; - type = "##"; - list = this.listIndex; - } - if (this.filter) { - this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(this.filter, this))); - } - if (this.subfilter) { - var subfilter = "[list[" + this.target + type + list + "]] " + this.subfilter; - this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter, this))); - } - if (this.filtertags) { - var tagfilter = "[list[" + this.target + "!!tags]] " + this.filtertags; - this.wiki.setText(this.target, "tags", undefined, $tw.utils.stringifyList(this.wiki.filterTiddlers(tagfilter, this))); - } - return true; // Action was invoked - }; + /* + Invoke the action associated with this widget + */ + ActionListopsWidget.prototype.invokeAction = function (triggeringWidget, event) { + //Apply the specified filters to the lists + var field = this.listField, + index = undefined, + type = "!!", + list = this.listField; + if (this.listIndex) { + field = undefined; + index = this.listIndex; + type = "##"; + list = this.listIndex; + } + if (this.filter) { + this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(this.filter, this))); + } + if (this.subfilter) { + var subfilter = "[list[" + this.target + type + list + "]] " + this.subfilter; + this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter, this))); + } + if (this.filtertags) { + var tagfilter = "[list[" + this.target + "!!tags]] " + this.filtertags; + this.wiki.setText(this.target, "tags", undefined, $tw.utils.stringifyList(this.wiki.filterTiddlers(tagfilter, this))); + } + return true; // Action was invoked + }; - exports["action-listops"] = ActionListopsWidget; + exports["action-listops"] = ActionListopsWidget; })(); From 7fbe29fd047c14f0b5f60404ce3af9955d7d780a Mon Sep 17 00:00:00 2001 From: nameanyone <nameanyone@users.noreply.github.com> Date: Mon, 28 Dec 2015 22:28:48 -0800 Subject: [PATCH 164/242] Remove spaces around the fold button ...by removing newlines betwen widgets. Makes source harder to read but eliminates space characters from the end result. --- core/ui/ViewToolbar/fold.tid | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/core/ui/ViewToolbar/fold.tid b/core/ui/ViewToolbar/fold.tid index aa6e384fd..b0b686e12 100644 --- a/core/ui/ViewToolbar/fold.tid +++ b/core/ui/ViewToolbar/fold.tid @@ -3,8 +3,7 @@ tags: $:/tags/ViewToolbar caption: {{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}} description: {{$:/language/Buttons/Fold/Hint}} -<$reveal type="nomatch" state=<<folded-state>> text="hide" default="show"> -<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>> +<$reveal type="nomatch" state=<<folded-state>> text="hide" default="show"><$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/> <$list filter="[<tv-config-toolbar-icons>prefix[yes]]" variable="listItem"> {{$:/core/images/fold-button}} @@ -15,10 +14,7 @@ description: {{$:/language/Buttons/Fold/Hint}} </span> </$list> </$button> -</$reveal> - -<$reveal type="match" state=<<folded-state>> text="hide" default="show"> -<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>> +</$reveal><$reveal type="match" state=<<folded-state>> text="hide" default="show"><$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/> <$list filter="[<tv-config-toolbar-icons>prefix[yes]]" variable="listItem"> {{$:/core/images/unfold-button}} From 747eb9daba583d3b3c9f67466168e2a5b54cec6e Mon Sep 17 00:00:00 2001 From: nameanyone <nameanyone@users.noreply.github.com> Date: Tue, 29 Dec 2015 00:02:19 -0800 Subject: [PATCH 165/242] Remove spaces between horizontal tabs --- core/wiki/macros/tabs.tid | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/core/wiki/macros/tabs.tid b/core/wiki/macros/tabs.tid index 4d1a9dfc0..4b49ac4b9 100644 --- a/core/wiki/macros/tabs.tid +++ b/core/wiki/macros/tabs.tid @@ -4,17 +4,13 @@ tags: $:/tags/Macro \define tabs(tabsList,default,state:"$:/state/tab",class,template) <div class="tc-tab-set $class$"> <div class="tc-tab-buttons $class$"> -<$list filter="$tabsList$ +[nsort[order]]" variable="currentTab"> -<$tiddler tiddler=<<currentTab>> > -<$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}> +<$list filter="$tabsList$ +[nsort[order]]" variable="currentTab"><$tiddler tiddler=<<currentTab>> ><$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}> <$set name="tv-wikilinks" value="no"> <$transclude tiddler=<<currentTab>> field="caption"> <$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/> </$transclude> </$set> -</$button> -</$tiddler> -</$list> +</$button></$tiddler></$list> </div><div class="tc-tab-divider $class$"/><div class="tc-tab-content $class$"> <$list filter="$tabsList$" variable="currentTab"> From 2a26ca53c2cc3b52f7b774d4687efb768be6fa8b Mon Sep 17 00:00:00 2001 From: nameanyone <nameanyone@users.noreply.github.com> Date: Tue, 29 Dec 2015 00:12:06 -0800 Subject: [PATCH 166/242] Add margin to horizontal tabs --- themes/tiddlywiki/vanilla/base.tid | 2 ++ 1 file changed, 2 insertions(+) diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index b809ba9dc..35d969209 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1472,6 +1472,7 @@ html body.tc-body.tc-single-tiddler-window { .tc-tab-buttons button { color: <<colour tab-foreground>>; padding: 3px 5px 3px 5px; + margin-right: 0.3em; font-weight: 300; border: none; background: inherit; @@ -1487,6 +1488,7 @@ html body.tc-body.tc-single-tiddler-window { display: block; width: 100%; margin-top: 3px; + margin-right: 0; text-align: right; background-color: <<colour tab-background>>; border-left: 1px solid <<colour tab-border>>; From e3f381ed8dc51d2e345e1a71bd2267e1fe6acf31 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 29 Dec 2015 15:21:53 +0000 Subject: [PATCH 167/242] Remove extraneous whitespace between tag pills Fixes #2170 --- core/ui/TagTemplate.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ui/TagTemplate.tid b/core/ui/TagTemplate.tid index 6cce1d297..006758f73 100644 --- a/core/ui/TagTemplate.tid +++ b/core/ui/TagTemplate.tid @@ -27,4 +27,4 @@ color:$(foregroundColor)$; </span> \end -<$macrocall $name="tag-body" colour={{!!color}} palette={{$:/palette}}/> +<$macrocall $name="tag-body" colour={{!!color}} palette={{$:/palette}}/> \ No newline at end of file From 040e35eab6910e202e7302fb694611027fee3a50 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 29 Dec 2015 15:51:26 +0000 Subject: [PATCH 168/242] Restore accidentally deleted tiddler fields Fixes #2174 --- editions/tw5.com/tiddlers/filters/FilterOperators.tid | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/editions/tw5.com/tiddlers/filters/FilterOperators.tid b/editions/tw5.com/tiddlers/filters/FilterOperators.tid index 5390dbf55..22c7245f5 100644 --- a/editions/tw5.com/tiddlers/filters/FilterOperators.tid +++ b/editions/tw5.com/tiddlers/filters/FilterOperators.tid @@ -1,3 +1,9 @@ +created: 20140410103123179 +modified: 20150917193612610 +tags: Filters +title: Filter Operators +type: text/vnd.tiddlywiki + \define .operator-rows(filter) <$list filter="$filter$"><tr> <td><$link to={{!!title}}>{{!!caption}}</$link></td> From bd9cd10de12906315fe53f3e37fbb3e1d486a77f Mon Sep 17 00:00:00 2001 From: nameanyone <nameanyone@users.noreply.github.com> Date: Wed, 30 Dec 2015 15:38:35 -0800 Subject: [PATCH 169/242] Remove the trailing space as well, missed that. --- core/ui/ViewToolbar/fold.tid | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/ui/ViewToolbar/fold.tid b/core/ui/ViewToolbar/fold.tid index b0b686e12..0c9d116e1 100644 --- a/core/ui/ViewToolbar/fold.tid +++ b/core/ui/ViewToolbar/fold.tid @@ -13,8 +13,7 @@ description: {{$:/language/Buttons/Fold/Hint}} <$text text={{$:/language/Buttons/Fold/Caption}}/> </span> </$list> -</$button> -</$reveal><$reveal type="match" state=<<folded-state>> text="hide" default="show"><$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>> +</$button></$reveal><$reveal type="match" state=<<folded-state>> text="hide" default="show"><$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>> <$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/> <$list filter="[<tv-config-toolbar-icons>prefix[yes]]" variable="listItem"> {{$:/core/images/unfold-button}} @@ -24,5 +23,4 @@ description: {{$:/language/Buttons/Fold/Hint}} <$text text={{$:/language/Buttons/Unfold/Caption}}/> </span> </$list> -</$button> -</$reveal> +</$button></$reveal> From 49c6a172ad5b74457f1d4d8af5fea3b991aa7867 Mon Sep 17 00:00:00 2001 From: nameanyone <nameanyone@users.noreply.github.com> Date: Wed, 30 Dec 2015 16:57:49 -0800 Subject: [PATCH 170/242] Get rid of newline at eof. --- core/ui/ViewToolbar/fold.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ui/ViewToolbar/fold.tid b/core/ui/ViewToolbar/fold.tid index 0c9d116e1..545114a82 100644 --- a/core/ui/ViewToolbar/fold.tid +++ b/core/ui/ViewToolbar/fold.tid @@ -23,4 +23,4 @@ description: {{$:/language/Buttons/Fold/Hint}} <$text text={{$:/language/Buttons/Unfold/Caption}}/> </span> </$list> -</$button></$reveal> +</$button></$reveal> \ No newline at end of file From 56ff0027e0dc1f360b8278605e7ad6e4cb5b04b2 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 31 Dec 2015 08:47:09 +0000 Subject: [PATCH 171/242] Add new release banner for 5.1.10 --- editions/tw5.com/tiddlers/LanguageGallery.tid | 25 ++++++++++++++++++ .../tiddlers/images/New Release Banner.png | Bin 68281 -> 62291 bytes 2 files changed, 25 insertions(+) create mode 100644 editions/tw5.com/tiddlers/LanguageGallery.tid diff --git a/editions/tw5.com/tiddlers/LanguageGallery.tid b/editions/tw5.com/tiddlers/LanguageGallery.tid new file mode 100644 index 000000000..437fdaa6a --- /dev/null +++ b/editions/tw5.com/tiddlers/LanguageGallery.tid @@ -0,0 +1,25 @@ +created: 20151231083708980 +modified: 20151231084132703 +tags: +title: LanguageGallery +type: text/vnd.tiddlywiki + +Here is an example of using the ListWidget and the TranscludeWidget to show a grid of all language icons (ie, tiddlers tagged [[Language]] and [[Icon]]). + +<style> +.language-gallery img { +width: 5em; +height: auto; +margin: 0.5em; +-webkit-box-shadow: 2px 2px 5px rgba(0,0,0,0.2); + -moz-box-shadow: 2px 2px 5px rgba(0,0,0,0.2); + box-shadow: 2px 2px 5px rgba(0,0,0,0.2); +} +</style> +<div class="language-gallery"> +<$list filter="[all[tiddlers+shadows]tag[Language]tag[Icon]]"> +<span title=<<currentTiddler>>> +<$transclude/> +</span> +</$list> +</div> diff --git a/editions/tw5.com/tiddlers/images/New Release Banner.png b/editions/tw5.com/tiddlers/images/New Release Banner.png index f40277aef9dfbfed9d3d22f05ee985bc6d9e56cf..5a32734b3e5f81a997d36485b242177a42d7c68d 100644 GIT binary patch literal 62291 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 Eg4kVy0RR91 literal 68281 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 CZLlx^ From f42acfa73e15bf8c2edd5f12c4c821e04c873bca Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 31 Dec 2015 14:03:48 +0000 Subject: [PATCH 172/242] Revised banner for 5.1.10 --- .../tiddlers/images/New Release Banner.png | Bin 62291 -> 36607 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/editions/tw5.com/tiddlers/images/New Release Banner.png b/editions/tw5.com/tiddlers/images/New Release Banner.png index 5a32734b3e5f81a997d36485b242177a42d7c68d..a6a6d046e07403631656404ed32820a8d71e0956 100644 GIT binary patch literal 36607 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%0Abx7dm^l}(;#nG1(=5~-fXm>TkLD{cq@DDW5} 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 LI5TX8o<rzA-^*wt literal 62291 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 Eg4kVy0RR91 From 658ccadca73bdfdb329a5ba0192a6a8ef69da152 Mon Sep 17 00:00:00 2001 From: nameanyone <nameanyone@users.noreply.github.com> Date: Thu, 31 Dec 2015 13:40:28 -0800 Subject: [PATCH 173/242] Remove obsolete reference to "recent" filter operator --- editions/prerelease/tiddlers/Release 5.1.10.tid | 1 - 1 file changed, 1 deletion(-) diff --git a/editions/prerelease/tiddlers/Release 5.1.10.tid b/editions/prerelease/tiddlers/Release 5.1.10.tid index b086df445..c295df048 100644 --- a/editions/prerelease/tiddlers/Release 5.1.10.tid +++ b/editions/prerelease/tiddlers/Release 5.1.10.tid @@ -80,7 +80,6 @@ Revert !! Hackability Improvements * Updated to KaTeX v0.5.1, with [[several new features|https://github.com/Khan/KaTeX/releases]] -* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/c4397792f5d396288048bcc3bb4ee8e95dbc2c5e]] added [[recent Operator]] * [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/e0aacc84d5f084ff7a53153c590fbff3d24f2e2c]] `publishFilter` to default save template * [[Allow|https://github.com/Jermolene/TiddlyWiki5/commit/7dddc925ae93725552b98bc348a07572895da96c]] ''delete'' button to be used in the tiddler view-mode toolbar * [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/742161675421a942051abed01cb47c0394f4db6d]] a new [[hidden setting for keyboard shortcuts|Hidden Setting: Keyboard Shortcuts]] From ac8b706d421030a4b074f9bf18fa183e6f137e2c Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Sun, 3 Jan 2016 16:30:00 +0200 Subject: [PATCH 174/242] Correct Formatting Removed extra tab spacing and corrected syntax error --- core/modules/widgets/action-listops.js | 159 +++++++++++++------------ 1 file changed, 80 insertions(+), 79 deletions(-) diff --git a/core/modules/widgets/action-listops.js b/core/modules/widgets/action-listops.js index de866619f..a6b0d4f62 100644 --- a/core/modules/widgets/action-listops.js +++ b/core/modules/widgets/action-listops.js @@ -6,86 +6,87 @@ module-type: widget Action widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler) \*/ -(function () { +(function() { - /*jslint node: true, browser: true */ - /*global $tw: false */ - "use strict"; +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; +var Widget = require("$:/core/modules/widgets/widget.js").widget; +var ActionListopsWidget = function(parseTreeNode, options) { + this.initialise(parseTreeNode, options); +}; +/** + * Inherit from the base widget class + */ +ActionListopsWidget.prototype = new Widget(); +/** + * Render this widget into the DOM + */ +ActionListopsWidget.prototype.render = function(parent, nextSibling) { + this.computeAttributes(); + this.execute(); +}; +/** + * Compute the internal state of the widget + */ +ActionListopsWidget.prototype.execute = function() { + // Get our parameters + this.target = this.getAttribute("$tiddler", this.getVariable( + "currentTiddler")); + this.filter = this.getAttribute("$filter"); + this.subfilter = this.getAttribute("$subfilter"); + this.listField = this.getAttribute("$field", "list"); + this.listIndex = this.getAttribute("$index"); + this.filtertags = this.getAttribute("$tags"); +}; +/** + * Refresh the widget by ensuring our attributes are up to date + */ +ActionListopsWidget.prototype.refresh = function(changedTiddlers) { + var changedAttributes = this.computeAttributes(); + if(changedAttributes.$tiddler || changedAttributes.$filter || + changedAttributes.$subfilter || changedAttributes.$field || + changedAttributes.$index || changedAttributes.$tags) { + this.refreshSelf(); + return true; + } + return this.refreshChildren(changedTiddlers); +}; +/** + * Invoke the action associated with this widget + */ +ActionListopsWidget.prototype.invokeAction = function(triggeringWidget, + event) { + //Apply the specified filters to the lists + var field = this.listField, + index, + type = "!!", + list = this.listField; + if(this.listIndex) { + field = undefined; + index = this.listIndex; + type = "##"; + list = this.listIndex; + } + if(this.filter) { + this.wiki.setText(this.target, field, index, $tw.utils.stringifyList( + this.wiki + .filterTiddlers(this.filter, this))); + } + if(this.subfilter) { + var subfilter = "[list[" + this.target + type + list + "]] " + this.subfilter; + this.wiki.setText(this.target, field, index, $tw.utils.stringifyList( + this.wiki + .filterTiddlers(subfilter, this))); + } + if(this.filtertags) { + var tagfilter = "[list[" + this.target + "!!tags]] " + this.filtertags; + this.wiki.setText(this.target, "tags", undefined, $tw.utils.stringifyList( + this.wiki.filterTiddlers(tagfilter, this))); + } + return true; // Action was invoked +}; - var Widget = require("$:/core/modules/widgets/widget.js") - .widget; - - var ActionListopsWidget = function (parseTreeNode, options) { - this.initialise(parseTreeNode, options); - }; - - /* - Inherit from the base widget class - */ - ActionListopsWidget.prototype = new Widget(); - - /* - Render this widget into the DOM - */ - ActionListopsWidget.prototype.render = function (parent, nextSibling) { - this.computeAttributes(); - this.execute(); - }; - - /* - Compute the internal state of the widget - */ - ActionListopsWidget.prototype.execute = function () { - // Get our parameters - this.target = this.getAttribute("$tiddler", this.getVariable("currentTiddler")); - this.filter = this.getAttribute("$filter"); - this.subfilter = this.getAttribute("$subfilter"); - this.listField = this.getAttribute("$field", "list"); - this.listIndex = this.getAttribute("$index"); - this.filtertags = this.getAttribute("$tags"); - }; - - /* - Refresh the widget by ensuring our attributes are up to date - */ - ActionListopsWidget.prototype.refresh = function (changedTiddlers) { - var changedAttributes = this.computeAttributes(); - if (changedAttributes.$tiddler || changedAttributes.$filter || changedAttributes.$subfilter || changedAttributes.$list || changedAttributes.$index || changedAttributes.$tags) { - this.refreshSelf(); - return true; - } - return this.refreshChildren(changedTiddlers); - }; - - /* - Invoke the action associated with this widget - */ - ActionListopsWidget.prototype.invokeAction = function (triggeringWidget, event) { - //Apply the specified filters to the lists - var field = this.listField, - index = undefined, - type = "!!", - list = this.listField; - if (this.listIndex) { - field = undefined; - index = this.listIndex; - type = "##"; - list = this.listIndex; - } - if (this.filter) { - this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(this.filter, this))); - } - if (this.subfilter) { - var subfilter = "[list[" + this.target + type + list + "]] " + this.subfilter; - this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter, this))); - } - if (this.filtertags) { - var tagfilter = "[list[" + this.target + "!!tags]] " + this.filtertags; - this.wiki.setText(this.target, "tags", undefined, $tw.utils.stringifyList(this.wiki.filterTiddlers(tagfilter, this))); - } - return true; // Action was invoked - }; - - exports["action-listops"] = ActionListopsWidget; +exports["action-listops"] = ActionListopsWidget; })(); From fa3ea480fe422edd43a6fc1b69672f968e051750 Mon Sep 17 00:00:00 2001 From: alexhough <r.a.hough@googlemail.com> Date: Sun, 3 Jan 2016 17:11:13 +0000 Subject: [PATCH 175/242] add "Transclusion and Substitution" to learn more --- editions/tw5.com/tiddlers/concepts/Transclusion.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/tw5.com/tiddlers/concepts/Transclusion.tid b/editions/tw5.com/tiddlers/concepts/Transclusion.tid index e87032b29..c7d2af671 100644 --- a/editions/tw5.com/tiddlers/concepts/Transclusion.tid +++ b/editions/tw5.com/tiddlers/concepts/Transclusion.tid @@ -16,6 +16,7 @@ To learn more: * [[Transclusion in WikiText]] * [[Transclusion Basic Usage]] * [[Transclusion with Templates]] +* [[Transclusion and Substitution]] * TextReference * TemplateTiddlers * TranscludeWidget From f8723397e93a9bc6fd3e0714e925a5e42c558ff3 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sun, 3 Jan 2016 18:02:49 +0000 Subject: [PATCH 176/242] Fix clean.sh Was ignoring editions with numerals in pathname --- bin/clean.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/clean.sh b/bin/clean.sh index b282f332c..522479edb 100755 --- a/bin/clean.sh +++ b/bin/clean.sh @@ -2,4 +2,4 @@ # Remove any output files -find . -regex "^./editions/[a-z\.-]*/output/.*" -delete +find . -regex "^./editions/[a-z0-9\.-]*/output/.*" -delete From 665d6657bba4867f77cee394ac3d7f2e5bd7bf0f Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sun, 3 Jan 2016 18:04:21 +0000 Subject: [PATCH 177/242] It's 2016! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🎉🎊🎆 --- core/copyright.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/copyright.tid b/core/copyright.tid index b44f474f2..828953895 100644 --- a/core/copyright.tid +++ b/core/copyright.tid @@ -4,7 +4,7 @@ type: text/plain TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com) Copyright © Jeremy Ruston 2004-2007 -Copyright © UnaMesa Association 2007-2015 +Copyright © UnaMesa Association 2007-2016 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: From 5cc1f2b31363a9e956438fdc8f8cef94e608ec3f Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sun, 3 Jan 2016 18:05:08 +0000 Subject: [PATCH 178/242] Fix problem with search popup disappearing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This one took quite a lot of tracking down… Fixes #2172 --- core/modules/utils/dom/popup.js | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/core/modules/utils/dom/popup.js b/core/modules/utils/dom/popup.js index 25f14e612..5096d13bb 100644 --- a/core/modules/utils/dom/popup.js +++ b/core/modules/utils/dom/popup.js @@ -31,12 +31,7 @@ Trigger a popup open or closed. Parameters are in a hashmap: */ Popup.prototype.triggerPopup = function(options) { // Check if this popup is already active - var index = -1; - for(var t=0; t<this.popups.length; t++) { - if(this.popups[t].title === options.title) { - index = t; - } - } + var index = this.findPopup(options.title); // Compute the new state var state = index === -1; if(options.force !== undefined) { @@ -50,6 +45,16 @@ Popup.prototype.triggerPopup = function(options) { } }; +Popup.prototype.findPopup = function(title) { + var index = -1; + for(var t=0; t<this.popups.length; t++) { + if(this.popups[t].title === title) { + index = t; + } + } + return index; +}; + Popup.prototype.handleEvent = function(event) { if(event.type === "click") { // Find out what was clicked on @@ -107,12 +112,14 @@ Popup.prototype.show = function(options) { var info = this.popupInfo(options.domNode); // Cancel any higher level popups this.cancel(info.popupLevel); - // Store the popup details - this.popups.push({ - title: options.title, - wiki: options.wiki, - domNode: options.domNode - }); + // Store the popup details if not already there + if(this.findPopup(options.title) === -1) { + this.popups.push({ + title: options.title, + wiki: options.wiki, + domNode: options.domNode + }); + } // Set the state tiddler options.wiki.setTextReference(options.title, "(" + options.domNode.offsetLeft + "," + options.domNode.offsetTop + "," + From 0240a8048f81bee000b0225a15e2a584213badd7 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Mon, 4 Jan 2016 20:09:02 +0000 Subject: [PATCH 179/242] Fix default date format --- core/language/en-GB/Misc.multids | 2 +- languages/nl-NL/Misc.multids | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/language/en-GB/Misc.multids b/core/language/en-GB/Misc.multids index 3c19e0e37..d953eb01f 100644 --- a/core/language/en-GB/Misc.multids +++ b/core/language/en-GB/Misc.multids @@ -34,5 +34,5 @@ TagManager/Count/Heading: Count TagManager/Icon/Heading: Icon TagManager/Info/Heading: Info TagManager/Tag/Heading: Tag -Tiddler/DateFormat: DDth MMM YYYY at hh12:mmam +Tiddler/DateFormat: DDth MMM YYYY at hh12:0mmam UnsavedChangesWarning: You have unsaved changes in TiddlyWiki diff --git a/languages/nl-NL/Misc.multids b/languages/nl-NL/Misc.multids index 5dfab8558..26ac56af0 100644 --- a/languages/nl-NL/Misc.multids +++ b/languages/nl-NL/Misc.multids @@ -38,5 +38,5 @@ TagManager/Count/Heading: Aantal TagManager/Icon/Heading: Pictogram (icon) TagManager/Info/Heading: Info TagManager/Tag/Heading: Label -Tiddler/DateFormat: DD MMM YYYY om hh12:mmam +Tiddler/DateFormat: DD MMM YYYY om hh12:0mmam UnsavedChangesWarning: Er zijn niet-opgeslagen veranderingen in TiddlyWiki From b2fd3366e3d3d0923ce1375bc9e1a4861bad3bcb Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 5 Jan 2016 13:05:10 +0000 Subject: [PATCH 180/242] Move staged content from prerelease These updates had been staged so that I could still perform updates of tiddlywiki.com for the previous release --- .../staging => tw5.com/tiddlers}/editions/Blog_Edition.tid | 0 .../tiddlers}/editions/Resume_Builder_Edition.tid | 0 .../staging => tw5.com/tiddlers}/editions/Text_Slicer_Edition.tid | 0 .../tiddlers/staging => tw5.com/tiddlers}/filters/days.tid | 0 .../staging => tw5.com/tiddlers}/filters/examples/days.tid | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename editions/{prerelease/tiddlers/staging => tw5.com/tiddlers}/editions/Blog_Edition.tid (100%) rename editions/{prerelease/tiddlers/staging => tw5.com/tiddlers}/editions/Resume_Builder_Edition.tid (100%) rename editions/{prerelease/tiddlers/staging => tw5.com/tiddlers}/editions/Text_Slicer_Edition.tid (100%) rename editions/{prerelease/tiddlers/staging => tw5.com/tiddlers}/filters/days.tid (100%) rename editions/{prerelease/tiddlers/staging => tw5.com/tiddlers}/filters/examples/days.tid (100%) diff --git a/editions/prerelease/tiddlers/staging/editions/Blog_Edition.tid b/editions/tw5.com/tiddlers/editions/Blog_Edition.tid similarity index 100% rename from editions/prerelease/tiddlers/staging/editions/Blog_Edition.tid rename to editions/tw5.com/tiddlers/editions/Blog_Edition.tid diff --git a/editions/prerelease/tiddlers/staging/editions/Resume_Builder_Edition.tid b/editions/tw5.com/tiddlers/editions/Resume_Builder_Edition.tid similarity index 100% rename from editions/prerelease/tiddlers/staging/editions/Resume_Builder_Edition.tid rename to editions/tw5.com/tiddlers/editions/Resume_Builder_Edition.tid diff --git a/editions/prerelease/tiddlers/staging/editions/Text_Slicer_Edition.tid b/editions/tw5.com/tiddlers/editions/Text_Slicer_Edition.tid similarity index 100% rename from editions/prerelease/tiddlers/staging/editions/Text_Slicer_Edition.tid rename to editions/tw5.com/tiddlers/editions/Text_Slicer_Edition.tid diff --git a/editions/prerelease/tiddlers/staging/filters/days.tid b/editions/tw5.com/tiddlers/filters/days.tid similarity index 100% rename from editions/prerelease/tiddlers/staging/filters/days.tid rename to editions/tw5.com/tiddlers/filters/days.tid diff --git a/editions/prerelease/tiddlers/staging/filters/examples/days.tid b/editions/tw5.com/tiddlers/filters/examples/days.tid similarity index 100% rename from editions/prerelease/tiddlers/staging/filters/examples/days.tid rename to editions/tw5.com/tiddlers/filters/examples/days.tid From 93f7d8c028fa3e221eb7cc6e67561582086f409e Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 5 Jan 2016 18:48:04 +0000 Subject: [PATCH 181/242] Fix bug with tiddler widget and a blank tiddler title --- core/modules/wiki.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/modules/wiki.js b/core/modules/wiki.js index b6e9fa068..64abe9e89 100755 --- a/core/modules/wiki.js +++ b/core/modules/wiki.js @@ -193,11 +193,11 @@ exports.generateNewTitle = function(baseTitle,options) { }; exports.isSystemTiddler = function(title) { - return title.indexOf("$:/") === 0; + return title && title.indexOf("$:/") === 0; }; exports.isTemporaryTiddler = function(title) { - return title.indexOf("$:/temp/") === 0; + return title && title.indexOf("$:/temp/") === 0; }; exports.isImageTiddler = function(title) { From 0cbe97615ad41b7263e56b49efaf275e919e4ec9 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 5 Jan 2016 18:48:21 +0000 Subject: [PATCH 182/242] Add size attribute to select widget for multiple selection mode --- core/modules/widgets/select.js | 4 ++++ editions/tw5.com/tiddlers/widgets/SelectWidget.tid | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index 18552fc1a..b0d7385cb 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -138,6 +138,7 @@ SelectWidget.prototype.execute = function() { this.selectClass = this.getAttribute("class"); this.selectDefault = this.getAttribute("default"); this.selectMultiple = this.getAttribute("multiple", false); + this.selectSize = this.getAttribute("size"); // Make the child widgets var selectNode = { type: "element", @@ -150,6 +151,9 @@ SelectWidget.prototype.execute = function() { if(this.selectMultiple) { $tw.utils.addAttributeToParseTreeNode(selectNode,"multiple","multiple"); } + if(this.selectSize) { + $tw.utils.addAttributeToParseTreeNode(selectNode,"size",this.selectSize); + } this.makeChildWidgets([selectNode]); }; diff --git a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid index 8eab689bd..f8db9617f 100644 --- a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid @@ -10,6 +10,8 @@ type: text/vnd.tiddlywiki The select widget displays a popup menu based on a [[HTML select element|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select]]. The popup (or dropdown) contains a list of items defined by `<option>` and `<optgroup>` elements. Every time the user selects a new value in the menu, the selected value is written to the text of a specified tiddler field or index. If the tiddler value changes the menu is automatically updated to reflect the new value. +In multiple selection mode, the list of selected values is bound to the specified tiddler field or index. Browsers generally use the <kbd>ctrl</kbd> or <kbd>cmd</kbd> keys for multiple selection. + For example, this select widget displays a list of the tags in this wiki: <$macrocall $name="wikitext-example-without-html" src="<$select tiddler=<<qualify 'select-demo'>> default='HelloThere'> @@ -34,7 +36,8 @@ The content of the `<$select>` widget should be one or more HTML `<option>` or ` |index |The index of a property in a [[DataTiddler|DataTiddlers]] (takes precedence over the field attribute) | |class |CSS classes to be assigned to the HTML select element | |default |Default value to be used if the tiddler, field or index specifies a missing value | - +|multiple |If present, switches to multiple selection mode | +|size |The number of rows to display in multiple selection mode | ! Examples @@ -104,7 +107,7 @@ This example uses a nested pair of list widgets. The outer one generates the `<o This example uses the `multiple` keyword to specify that we should be able to select multiple items. -<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/generated-list-demo-state' field='testing' multiple> +<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/generated-list-demo-state' field='testing' multiple size='8'> <$list filter='[tag[TableOfContents]]'> <option><$view field='title'/></option> </$list> From 152c3db9a1296fad25b2844e716c7f7c63e69364 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Tue, 5 Jan 2016 21:02:18 +0200 Subject: [PATCH 183/242] Updated docs to include setting of TextReferences Can now accept any number of attributes of the form TextReference="value" -- these may be fields "(Tiddler!!field="value") or indices (Tiddler##index="value.) --- editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid b/editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid index 0e46808f7..ffe8901b5 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid @@ -19,7 +19,8 @@ The ''action-setfield'' widget is invisible. Any content within it is ignored. |$index |Optional index of a property in a [[data tiddler|DataTiddlers]] to be assigned the $value attribute| |$value |The value to be assigned to the field or index identified by the $field or $index attribute. If neither is specified then the value is assigned to the text field. If no value is specified, $field or $index will be deleted.| |$timestamp |Specifies whether the timestamp(s) of the target tiddler will be updated (''modified'' and ''modifier'', plus ''created'' and ''creator'' for newly created tiddlers). Can be "yes" (the default) or "no" | -|//{any attributes not starting with $}// |Each attribute name specifies a field to be modified with the attribute value providing the value to assign to the field | +|Attributes of the form TextReference="value" |Each TextReference identifies a field or index to be assigned the corresponding attribute value | +|//{any other attributes not starting with $}// |Each attribute name specifies a field to be assigned the value specified by the attribute value | ! Examples @@ -53,7 +54,7 @@ Here is an example of a button that assigns tags and fields to the tiddler Hello <$macrocall $name='wikitext-example-without-html' src='<$button> -<$action-setfield $tiddler="HelloThere" tags="MoreTag [[Further More Tags]]" color="green"/> +<$action-setfield HelloThere!!tags="MoreTag [[Further More Tags]]" HelloThere!!color="green"/> <$action-sendmessage $message="tm-edit-tiddler" $param="HelloThere"/> Edit ~HelloThere </$button>'/> From fcfddf2b46e09ea4c19168ceed8988cb959415cf Mon Sep 17 00:00:00 2001 From: mdeabreu <Matthew.DeAbreu@gmail.com> Date: Tue, 5 Jan 2016 11:09:55 -0800 Subject: [PATCH 184/242] Add information about TiddlyDesktop v0.0.7 --- .../TiddlyDesktop_Release_0.0.7.tid | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.7.tid diff --git a/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.7.tid b/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.7.tid new file mode 100644 index 000000000..0af75b7ae --- /dev/null +++ b/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.7.tid @@ -0,0 +1,25 @@ +caption: 0.0.7 +created: 20160105190019710 +modified: 20160105190302408 +released: 20151205 +tags: TiddlyDesktopReleaseNotes +title: TiddlyDesktop Release 0.0.7 +type: text/vnd.tiddlywiki + +<a href="https://github.com/Jermolene/TiddlyDesktop/releases/tag/v0.0.7" class="tc-btn-big-green" target="_blank"> +{{$:/core/images/github}} Download from ~GitHub +</a> + +[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyDesktop/compare/v0.0.6...v0.0.7]] + +Please report any problems or suggestions via GitHub issues, or post to the TiddlyWiki discussion group: + +http://groups.google.com/group/TiddlyWiki + + * Experimental support for "wiki folders" (the Node.js format for TiddlyWiki, where each tiddler is a separate file), including the ability to serve wiki folders over HTTP so that you can use any browser or device to access them + * Switched from representing wikis as thumbnails to favicons + * New system tray/menu icon for quick access to TiddlyDesktop + * Fixed problem with restarting after quitting with minimised windows on Windows (#77) + * Added TiddlyDesktop version number to "Help" window + +Note: Upgrading to this release will clear your list of loaded wiki files. The files themselves are not affected; you can re-add them by dragging and dropping them into the wiki list window. From d917198abb62c1955114cc8d277294917bda26f7 Mon Sep 17 00:00:00 2001 From: mdeabreu <Matthew.DeAbreu@gmail.com> Date: Tue, 5 Jan 2016 11:11:09 -0800 Subject: [PATCH 185/242] Add information about TiddlyDesktop v0.0.8 --- .../TiddlyDesktop_Release_0.0.8.tid | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.8.tid diff --git a/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.8.tid b/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.8.tid new file mode 100644 index 000000000..6bbf7822c --- /dev/null +++ b/editions/tw5.com/tiddlers/tiddlydesktop/TiddlyDesktop_Release_0.0.8.tid @@ -0,0 +1,22 @@ +caption: 0.0.8 +created: 20160105190346176 +modified: 20160105190448153 +released: 20151206 +tags: TiddlyDesktopReleaseNotes +title: TiddlyDesktop Release 0.0.8 +type: text/vnd.tiddlywiki + +<a href="https://github.com/Jermolene/TiddlyDesktop/releases/tag/v0.0.8" class="tc-btn-big-green" target="_blank"> +{{$:/core/images/github}} Download from ~GitHub +</a> + +[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyDesktop/compare/v0.0.7...v0.0.8]] + +A minor bug fix release. + +Please report any problems or suggestions via GitHub issues, or post to the TiddlyWiki discussion group: + +http://groups.google.com/group/TiddlyWiki + + * Fixes crash when clicking on external links + * Added warning when attempting to remove a wiki folder window that has been opened From 20983c01744c57ac8548322b2649c9b3088cd19f Mon Sep 17 00:00:00 2001 From: mdeabreu <Matthew.DeAbreu@gmail.com> Date: Tue, 5 Jan 2016 11:20:57 -0800 Subject: [PATCH 186/242] Update cla-individual.md --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index 60fce2889..a2d314211 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -260,3 +260,5 @@ Soeren Enevoldsen, @senevoldsen90, 2015/10/09 Santiago Pelufo, @spelufo, 2015/12/18 Matthew Lauber, @mklauber, 2015/11/13 + +Matthew DeAbreu, @mdeabreu, 2016/01/05 From 366cdb608d001da3c0d66a805f96c72503f31087 Mon Sep 17 00:00:00 2001 From: William Jackson <matabele.bill@gmail.com> Date: Wed, 6 Jan 2016 07:32:33 +0200 Subject: [PATCH 187/242] Fixed typos in docsof ActionListops widget --- .../tiddlers/widgets/The Extended Listops Filters.tid | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid b/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid index 92af38fc4..f5fecfd3e 100644 --- a/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid +++ b/editions/tw5.com/tiddlers/widgets/The Extended Listops Filters.tid @@ -13,9 +13,11 @@ title: The Extended Listops Filters ! Introduction -A number of extended filters are necessary to manipulate lists. The first set of filters are designed to move items from the tail of the list and insert them at specified locations in the list. Items are often appended to the list before using these filters. In general, these filters accept a suffix specifying the number of items to move (defaults to 1.) +A number of extended filters are necessary to manipulate lists. -A second set of filters are designed to either add or remove from the list, a selected range of items from an array. These filters are best used with a reference to an array, stored in a field or data indexe elsewhere in the wiki (they may be used with a simple list of items, provided the items do not include white space.) In general, these filters accept a suffix specifying the number of items to move (defaults to All.) +The first set of filters are designed to move items from the tail of the list and insert them at specified locations in the list. Items are often appended to the list before using these filters. In general, these filters accept a suffix specifying the number of items to move (default to 1.) + +A second set of filters are designed to either add or remove from the list, a selected range of items from an array. These filters are best used with a reference to an array, stored in a field or data index elsewhere in the wiki (they may be used with a simple list of items, provided the items do not include white space.) In general, these filters accept a suffix specifying the number of items to move (default to All.) ! Examples From 3fa5ba52f99c00331afbfcff84a8ddffc9ea12c5 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 6 Jan 2016 09:38:12 +0000 Subject: [PATCH 188/242] Revert "Merge pull request #2183 from matabele/patch-7" This reverts commit cd36ad582b91227abb25c066c22d7cc552f46b3f, reversing changes made to 83c54f4bb5131645aa5cc4456d7adf9b2d6e26e7. --- editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid b/editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid index ffe8901b5..0e46808f7 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionSetFieldWidget.tid @@ -19,8 +19,7 @@ The ''action-setfield'' widget is invisible. Any content within it is ignored. |$index |Optional index of a property in a [[data tiddler|DataTiddlers]] to be assigned the $value attribute| |$value |The value to be assigned to the field or index identified by the $field or $index attribute. If neither is specified then the value is assigned to the text field. If no value is specified, $field or $index will be deleted.| |$timestamp |Specifies whether the timestamp(s) of the target tiddler will be updated (''modified'' and ''modifier'', plus ''created'' and ''creator'' for newly created tiddlers). Can be "yes" (the default) or "no" | -|Attributes of the form TextReference="value" |Each TextReference identifies a field or index to be assigned the corresponding attribute value | -|//{any other attributes not starting with $}// |Each attribute name specifies a field to be assigned the value specified by the attribute value | +|//{any attributes not starting with $}// |Each attribute name specifies a field to be modified with the attribute value providing the value to assign to the field | ! Examples @@ -54,7 +53,7 @@ Here is an example of a button that assigns tags and fields to the tiddler Hello <$macrocall $name='wikitext-example-without-html' src='<$button> -<$action-setfield HelloThere!!tags="MoreTag [[Further More Tags]]" HelloThere!!color="green"/> +<$action-setfield $tiddler="HelloThere" tags="MoreTag [[Further More Tags]]" color="green"/> <$action-sendmessage $message="tm-edit-tiddler" $param="HelloThere"/> Edit ~HelloThere </$button>'/> From b873df0ba26a16106c8ed88fd5797052cb99fd2b Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 6 Jan 2016 09:38:39 +0000 Subject: [PATCH 189/242] Revert "Merge pull request #2166 from matabele/patch-5" This reverts commit 83c54f4bb5131645aa5cc4456d7adf9b2d6e26e7, reversing changes made to 0cbe97615ad41b7263e56b49efaf275e919e4ec9. --- core/modules/widgets/action-setfield.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/modules/widgets/action-setfield.js b/core/modules/widgets/action-setfield.js index d9c2b2edf..98079f00c 100644 --- a/core/modules/widgets/action-setfield.js +++ b/core/modules/widgets/action-setfield.js @@ -59,16 +59,14 @@ Invoke the action associated with this widget */ SetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) { var self = this, - options = {}; + options = {}; options.suppressTimestamp = !this.actionTimestamp; - if (this.actionField) { - this.wiki.setText(this.actionTiddler, this.actionField, this.actionIndex, this.actionValue, options); + if((typeof this.actionField == "string") || (typeof this.actionIndex == "string") || (typeof this.actionValue == "string")) { + this.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options); } - $tw.utils.each(this.attributes, function (attribute, name) { - if (name.charAt(0) !== "$") { - (name.search("!!") !== -1 || name.search("##") !== -1) ? - self.wiki.setTextReference(name, attribute, self.actionTiddler): - self.wiki.setText(self.actionTiddler, name, undefined, attribute, options); + $tw.utils.each(this.attributes,function(attribute,name) { + if(name.charAt(0) !== "$") { + self.wiki.setText(self.actionTiddler,name,undefined,attribute,options); } }); return true; // Action was invoked From 5a543276f5eced008bbc30fc201059cba599b15e Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 6 Jan 2016 09:59:03 +0000 Subject: [PATCH 190/242] Update release note --- editions/prerelease/tiddlers/Release 5.1.10.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/prerelease/tiddlers/Release 5.1.10.tid b/editions/prerelease/tiddlers/Release 5.1.10.tid index c295df048..8bbbd2ef7 100644 --- a/editions/prerelease/tiddlers/Release 5.1.10.tid +++ b/editions/prerelease/tiddlers/Release 5.1.10.tid @@ -102,6 +102,7 @@ Revert * [[Added|https://github.com/Jermolene/TiddlyWiki5/pull/1909]] new [[days Operator]] * [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/231d0a3dc8385fcb2173436754f00f464d7b018e]] official plugin wrappers for the JavaScript libraries [[async.js|https://github.com/caolan/async]] and [[JSZip|https://stuk.github.io/jszip/]] * [[Added|https://github.com/Jermolene/TiddlyWiki5/pull/2037]] new ActionListopsWidget +* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/791f97983e8bbbbb209cf0e7068f858dfd2d38eb]] ''rows'' attribute to EditTextWidget !! Bug Fixes From 7ee985407b66bc1c107c786ff36899251b4accf2 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 6 Jan 2016 10:09:33 +0000 Subject: [PATCH 191/242] Release note update --- editions/prerelease/tiddlers/Release 5.1.10.tid | 2 +- .../prerelease/tiddlers/system/TiddlyWiki Pre-release.tid | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/editions/prerelease/tiddlers/Release 5.1.10.tid b/editions/prerelease/tiddlers/Release 5.1.10.tid index 8bbbd2ef7..508f3f8ab 100644 --- a/editions/prerelease/tiddlers/Release 5.1.10.tid +++ b/editions/prerelease/tiddlers/Release 5.1.10.tid @@ -64,7 +64,7 @@ Revert * Added Swedish translation by @Superdos * Added Korean (Korean Republic) translation by @araname -* Improved Chinese, Danish, Dutch, French, Italian and Russian translations +* Improved Catalan, Chinese, Danish, Dutch, French, German, Italian, Russian and Spanish translations !! Usability Improvements diff --git a/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid b/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid index 5138cf817..6ef34d420 100644 --- a/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid +++ b/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid @@ -5,9 +5,7 @@ modified: 20150428204930183 <$edit-text tiddler="""$tiddler$""" index="""$colour$""" type="color" tag="input"/> \end -This is a pre-release build of TiddlyWiki. - -It is provided for testing purposes. Please don't try to use it for anything important -- you should use the latest official release from http://tiddlywiki.com. +This is a pre-release build of TiddlyWiki. It is provided for testing purposes. ''Please don't try to use it for anything important'' -- you should use the latest official release from http://tiddlywiki.com. <$list filter="[tag[ReleaseNotes]!has[released]!sort[created]]"> <h1><$text text=<<currentTiddler>>/></h1> From 877aed3ead878332e4586e88de56429cd3339a2c Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 6 Jan 2016 16:03:43 +0000 Subject: [PATCH 192/242] Move 5.1.10 release note --- .../tiddlers/releasenotes}/Release 5.1.10.tid | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) rename editions/{prerelease/tiddlers => tw5.com/tiddlers/releasenotes}/Release 5.1.10.tid (94%) diff --git a/editions/prerelease/tiddlers/Release 5.1.10.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid similarity index 94% rename from editions/prerelease/tiddlers/Release 5.1.10.tid rename to editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid index 508f3f8ab..461e719bc 100644 --- a/editions/prerelease/tiddlers/Release 5.1.10.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid @@ -22,17 +22,13 @@ This release includes several low-level performance optimisations that should im There is a new setting in the control panel to enable performance instrumentation, making it much easier to measure and improve performance issues. -!! Résumé Builder Edition +!! New Editions -The new [[Résumé Builder Edition]] by @inmysocks is a custom edition to guide you through the process of using TiddlyWiki to create a good looking résumé (or curriculum vitæ). +Three new editions of TiddlyWiki are included in this release. These can be used as starting points for creating your own wiki for several purposes: -!! Blog Edition - -The new [[Blog Edition]] provides tools for using TiddlyWiki under Node.js to create a static HTML blog that can be published on GitHub pages (or similar). - -!! Text-Slicer Edition - -The new [[Text-Slicer Edition]] is a custom edition with tools to help advanced users slice longer texts up into individual tiddlers. +* The [[Résumé Builder Edition]] by @inmysocks is a custom edition to guide you through the process of using TiddlyWiki to create a good looking résumé (or curriculum vitæ) +* The [[Blog Edition]] provides tools for using TiddlyWiki under Node.js to create a static HTML blog that can be published on GitHub pages (or similar) +* The [[Text-Slicer Edition]] is a custom edition with tools to help advanced users slice longer texts up into individual tiddlers. !! External Text Tiddlers From 822bd1f3cc9011b647c8a0566f1c973eceba9131 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 6 Jan 2016 16:03:50 +0000 Subject: [PATCH 193/242] Docs update --- editions/tw5.com/tiddlers/languages/Languages.tid | 14 +++++++++----- .../workingwithtw/Sharing tiddlers with others.tid | 5 +++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/editions/tw5.com/tiddlers/languages/Languages.tid b/editions/tw5.com/tiddlers/languages/Languages.tid index ae4802e1d..0d65836f1 100644 --- a/editions/tw5.com/tiddlers/languages/Languages.tid +++ b/editions/tw5.com/tiddlers/languages/Languages.tid @@ -1,13 +1,17 @@ created: 20141202125500000 -modified: 20141202125500000 +modified: 20160106153341817 tags: TableOfContents title: Languages type: text/vnd.tiddlywiki -Language plugins provide translations of the core TiddlyWiki interface. +!! Language Plugins -The following languages are currently available: +The core TiddlyWiki user interface is available in over 20 languages. You can install language plugins using the plugin manager under the [[control panel|$:/ControlPanel]] ''plugins'' tab. + +You can contribute a new language to the library by learning how to [[translate TiddlyWiki into your language|Translate TiddlyWiki into your language]]. + +!! Language Editions + +For some languages, there are pre-built editions with additional translated documentation: <<list-links "[tag[Languages]]">> - -You can contribute by learning how to [[translate TiddlyWiki into your language|Translate TiddlyWiki into your language]]. diff --git a/editions/tw5.com/tiddlers/workingwithtw/Sharing tiddlers with others.tid b/editions/tw5.com/tiddlers/workingwithtw/Sharing tiddlers with others.tid index a9fadb223..67d76c2d3 100644 --- a/editions/tw5.com/tiddlers/workingwithtw/Sharing tiddlers with others.tid +++ b/editions/tw5.com/tiddlers/workingwithtw/Sharing tiddlers with others.tid @@ -1,10 +1,10 @@ created: 20140908163900000 -modified: 20140919160707386 +modified: 20160106154652516 tags: Learning title: Sharing your tiddlers with others type: text/vnd.tiddlywiki -There are a number of ways that people can share tiddlers back and forth: +There are a number of ways that people can share tiddlers: *You can attach a ~TiddlyWiki to an e-mail *You can publish your ~TiddlyWiki online, and grab a link to send or message to others: @@ -13,3 +13,4 @@ There are a number of ways that people can share tiddlers back and forth: **A permaview link of all the currently open tiddlers (see [[PermaView]]) *You can grab tiddlers from ~TiddlyWikis that others have published online by clicking on a link to the tiddler within their file, and then dragging and dropping the link into your own file. An import tiddler will appear, and you can click to import the tiddler or tiddlers to your file. * You can [[share a Dropbox link to your TiddlyWiki|Sharing a TiddlyWiki on Dropbox]] +* You can [[export tiddlers|How to export tiddlers]] in a variety of formats including text, static HTML, comma separated values (ie spreadsheet compatible) From 0747635fbaf4f86e3f8d9dcd2306daad1c735b6f Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 12:40:10 +0000 Subject: [PATCH 194/242] Fixed current tiddler overwrite in tabs macro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed a side-effect of 03519c14b06f86880259b21d3ba07f646606e828 from @matabele whereby the current tiddler is overwritten by the `<$tiddler>` widget, which means that it is not accessible when rendering the caption of the tab. This causes a problem with eg the “Add Plugins” modal where it breaks the count on the tabs. --- core/wiki/macros/tabs.tid | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/wiki/macros/tabs.tid b/core/wiki/macros/tabs.tid index 4b49ac4b9..71cb2e90a 100644 --- a/core/wiki/macros/tabs.tid +++ b/core/wiki/macros/tabs.tid @@ -4,14 +4,16 @@ tags: $:/tags/Macro \define tabs(tabsList,default,state:"$:/state/tab",class,template) <div class="tc-tab-set $class$"> <div class="tc-tab-buttons $class$"> -<$list filter="$tabsList$ +[nsort[order]]" variable="currentTab"><$tiddler tiddler=<<currentTab>> ><$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}> +<$list filter="$tabsList$ +[nsort[order]]" variable="currentTab"><$set name="save-currentTiddler" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}> +<$tiddler tiddler=<<save-currentTiddler>>> <$set name="tv-wikilinks" value="no"> <$transclude tiddler=<<currentTab>> field="caption"> <$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/> </$transclude> -</$set> -</$button></$tiddler></$list> -</div><div class="tc-tab-divider $class$"/><div class="tc-tab-content $class$"> +</$set></$tiddler></$button></$tiddler></$set></$list> +</div> +<div class="tc-tab-divider $class$"/> +<div class="tc-tab-content $class$"> <$list filter="$tabsList$" variable="currentTab"> <$reveal type="match" state=<<qualify "$state$">> text=<<currentTab>> default="$default$"> From 64efee40e567ba15c8f2ecc080a7d64f7f49b079 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 16:48:51 +0000 Subject: [PATCH 195/242] Retracting #2147 The problem is that this change scrambles the ordering of tabs that use programmatic ordering, for example here: https://github.com/Jermolene/TiddlyWiki5/blob/master/editions/tw5.com/ti ddlers/releasenotes/TiddlyWiki_Releases.tid#L13 --- core/wiki/macros/tabs.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/wiki/macros/tabs.tid b/core/wiki/macros/tabs.tid index 71cb2e90a..c9d44d2e3 100644 --- a/core/wiki/macros/tabs.tid +++ b/core/wiki/macros/tabs.tid @@ -4,7 +4,7 @@ tags: $:/tags/Macro \define tabs(tabsList,default,state:"$:/state/tab",class,template) <div class="tc-tab-set $class$"> <div class="tc-tab-buttons $class$"> -<$list filter="$tabsList$ +[nsort[order]]" variable="currentTab"><$set name="save-currentTiddler" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}> +<$list filter="$tabsList$" variable="currentTab"><$set name="save-currentTiddler" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}> <$tiddler tiddler=<<save-currentTiddler>>> <$set name="tv-wikilinks" value="no"> <$transclude tiddler=<<currentTab>> field="caption"> From a1079270a2fe9a4195022b1ac9fb9f56f842860c Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 16:49:14 +0000 Subject: [PATCH 196/242] Don't mark the centralised theme as experimental --- themes/tiddlywiki/centralised/plugin.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/tiddlywiki/centralised/plugin.info b/themes/tiddlywiki/centralised/plugin.info index 0356ea0c3..ccc52dce6 100644 --- a/themes/tiddlywiki/centralised/plugin.info +++ b/themes/tiddlywiki/centralised/plugin.info @@ -4,6 +4,6 @@ "author": "JeremyRuston", "core-version": ">=5.0.0", "plugin-type": "theme", - "description": "Centralises the story river, experimental", + "description": "Centralises the story river", "dependents": ["$:/themes/tiddlywiki/snowwhite"] } From 01f8b954ae433068a144a7b4e6f3aeb688236009 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 17:48:50 +0000 Subject: [PATCH 197/242] Add all translations to the "introduction" edition --- .../tiddlers/slides/Translations.tid | 4 ++-- editions/introduction/tiddlywiki.info | 23 +++++++++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/editions/introduction/tiddlers/slides/Translations.tid b/editions/introduction/tiddlers/slides/Translations.tid index e29a2c193..588b400e9 100644 --- a/editions/introduction/tiddlers/slides/Translations.tid +++ b/editions/introduction/tiddlers/slides/Translations.tid @@ -4,9 +4,9 @@ title: Translations $(languagePluginTitle)$/icon \end -The following plugin translations are currently available: +TiddlyWiki is currently available in <$count filter="[[$:/languages/en-GB]] [plugin-type[language]sort[title]] -[[$:/languages/de-AT]]"/> languages: -<div class="tc-drop-down-language-chooser" style="font-size: 16px; line-height: 20px;"> +<div class="tc-drop-down-language-chooser" style="font-size: 10px; line-height: 12px; -moz-columns:2; -webkit-columns:2; columns:2;"> <$list filter="[[$:/languages/en-GB]] [plugin-type[language]sort[title]] -[[$:/languages/de-AT]]"> <div class="tc-language-list"> <span class="tc-language-list-greeting"> diff --git a/editions/introduction/tiddlywiki.info b/editions/introduction/tiddlywiki.info index 2e2b3d0e3..1fe3c6cd7 100644 --- a/editions/introduction/tiddlywiki.info +++ b/editions/introduction/tiddlywiki.info @@ -17,20 +17,29 @@ "tiddlywiki/readonly" ], "languages": [ + "ca-ES", + "cs-CZ", "da-DK", - "el-GR", - "en-US", - "en-GB", "de-AT", "de-DE", + "el-GR", + "en-GB", + "en-US", "es-ES", "fr-FR", - "zh-Hans", - "zh-Hant", + "hi-IN", + "ia-IA", "it-IT", "ja-JP", - "cs-CZ", - "ru-RU" + "ko-KR", + "nl-NL", + "pa-IN", + "pt-PT", + "ru-RU", + "sk-SK", + "sv-SE", + "zh-Hans", + "zh-Hant" ], "build": { "index": [ From 74e8afdcdd0d3764b1fd0fe90b155bf04eecf513 Mon Sep 17 00:00:00 2001 From: buggyj <buggyjef@gmail.com> Date: Thu, 7 Jan 2016 22:11:26 +0000 Subject: [PATCH 198/242] fix for #2189 --- plugins/tiddlywiki/tw2parser/wikitextparser.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/tiddlywiki/tw2parser/wikitextparser.js b/plugins/tiddlywiki/tw2parser/wikitextparser.js index 96393eb95..6a56992f5 100644 --- a/plugins/tiddlywiki/tw2parser/wikitextparser.js +++ b/plugins/tiddlywiki/tw2parser/wikitextparser.js @@ -56,18 +56,25 @@ var WikiTextParser = function(type,text,options) { this.source = text; this.nextMatch = 0; this.children = []; - //this.children.push({type: "text",text:"hello to the queen"}); this.tree =[]; this.output = null; this.subWikify(this.children); - var parser = $tw.wiki.old_parseTiddler("$:/plugins/tiddlywiki/tw2parser/macrodefs",{parseAsInline:false}); + // prepend tw2 macros locally to the content + var parser = $tw.wiki.parseTiddler("$:/plugins/tiddlywiki/tw2parser/macrodefs",{parseAsInline:false}); this.tree = [{ type: "element", tag: "div", - children:this.children + children:this.children }]; - Array.prototype.push.apply(parser.tree,this.tree); - this.tree = parser.tree; + // clone the output of parser + var root = JSON.parse(JSON.stringify(parser.tree)); + // macros are defined in a linear tree; walk down the tree and append the source's parsed content + var baseroot = root; + while (root[0] && root[0].children && root[0].children.length !== 0 ){ + root = root[0].children; + } + root[0].children[0] = this.tree[0]; + this.tree = baseroot; }; From e1912b624b6b147e408ead5f6ef9bfa01ac87bb9 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 21:09:37 +0000 Subject: [PATCH 199/242] Dev docs typo --- .../tiddlers/build/Releasing a new version of TiddlyWiki.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/dev/tiddlers/build/Releasing a new version of TiddlyWiki.tid b/editions/dev/tiddlers/build/Releasing a new version of TiddlyWiki.tid index 641c8f452..4893a16fa 100644 --- a/editions/dev/tiddlers/build/Releasing a new version of TiddlyWiki.tid +++ b/editions/dev/tiddlers/build/Releasing a new version of TiddlyWiki.tid @@ -2,7 +2,7 @@ title: Releasing a new version of TiddlyWiki # Move the latest release note from the prerelease edition into the tw5.com edition # Adjust the release date and the ''released'' field of the latest release tiddler (eg, [[Release 5.1.3]]) -# Ensure [[Releases]] has the new version as the default tab +# Ensure [[TiddlyWiki Releases]] has the new version as the default tab # Adjust the modified time of HelloThere # Make sure ''Jermolene/TiddlyWiki5'' is fully committed # Edit `package.json` to the new version number From c1763193dfff80351f35b6cf6025bcf55e16f507 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 22:19:57 +0000 Subject: [PATCH 200/242] Docs update: "Editions" --- editions/tw5.com/tiddlers/editions/Editions.tid | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/editions/tw5.com/tiddlers/editions/Editions.tid b/editions/tw5.com/tiddlers/editions/Editions.tid index a2a81621d..5d1ec1b9f 100644 --- a/editions/tw5.com/tiddlers/editions/Editions.tid +++ b/editions/tw5.com/tiddlers/editions/Editions.tid @@ -1,12 +1,16 @@ created: 20140908125500000 list: [[Empty Edition]] -modified: 20150412185442868 +modified: 20160107211902478 tags: TableOfContents title: Editions type: text/vnd.tiddlywiki -TiddlyWiki is distributed in several different editions that are tuned for specific purposes. Each one consists of the same TiddlyWiki core components along with the required plugins, documentation and sample content. +TiddlyWiki is distributed in several distinct editions that are tuned for specific purposes. -You can mix and match the components of these editions, to make a unique solution to your particular application. +An edition consists of the TiddlyWiki core components along with plugins, documentation and sample content to get you up and running as quickly as possible. + +You can mix and match the components of these editions, to make a unique solution for your particular application. <<list-links "[tag[Editions]]">> + +<$macrocall $name=".tip" _="""Note that editions should not be confused with the [[platforms|Platforms]] on which TiddlyWiki runs (eg as a [[single HTML file|Saving]] vs. [[under Node.js|TiddlyWiki on Node.js]]"""/> From 334497ce4ee9278491ff33ff462649683c40f6bb Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 23:00:29 +0000 Subject: [PATCH 201/242] Move "get more plugins" button into a transcludable tiddler --- core/ui/ControlPanel/Plugins.tid | 4 +--- core/ui/ControlPanel/Plugins/AddPlugins.tid | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 core/ui/ControlPanel/Plugins/AddPlugins.tid diff --git a/core/ui/ControlPanel/Plugins.tid b/core/ui/ControlPanel/Plugins.tid index c2ce9beb4..d91dead26 100644 --- a/core/ui/ControlPanel/Plugins.tid +++ b/core/ui/ControlPanel/Plugins.tid @@ -96,9 +96,7 @@ No information provided </$set> \end -<$button message="tm-modal" param="$:/core/ui/ControlPanel/Modals/AddPlugins" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class="tc-btn-big-green" style="background:blue;"> -{{$:/core/images/download-button}} <<lingo Add/Caption>> -</$button> +{{$:/core/ui/ControlPanel/Plugins/AddPlugins}} <<lingo Installed/Hint>> diff --git a/core/ui/ControlPanel/Plugins/AddPlugins.tid b/core/ui/ControlPanel/Plugins/AddPlugins.tid new file mode 100644 index 000000000..51132e270 --- /dev/null +++ b/core/ui/ControlPanel/Plugins/AddPlugins.tid @@ -0,0 +1,7 @@ +title: $:/core/ui/ControlPanel/Plugins/AddPlugins + +\define lingo-base() $:/language/ControlPanel/Plugins/ + +<$button message="tm-modal" param="$:/core/ui/ControlPanel/Modals/AddPlugins" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class="tc-btn-big-green" style="background:blue;"> +{{$:/core/images/download-button}} <<lingo Add/Caption>> +</$button> From 5109e96cec1a2a3ef30ce5357ffd4bb84f0459a3 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 23:00:38 +0000 Subject: [PATCH 202/242] Docs updates --- .../tiddlers/demonstrations/SampleAlert.tid | 6 -- .../tw5.com/tiddlers/editions/Editions.tid | 4 +- .../tw5.com/tiddlers/features/Features.tid | 16 +----- editions/tw5.com/tiddlers/features/Modals.tid | 11 ++++ .../tiddlers/features/Notifications.tid | 9 +++ .../{ => languages}/LanguageGallery.tid | 0 .../tiddlers/mechanisms/AlertMechanism.tid | 4 +- .../tiddlers/plugins/CodeMirror Plugin.tid | 7 ++- .../tw5.com/tiddlers/plugins/D3 Plugin.tid | 7 ++- .../tiddlers/plugins/Highlight Plugin.tid | 7 ++- ...lling_a_plugin_from_the_plugin_library.tid | 17 ++++++ .../tw5.com/tiddlers/plugins/KaTeX Plugin.tid | 7 ++- .../plugins/Manually_installing_a_plugin.tid | 13 +++++ .../tiddlers/plugins/Markdown Plugin.tid | 7 ++- .../tiddlers/plugins/Plugin_Editions.tid | 9 +++ editions/tw5.com/tiddlers/plugins/Plugins.tid | 55 +++---------------- .../tiddlers/plugins/Railroad Plugin.tid | 7 ++- .../tiddlers/plugins/TW2Parser Plugin.tid | 7 ++- .../plugins/Uninstalling_a_plugin.tid | 13 +++++ 19 files changed, 121 insertions(+), 85 deletions(-) delete mode 100644 editions/tw5.com/tiddlers/demonstrations/SampleAlert.tid create mode 100644 editions/tw5.com/tiddlers/features/Modals.tid create mode 100644 editions/tw5.com/tiddlers/features/Notifications.tid rename editions/tw5.com/tiddlers/{ => languages}/LanguageGallery.tid (100%) create mode 100644 editions/tw5.com/tiddlers/plugins/Installing_a_plugin_from_the_plugin_library.tid create mode 100644 editions/tw5.com/tiddlers/plugins/Manually_installing_a_plugin.tid create mode 100644 editions/tw5.com/tiddlers/plugins/Plugin_Editions.tid create mode 100644 editions/tw5.com/tiddlers/plugins/Uninstalling_a_plugin.tid diff --git a/editions/tw5.com/tiddlers/demonstrations/SampleAlert.tid b/editions/tw5.com/tiddlers/demonstrations/SampleAlert.tid deleted file mode 100644 index 7ee3de9c2..000000000 --- a/editions/tw5.com/tiddlers/demonstrations/SampleAlert.tid +++ /dev/null @@ -1,6 +0,0 @@ -title: SampleAlert -component: demo - -This is a demonstration alert. - -Note that the trashcan icon deletes the tiddler containing this alert. You can also remove it by opening the tiddler SampleAlert and editing it to remove the tag [[$:/tags/Alert]]. diff --git a/editions/tw5.com/tiddlers/editions/Editions.tid b/editions/tw5.com/tiddlers/editions/Editions.tid index 5d1ec1b9f..39e4f0605 100644 --- a/editions/tw5.com/tiddlers/editions/Editions.tid +++ b/editions/tw5.com/tiddlers/editions/Editions.tid @@ -1,6 +1,6 @@ created: 20140908125500000 list: [[Empty Edition]] -modified: 20160107211902478 +modified: 20160107222125923 tags: TableOfContents title: Editions type: text/vnd.tiddlywiki @@ -13,4 +13,4 @@ You can mix and match the components of these editions, to make a unique solutio <<list-links "[tag[Editions]]">> -<$macrocall $name=".tip" _="""Note that editions should not be confused with the [[platforms|Platforms]] on which TiddlyWiki runs (eg as a [[single HTML file|Saving]] vs. [[under Node.js|TiddlyWiki on Node.js]]"""/> +<$macrocall $name=".tip" _="""Note that editions should not be confused with the [[platforms|Platforms]] on which TiddlyWiki runs (eg as a [[single HTML file|Saving]] vs. [[under Node.js|TiddlyWiki on Node.js]])"""/> diff --git a/editions/tw5.com/tiddlers/features/Features.tid b/editions/tw5.com/tiddlers/features/Features.tid index bf6876dba..1b1781d33 100644 --- a/editions/tw5.com/tiddlers/features/Features.tid +++ b/editions/tw5.com/tiddlers/features/Features.tid @@ -1,23 +1,11 @@ created: 20130822172800000 -modified: 20140920143945484 +modified: 20160107225826644 tags: TableOfContents title: Features type: text/vnd.tiddlywiki -\define alert-demo() -<$fieldmangler tiddler="SampleAlert"><$set name="currentTiddler" value="SampleAlert"><$button message="tm-add-tag" param="$:/tags/Alert">alerts</$button></$set></$fieldmangler> -\end - Further information about specific TiddlyWiki features: <<list-links "[tag[Features]]">> ----- - -* Familiar user interface elements like <<alert-demo>>, <$button message="tm-modal" param="SampleWizard">wizards</$button> and <$button message="tm-notify" param="SampleNotification">notifications</$button> -* Try out the <$button message="tm-full-screen">full screen support</$button> -* Explore the [[D3.js visualisation plugin|http://tiddlywiki.com/plugins/tiddlywiki/d3/index.html]] -* [[CodeMirror support via a plugin|http://tiddlywiki.com/plugins/tiddlywiki/codemirror/index.html]] -* [[Markdown support via a plugin|http://tiddlywiki.com/plugins/tiddlywiki/markdown/index.html]] -* [[Classic TiddlyWiki markup support via a plugin|http://tiddlywiki.com/plugins/tiddlywiki/tw2parser/index.html]] -* Last but not least, TiddlyWiki is a rare example of a practical [[quine|Quine]] +Last but not least, TiddlyWiki is a rare example of a practical [[quine|Quine]] diff --git a/editions/tw5.com/tiddlers/features/Modals.tid b/editions/tw5.com/tiddlers/features/Modals.tid new file mode 100644 index 000000000..ae4b3f26f --- /dev/null +++ b/editions/tw5.com/tiddlers/features/Modals.tid @@ -0,0 +1,11 @@ +created: 20160107225427489 +modified: 20160107225651558 +tags: Features +title: Modals +type: text/vnd.tiddlywiki + +Modals (or "wizards") fade the main TiddlyWiki window to display an isolated tiddler that must be explicitly dismissed by the user. + +Modals are displayed with the [[WidgetMessage: tm-modal]]. + +<$button message="tm-modal" param="SampleWizard">Open demo modal</$button> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/features/Notifications.tid b/editions/tw5.com/tiddlers/features/Notifications.tid new file mode 100644 index 000000000..6c132f314 --- /dev/null +++ b/editions/tw5.com/tiddlers/features/Notifications.tid @@ -0,0 +1,9 @@ +created: 20160107225753340 +modified: 20160107225855353 +tags: Features +title: Notifications +type: text/vnd.tiddlywiki + +Notifications are small informational messages that appear at the top right of the TiddlyWiki window, and automatically disappear after a preset time. + +<$button message="tm-notify" param="SampleNotification">Display sample notification</$button> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/LanguageGallery.tid b/editions/tw5.com/tiddlers/languages/LanguageGallery.tid similarity index 100% rename from editions/tw5.com/tiddlers/LanguageGallery.tid rename to editions/tw5.com/tiddlers/languages/LanguageGallery.tid diff --git a/editions/tw5.com/tiddlers/mechanisms/AlertMechanism.tid b/editions/tw5.com/tiddlers/mechanisms/AlertMechanism.tid index e1219cf53..f5b215d17 100644 --- a/editions/tw5.com/tiddlers/mechanisms/AlertMechanism.tid +++ b/editions/tw5.com/tiddlers/mechanisms/AlertMechanism.tid @@ -1,6 +1,6 @@ created: 20140213224306412 -modified: 20140213224622441 -tags: Mechanisms +modified: 20160107225720338 +tags: Mechanisms Features title: AlertMechanism type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/plugins/CodeMirror Plugin.tid b/editions/tw5.com/tiddlers/plugins/CodeMirror Plugin.tid index 60324a939..82b830e9e 100644 --- a/editions/tw5.com/tiddlers/plugins/CodeMirror Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/CodeMirror Plugin.tid @@ -1,6 +1,9 @@ +created: 20160107223435497 +list: +modified: 20160107223725809 +tags: [[Plugin Editions]] title: CodeMirror Plugin -modified: 20140922074322741 -tags: Plugins +type: text/vnd.tiddlywiki The CodeMirror plugin adds a sophisticated web-based editor to TiddlyWiki. diff --git a/editions/tw5.com/tiddlers/plugins/D3 Plugin.tid b/editions/tw5.com/tiddlers/plugins/D3 Plugin.tid index 45d1fe073..210be4f4e 100644 --- a/editions/tw5.com/tiddlers/plugins/D3 Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/D3 Plugin.tid @@ -1,6 +1,9 @@ +created: 20160107223425581 +list: +modified: 20160107223725807 +tags: [[Plugin Editions]] title: D3 Plugin -modified: 20140922074322741 -tags: Plugins +type: text/vnd.tiddlywiki The D3 plugin integrates the D3 visualisation library with TiddlyWiki. diff --git a/editions/tw5.com/tiddlers/plugins/Highlight Plugin.tid b/editions/tw5.com/tiddlers/plugins/Highlight Plugin.tid index b04b1c39a..d914cfd7c 100644 --- a/editions/tw5.com/tiddlers/plugins/Highlight Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/Highlight Plugin.tid @@ -1,6 +1,9 @@ +created: 20160107223417655 +list: +modified: 20160107223725805 +tags: [[Plugin Editions]] title: Highlight Plugin -modified: 20140922074322741 -tags: Plugins +type: text/vnd.tiddlywiki The Highlight plugin provides the ability to apply syntax colouring to text. diff --git a/editions/tw5.com/tiddlers/plugins/Installing_a_plugin_from_the_plugin_library.tid b/editions/tw5.com/tiddlers/plugins/Installing_a_plugin_from_the_plugin_library.tid new file mode 100644 index 000000000..a071fdd24 --- /dev/null +++ b/editions/tw5.com/tiddlers/plugins/Installing_a_plugin_from_the_plugin_library.tid @@ -0,0 +1,17 @@ +created: 20160107222352710 +modified: 20160107224746041 +tags: Plugins +title: Installing a plugin from the plugin library +type: text/vnd.tiddlywiki + +# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]]) +# Open your TiddlyWiki in a browser +# Open the [[$:/ControlPanel]], click on the ''Plugins'' tab and then the ''Get more plugins'' button +# Click ''open plugin library'' to open the official plugin library +# When the library listing is loaded: +## Use the dropdown to select between ''plugins'', ''themes'' and ''languages'' +## Use the ''search'' box to search the plugin details +# Click the ''install'' button to install a plugin +# Save your TiddlyWiki +# ''Refresh the page so that TiddlyWiki loads the new plugin'' +# The plugin should now be available for use diff --git a/editions/tw5.com/tiddlers/plugins/KaTeX Plugin.tid b/editions/tw5.com/tiddlers/plugins/KaTeX Plugin.tid index fe6a00ebf..c76ae917c 100644 --- a/editions/tw5.com/tiddlers/plugins/KaTeX Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/KaTeX Plugin.tid @@ -1,6 +1,9 @@ +created: 20160107223410181 +list: +modified: 20160107223725803 +tags: [[Plugin Editions]] title: KaTeX Plugin -modified: 20140922074322741 -tags: Plugins +type: text/vnd.tiddlywiki This plugin adds the ability to display mathematical notation written in ~LaTeX. diff --git a/editions/tw5.com/tiddlers/plugins/Manually_installing_a_plugin.tid b/editions/tw5.com/tiddlers/plugins/Manually_installing_a_plugin.tid new file mode 100644 index 000000000..ecfb8b23f --- /dev/null +++ b/editions/tw5.com/tiddlers/plugins/Manually_installing_a_plugin.tid @@ -0,0 +1,13 @@ +created: 20160107222430613 +modified: 20160107222721398 +tags: Plugins +title: Manually installing a plugin +type: text/vnd.tiddlywiki + +# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]]) +# Open your TiddlyWiki in a browser +# In another browser window, find a link to the plugin, e.g. [[$:/plugins/tiddlywiki/example]]. You will typically find these links on the home page of the plugin (for example, http://tiddlywiki.com/plugins/tiddlywiki/katex/) +# Drag the link [[$:/plugins/tiddlywiki/example]] to the browser window containing your TiddlyWiki +# Save your TiddlyWiki +# ''Refresh the page so that TiddlyWiki loads the new plugin'' +# The plugin should now be available for use \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/plugins/Markdown Plugin.tid b/editions/tw5.com/tiddlers/plugins/Markdown Plugin.tid index 8872b0c75..f16ffbf98 100644 --- a/editions/tw5.com/tiddlers/plugins/Markdown Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/Markdown Plugin.tid @@ -1,6 +1,9 @@ +created: 20160107223401584 +list: +modified: 20160107223725801 +tags: [[Plugin Editions]] title: Markdown Plugin -modified: 20140922074322741 -tags: Plugins +type: text/vnd.tiddlywiki The Markdown plugin enables you to use tiddlers that are written in standard Markdown markup. diff --git a/editions/tw5.com/tiddlers/plugins/Plugin_Editions.tid b/editions/tw5.com/tiddlers/plugins/Plugin_Editions.tid new file mode 100644 index 000000000..7bc9d5748 --- /dev/null +++ b/editions/tw5.com/tiddlers/plugins/Plugin_Editions.tid @@ -0,0 +1,9 @@ +created: 20160107223443647 +modified: 20160107223732928 +tags: Editions +title: Plugin Editions +type: text/vnd.tiddlywiki + +These editions contain simple demos of the original set of TiddlyWiki plugins. They were prepared for earlier versions of TiddlyWiki that lacked the plugin library. + +<<list-links "[tag[Plugin Editions]]">> diff --git a/editions/tw5.com/tiddlers/plugins/Plugins.tid b/editions/tw5.com/tiddlers/plugins/Plugins.tid index 51cbc00ea..42ef97994 100644 --- a/editions/tw5.com/tiddlers/plugins/Plugins.tid +++ b/editions/tw5.com/tiddlers/plugins/Plugins.tid @@ -1,55 +1,16 @@ created: 20140910215514237 -modified: 20150313101514237 +modified: 20160107224627982 tags: Concepts TableOfContents title: Plugins type: text/vnd.tiddlywiki -! Available Plugins +Plugins in TiddlyWiki5 are used to distribute optional components that customise and extend TiddlyWiki. You can install them from the [[official plugin library|Installing a plugin from the plugin library]] or from [[community sites|Resources]]. + +{{$:/core/ui/ControlPanel/Plugins/AddPlugins}} + +Internally, plugins are a bundle of tiddlers packaged together as a single tiddler that can be installed, copied or deleted as a unit. The individual tiddlers within a plugin appear as ShadowTiddlers. See the PluginMechanism discussion for more details about how plugins are implemented internally. + +Plugins can contain JavaScript modules, style sheets, and templates. Plugins can also be used to distribute ordinary text, images or any other content. -The following plugins are distributed on tiddlywiki.com as part of the main TiddlyWiki distribution. <<list-links "[tag[Plugins]]">> - -! What is a plugin? - -A plugin in TiddlyWiki5 is a bundle of tiddlers packaged together as a single tiddler. Plugins are used to distribute optional, custom components for TiddlyWiki and also to package the core components of TiddlyWiki itself. - -The tiddlers within a plugin appear as ShadowTiddlers. - -Plugins can contain JavaScript modules, style sheets, and templates to extend the functionality of TiddlyWiki itself. Plugins can also be used to distribute ordinary text, images or other content. Plugins can be updated from their source as a unit. - -See the PluginMechanism discussion for more details about how plugins are implemented internally. - -! Installing a plugin from the plugin library - -# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]]) -# Open your TiddlyWiki in a browser -# Open the [[$:/ControlPanel]] and click on the ''Plugins'' tab and then the ''Add'' tab -# Click ''open plugin library'' to open the official plugin library -# When the library listing is loaded: -## Use the dropdown to select between ''plugins'', ''themes'' and ''languages'' -## Use the ''search'' box to search the plugin details -# Click the ''install'' button to install a plugin -# Save your TiddlyWiki -# ''Refresh the page so that TiddlyWiki loads the new plugin'' -# The plugin should now be available for use - -! Manually installing a plugin - -# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]]) -# Open your TiddlyWiki in a browser -# In another browser window, find a link to the plugin, e.g. [[$:/plugins/tiddlywiki/example]]. You will typically find these links on the home page of the plugin (for example, http://tiddlywiki.com/plugins/tiddlywiki/katex/) -# Drag the link [[$:/plugins/tiddlywiki/example]] to the browser window containing your TiddlyWiki -# Save your TiddlyWiki -# ''Refresh the page so that TiddlyWiki loads the new plugin'' -# The plugin should now be available for use - -! How to uninstall / delete a plugin - -# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]]) -# Open the [[$:/ControlPanel]] and go to the ''Plugins'' tab -# Click on the plugin you want to delete to open its tiddler -# Click the edit icon and then delete the tiddler -# Save your TiddlyWiki -# ''Refresh the window so that TiddlyWiki completely removes the plugin'' -# The plugin should now be deleted diff --git a/editions/tw5.com/tiddlers/plugins/Railroad Plugin.tid b/editions/tw5.com/tiddlers/plugins/Railroad Plugin.tid index 3d3d948b2..288c9d50b 100644 --- a/editions/tw5.com/tiddlers/plugins/Railroad Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/Railroad Plugin.tid @@ -1,6 +1,9 @@ +created: 20160107223348621 +list: +modified: 20160107223725798 +tags: [[Plugin Editions]] title: Railroad Plugin -modified: 20150105134500000 -tags: Plugins +type: text/vnd.tiddlywiki {{$:/plugins/tiddlywiki/railroad/readme}} diff --git a/editions/tw5.com/tiddlers/plugins/TW2Parser Plugin.tid b/editions/tw5.com/tiddlers/plugins/TW2Parser Plugin.tid index 72afa10ee..a2c473877 100644 --- a/editions/tw5.com/tiddlers/plugins/TW2Parser Plugin.tid +++ b/editions/tw5.com/tiddlers/plugins/TW2Parser Plugin.tid @@ -1,6 +1,9 @@ +created: 20160107223340750 +list: +modified: 20160107223725794 +tags: [[Plugin Editions]] title: TW2Parser Plugin -modified: 20140922074322741 -tags: Plugins +type: text/vnd.tiddlywiki This experimental plugin adds the ability to display WikiText written for the original Classic version of TiddlyWiki. diff --git a/editions/tw5.com/tiddlers/plugins/Uninstalling_a_plugin.tid b/editions/tw5.com/tiddlers/plugins/Uninstalling_a_plugin.tid new file mode 100644 index 000000000..683e5f5dd --- /dev/null +++ b/editions/tw5.com/tiddlers/plugins/Uninstalling_a_plugin.tid @@ -0,0 +1,13 @@ +created: 20160107222504269 +modified: 20160107222727164 +tags: Plugins +title: Uninstalling a plugin +type: text/vnd.tiddlywiki + +# Create a backup of your current TiddlyWiki HTML file ([[just in case|The First Rule of Using TiddlyWiki]]) +# Open the [[$:/ControlPanel]] and go to the ''Plugins'' tab +# Click on the plugin you want to delete to open its tiddler +# Click the edit icon and then delete the tiddler +# Save your TiddlyWiki +# ''Refresh the window so that TiddlyWiki completely removes the plugin'' +# The plugin should now be deleted \ No newline at end of file From 6b68d9b0c4c9897b689af1e2aef0c09b101d420b Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 23:01:52 +0000 Subject: [PATCH 203/242] Restore sample alert --- editions/tw5.com/tiddlers/SampleAlert.tid | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 editions/tw5.com/tiddlers/SampleAlert.tid diff --git a/editions/tw5.com/tiddlers/SampleAlert.tid b/editions/tw5.com/tiddlers/SampleAlert.tid new file mode 100644 index 000000000..4a316fb25 --- /dev/null +++ b/editions/tw5.com/tiddlers/SampleAlert.tid @@ -0,0 +1,9 @@ +component: demo +created: 20160107230134172 +modified: 20160107230134172 +title: SampleAlert +type: text/vnd.tiddlywiki + +This is a demonstration alert. + +Note that the trashcan icon deletes the tiddler containing this alert. You can also remove it by opening the tiddler SampleAlert and editing it to remove the tag [[$:/tags/Alert]]. From e47f06bd5e3b1ff028a7d780d4ab2202b4cb8cbd Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 23:11:59 +0000 Subject: [PATCH 204/242] Docs update --- editions/tw5.com/tiddlers/definitions/TiddlyDesktop.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editions/tw5.com/tiddlers/definitions/TiddlyDesktop.tid b/editions/tw5.com/tiddlers/definitions/TiddlyDesktop.tid index 725cfd783..b324f01fb 100644 --- a/editions/tw5.com/tiddlers/definitions/TiddlyDesktop.tid +++ b/editions/tw5.com/tiddlers/definitions/TiddlyDesktop.tid @@ -1,6 +1,6 @@ created: 20140126125259638 -modified: 20150427121710347 -tags: Definitions Features Saving Platforms +modified: 20160107230954643 +tags: Definitions Saving Platforms title: TiddlyDesktop type: text/vnd.tiddlywiki From 3d19b585ae818e8a6f3b7b39f2c91aa6df203373 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 23:16:58 +0000 Subject: [PATCH 205/242] Preparing for release of 5.1.10 --- editions/tw5.com/tiddlers/hellothere/HelloThere.tid | 2 +- editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid index 82e4601d7..108b460bc 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid @@ -1,6 +1,6 @@ created: 20130822170200000 list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]] -modified: 20150703153725652 +modified: 20160107231609312 tags: TableOfContents title: HelloThere type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid index 461e719bc..1b58f7dc6 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid @@ -1,9 +1,10 @@ caption: 5.1.10 -created: 20151224152917252 -modified: 20151224152917252 +created: 20160107231609312 +modified: 20160107231609312 tags: ReleaseNotes title: Release 5.1.10 type: text/vnd.tiddlywiki +released: 20160107231609312 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.9...v5.1.10]]// From 2d9d09adcc969a47ddc814bf892029a8ec52384d Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 23:26:02 +0000 Subject: [PATCH 206/242] Readme update --- licenses/copyright.md | 2 +- readme.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/licenses/copyright.md b/licenses/copyright.md index ad16c78e5..c2d1601fd 100644 --- a/licenses/copyright.md +++ b/licenses/copyright.md @@ -1,7 +1,7 @@ TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com) Copyright © Jeremy Ruston 2004-2007 -Copyright © UnaMesa Association 2007-2014 +Copyright © UnaMesa Association 2007-2016 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/readme.md b/readme.md index 65970ae0c..60fbf3601 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -<p>Welcome to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a>, a non-linear personal web notebook that anyone can use and keep forever, independently of any corporation.</p><p><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> is a complete interactive wiki in <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/JavaScript.html">JavaScript</a>. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/WikiText.html">WikiText</a>.</p><p>Learn more and see it in action at <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/" target="_blank">http://tiddlywiki.com/</a></p><p>Developer documentation is in progress at <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/dev/" target="_blank">http://tiddlywiki.com/dev/</a></p><h1 class="">Installing <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on Node.js</h1><ol><li>Install <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/Node.js.html">Node.js</a> from <a class="tc-tiddlylink-external" href="http://nodejs.org" target="_blank">http://nodejs.org</a></li><li>Open a command line terminal and type:<blockquote><p><code>npm install -g tiddlywiki</code></p><p>If it fails with an error you may need to re-run the command as an administrator:</p><p><code>sudo npm install -g tiddlywiki</code> (Mac/Linux)</p></blockquote></li><li>Check <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> is installed by typing:<blockquote><p><code>tiddlywiki --version</code></p></blockquote></li><li>In response, you should see <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> report its current version (eg "5.1.8"; you may also see other debugging information reported)</li><li>Try it out:<ol><li><code>tiddlywiki mynewwiki --init server</code> to create a folder for a new wiki that includes server-related components</li><li><code>tiddlywiki mynewwiki --server</code> to start <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a></li><li>Visit <a class="tc-tiddlylink-external" href="http://127.0.0.1:8080/" target="_blank">http://127.0.0.1:8080/</a> in your browser</li><li>Try editing and creating tiddlers</li></ol></li></ol><p>The <code>-g</code> flag causes <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> to be installed globally. Without it, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> will only be available in the directory where you installed it.</p><p>If you are using Debian or Debian-based Linux and you are reciving a <code>node: command not found</code> error though node.js package is installed, you may need to create a symbolic link between <code>nodejs</code> and <code>node</code>. Consult your distro's manual and <code>whereis</code> to correctly create a link. See github <a class="tc-tiddlylink-external" href="http://github.com/Jermolene/TiddlyWiki5/issues/1434" target="_blank">issue 1434</a></p><p>Example Debian v8.0: <code>sudo ln -s /usr/bin/nodejs /usr/bin/node</code></p><h1 class="">Using <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on Node.js</h1><p><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> can be used on the command line to perform an extensive set of operations based on <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWikiFolders.html">TiddlyWikiFolders</a>, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlerFiles.html">TiddlerFiles</a> and <a class="tc-tiddlylink tc-tiddlylink-missing" href="http://tiddlywiki.com/static/TiddlyWikiFiles.html">TiddlyWikiFiles</a>.</p><p>For example, the following command loads the tiddlers from a <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> HTML file and then saves one of them in static HTML:</p><pre><code>tiddlywiki --verbose --load mywiki.html --rendertiddler ReadMe ./readme.html</code></pre><p>Running <code>tiddlywiki</code> from the command line boots the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> kernel, loads the core plugins and establishes an empty wiki store. It then sequentially processes the command line arguments from left to right. The arguments are separated with spaces.</p><p>The first argument is the optional path to the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWikiFolders.html">TiddlyWikiFolder</a> to be loaded. If not present, then the current directory is used.</p><p>The commands and their individual arguments follow, each command being identified by the prefix <code>--</code>.</p><pre><code>tiddlywiki [<wikipath>] [--<command> [<arg>[,<arg>]]]</code></pre><p>The available commands are:</p><p><ul class=""> +<p>Welcome to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a>, a non-linear personal web notebook that anyone can use and keep forever, independently of any corporation.</p><p><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> is a complete interactive wiki in <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/JavaScript.html">JavaScript</a>. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/WikiText.html">WikiText</a>.</p><p>Learn more and see it in action at <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/" target="_blank">http://tiddlywiki.com/</a></p><p>Developer documentation is in progress at <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/dev/" target="_blank">http://tiddlywiki.com/dev/</a></p><h1 class="">Installing <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on Node.js</h1><ol><li>Install <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/Node.js.html">Node.js</a> from <a class="tc-tiddlylink-external" href="http://nodejs.org" target="_blank">http://nodejs.org</a></li><li>Open a command line terminal and type:<blockquote><p><code>npm install -g tiddlywiki</code></p><p>If it fails with an error you may need to re-run the command as an administrator:</p><p><code>sudo npm install -g tiddlywiki</code> (Mac/Linux)</p></blockquote></li><li>Check <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> is installed by typing:<blockquote><p><code>tiddlywiki --version</code></p></blockquote></li><li>In response, you should see <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> report its current version (eg "5.1.9"; you may also see other debugging information reported)</li><li>Try it out:<ol><li><code>tiddlywiki mynewwiki --init server</code> to create a folder for a new wiki that includes server-related components</li><li><code>tiddlywiki mynewwiki --server</code> to start <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a></li><li>Visit <a class="tc-tiddlylink-external" href="http://127.0.0.1:8080/" target="_blank">http://127.0.0.1:8080/</a> in your browser</li><li>Try editing and creating tiddlers</li></ol></li></ol><p>The <code>-g</code> flag causes <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> to be installed globally. Without it, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> will only be available in the directory where you installed it.</p><p>If you are using Debian or Debian-based Linux and you are reciving a <code>node: command not found</code> error though node.js package is installed, you may need to create a symbolic link between <code>nodejs</code> and <code>node</code>. Consult your distro's manual and <code>whereis</code> to correctly create a link. See github <a class="tc-tiddlylink-external" href="http://github.com/Jermolene/TiddlyWiki5/issues/1434" target="_blank">issue 1434</a></p><p>Example Debian v8.0: <code>sudo ln -s /usr/bin/nodejs /usr/bin/node</code></p><h1 class="">Using <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on Node.js</h1><p><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> can be used on the command line to perform an extensive set of operations based on <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWikiFolders.html">TiddlyWikiFolders</a>, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlerFiles.html">TiddlerFiles</a> and <a class="tc-tiddlylink tc-tiddlylink-missing" href="http://tiddlywiki.com/static/TiddlyWikiFiles.html">TiddlyWikiFiles</a>.</p><p>For example, the following command loads the tiddlers from a <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> HTML file and then saves one of them in static HTML:</p><pre><code>tiddlywiki --verbose --load mywiki.html --rendertiddler ReadMe ./readme.html</code></pre><p>Running <code>tiddlywiki</code> from the command line boots the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> kernel, loads the core plugins and establishes an empty wiki store. It then sequentially processes the command line arguments from left to right. The arguments are separated with spaces.</p><p>The first argument is the optional path to the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWikiFolders.html">TiddlyWikiFolder</a> to be loaded. If not present, then the current directory is used.</p><p>The commands and their individual arguments follow, each command being identified by the prefix <code>--</code>.</p><pre><code>tiddlywiki [<wikipath>] [--<command> [<arg>[,<arg>]]]</code></pre><p>The available commands are:</p><p><ul class=""> <li> <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/BuildCommand.html"> From 10df62b24fdf1fbe20199b08c3eb45d980ada0e2 Mon Sep 17 00:00:00 2001 From: Cameron Fischer <fischer.cameron@gmail.com> Date: Fri, 8 Jan 2016 17:26:19 -0500 Subject: [PATCH 207/242] Signed CLA --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index a2d314211..e5bc4a399 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -262,3 +262,5 @@ Santiago Pelufo, @spelufo, 2015/12/18 Matthew Lauber, @mklauber, 2015/11/13 Matthew DeAbreu, @mdeabreu, 2016/01/05 + +Cameron Fischer, @flibbles, 2016/01/08 From 6613cc7b2c29714f86d93aa3266cd0a6c174d6cf Mon Sep 17 00:00:00 2001 From: ARRRRGH <rrrr@posteo.ch> Date: Mon, 11 Jan 2016 15:09:12 +0100 Subject: [PATCH 208/242] Signing CLA --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index e5bc4a399..1e6018d84 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -264,3 +264,5 @@ Matthew Lauber, @mklauber, 2015/11/13 Matthew DeAbreu, @mdeabreu, 2016/01/05 Cameron Fischer, @flibbles, 2016/01/08 + +Jim, @ARRRRGH, 2016/01/11 From ac345c86a148edf8e7544f0619a48d57d47059bc Mon Sep 17 00:00:00 2001 From: "jose-manuel.urio@at.seg-social.es" <jose-manuel.urio@at.seg-social.es> Date: Wed, 27 Jan 2016 15:57:23 +0100 Subject: [PATCH 209/242] Ask permission Jermolene for make a pull request --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index 1e6018d84..b219cb0e1 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -266,3 +266,5 @@ Matthew DeAbreu, @mdeabreu, 2016/01/05 Cameron Fischer, @flibbles, 2016/01/08 Jim, @ARRRRGH, 2016/01/11 + +Koke Laast, @Koke24, 2016/01/27 From def26a40ac1bb6fe04650ee873822b2c9227a70a Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 7 Jan 2016 23:26:41 +0000 Subject: [PATCH 210/242] Version number update for 5.1.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 40d1b0158..442c005ae 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tiddlywiki", "preferGlobal": "true", - "version": "5.1.10-prerelease", + "version": "5.1.10", "author": "Jeremy Ruston <jeremy@jermolene.com>", "description": "a non-linear personal web notebook", "contributors": [ From f1deea3b742aae69f5522fa319be7d9e29895c3f Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 29 Jan 2016 17:15:57 +0000 Subject: [PATCH 211/242] Preparing for 5.1.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 442c005ae..f1a633b64 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tiddlywiki", "preferGlobal": "true", - "version": "5.1.10", + "version": "5.1.11-prerelease", "author": "Jeremy Ruston <jeremy@jermolene.com>", "description": "a non-linear personal web notebook", "contributors": [ From d240ab5003ff0b46568e59c6f24e420c7f2651a2 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 29 Jan 2016 17:16:16 +0000 Subject: [PATCH 212/242] Fix broken plugin library Fixes #2260 --- core/wiki/config/OfficialPluginLibrary.tid | 2 +- .../PrereleaseOfficialPluginLibrary.tid | 2 +- .../tiddlers/releasenotes/Release 5.1.11.tid | 35 +++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid diff --git a/core/wiki/config/OfficialPluginLibrary.tid b/core/wiki/config/OfficialPluginLibrary.tid index e4bfbc02c..0d294343a 100644 --- a/core/wiki/config/OfficialPluginLibrary.tid +++ b/core/wiki/config/OfficialPluginLibrary.tid @@ -1,6 +1,6 @@ title: $:/config/OfficialPluginLibrary tags: $:/tags/PluginLibrary -url: http://tiddlywiki.com/library/v5.1.9/index.html +url: http://tiddlywiki.com/library/v5.1.11/index.html caption: {{$:/language/OfficialPluginLibrary}} {{$:/language/OfficialPluginLibrary/Hint}} diff --git a/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid b/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid index 417681328..9a259024e 100644 --- a/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid +++ b/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid @@ -1,6 +1,6 @@ title: $:/config/OfficialPluginLibrary tags: $:/tags/PluginLibrary -url: http://tiddlywiki.com/prerelease/library/v5.1.10/index.html +url: http://tiddlywiki.com/prerelease/library/v5.1.11/index.html caption: {{$:/language/OfficialPluginLibrary}} (Prerelease) The prerelease version of the official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team. diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid new file mode 100644 index 000000000..0807eeaa2 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid @@ -0,0 +1,35 @@ +caption: 5.1.11 +created: 20160128231609312 +modified: 20160128231609312 +tags: ReleaseNotes +title: Release 5.1.11 +type: text/vnd.tiddlywiki + +//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.10...v5.1.11]]// + +! Major Improvements + + + +! Other Improvements + +!! Translation Improvements + + +!! Usability Improvements + + +!! Hackability Improvements + + +!! Bug Fixes + + +!! Node.js Improvements + +!! Contributors + +[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki: + +* [[@koke24|https://github.com/koke24]] +* [[@BramChen|https://github.com/BramChen]] From 8b2f320f7feae83e4b14bfd62feb7bcadf984eb7 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 29 Jan 2016 17:24:11 +0000 Subject: [PATCH 213/242] Missed off d240ab5003ff0b46568e59c6f24e420c7f2651a2 --- .../prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid b/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid index 1a03b1a77..2618d1c41 100644 --- a/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid +++ b/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid @@ -1,6 +1,6 @@ title: $:/config/LocalPluginLibrary tags: $:/tags/PluginLibrary -url: http://127.0.0.1:8080/prerelease/library/v5.1.10/index.html +url: http://127.0.0.1:8080/prerelease/library/v5.1.11/index.html caption: {{$:/language/OfficialPluginLibrary}} (Prerelease Local) A locally installed version of the official ~TiddlyWiki plugin library at tiddlywiki.com for testing and debugging. //Requires a local web server to share the library// From 5bba45bb0aec1ed6302fe3cb26cfedc40b4098e6 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston <jeremy@jermolene.com> Date: Sat, 30 Jan 2016 08:51:53 +0000 Subject: [PATCH 214/242] =?UTF-8?q?Rename=20TiddlyWiki=5FJingle=5Fby=5FMa?= =?UTF-8?q?=CC=8Ans=5FMa=CC=8Artensson.tid=20to=20TiddlyWiki=5FJingle=5Fby?= =?UTF-8?q?=5FMans=5FMartensson.tid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #2227 (Note I fixed this by editing the filename in the github.com online editor. It's happened before; I've raised #2261 to address the root cause) --- ...̊ns_Mårtensson.tid => TiddlyWiki_Jingle_by_Mans_Martensson.tid} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename editions/tw5.com/tiddlers/community/resources/{TiddlyWiki_Jingle_by_Måns_Mårtensson.tid => TiddlyWiki_Jingle_by_Mans_Martensson.tid} (100%) diff --git a/editions/tw5.com/tiddlers/community/resources/TiddlyWiki_Jingle_by_Måns_Mårtensson.tid b/editions/tw5.com/tiddlers/community/resources/TiddlyWiki_Jingle_by_Mans_Martensson.tid similarity index 100% rename from editions/tw5.com/tiddlers/community/resources/TiddlyWiki_Jingle_by_Måns_Mårtensson.tid rename to editions/tw5.com/tiddlers/community/resources/TiddlyWiki_Jingle_by_Mans_Martensson.tid From 3bf9ad78fac5e3e13236ee01fa8c3d278c125553 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sat, 30 Jan 2016 12:44:58 +0000 Subject: [PATCH 215/242] Update release note for 5.1.11 --- .../tiddlers/releasenotes/Release 5.1.11.tid | 32 +++---------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid index 0807eeaa2..18eff4b38 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid @@ -1,35 +1,11 @@ caption: 5.1.11 -created: 20160128231609312 -modified: 20160128231609312 +created: 20160130124109312 +modified: 20160130124109312 tags: ReleaseNotes title: Release 5.1.11 type: text/vnd.tiddlywiki +released: 20160130124109312 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.10...v5.1.11]]// -! Major Improvements - - - -! Other Improvements - -!! Translation Improvements - - -!! Usability Improvements - - -!! Hackability Improvements - - -!! Bug Fixes - - -!! Node.js Improvements - -!! Contributors - -[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki: - -* [[@koke24|https://github.com/koke24]] -* [[@BramChen|https://github.com/BramChen]] +This is a bug-fix release for [[Release 5.1.10]] that fixes a serious issue affecting the operation of the official plugin library. From c24598885a4152829786fdc286b9b73e29919820 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sat, 30 Jan 2016 14:26:24 +0000 Subject: [PATCH 216/242] Preparing for release of 5.1.11 --- editions/tw5.com/tiddlers/hellothere/HelloThere.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid index 108b460bc..3c3dc9262 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid @@ -1,6 +1,6 @@ created: 20130822170200000 list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]] -modified: 20160107231609312 +modified: 20160130124109312 tags: TableOfContents title: HelloThere type: text/vnd.tiddlywiki From a869316b1fc947a2ca801c2fda0d5bb9ac5ab17d Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sat, 30 Jan 2016 14:27:29 +0000 Subject: [PATCH 217/242] Readme update --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 60fbf3601..682f64a7c 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -<p>Welcome to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a>, a non-linear personal web notebook that anyone can use and keep forever, independently of any corporation.</p><p><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> is a complete interactive wiki in <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/JavaScript.html">JavaScript</a>. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/WikiText.html">WikiText</a>.</p><p>Learn more and see it in action at <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/" target="_blank">http://tiddlywiki.com/</a></p><p>Developer documentation is in progress at <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/dev/" target="_blank">http://tiddlywiki.com/dev/</a></p><h1 class="">Installing <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on Node.js</h1><ol><li>Install <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/Node.js.html">Node.js</a> from <a class="tc-tiddlylink-external" href="http://nodejs.org" target="_blank">http://nodejs.org</a></li><li>Open a command line terminal and type:<blockquote><p><code>npm install -g tiddlywiki</code></p><p>If it fails with an error you may need to re-run the command as an administrator:</p><p><code>sudo npm install -g tiddlywiki</code> (Mac/Linux)</p></blockquote></li><li>Check <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> is installed by typing:<blockquote><p><code>tiddlywiki --version</code></p></blockquote></li><li>In response, you should see <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> report its current version (eg "5.1.9"; you may also see other debugging information reported)</li><li>Try it out:<ol><li><code>tiddlywiki mynewwiki --init server</code> to create a folder for a new wiki that includes server-related components</li><li><code>tiddlywiki mynewwiki --server</code> to start <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a></li><li>Visit <a class="tc-tiddlylink-external" href="http://127.0.0.1:8080/" target="_blank">http://127.0.0.1:8080/</a> in your browser</li><li>Try editing and creating tiddlers</li></ol></li></ol><p>The <code>-g</code> flag causes <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> to be installed globally. Without it, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> will only be available in the directory where you installed it.</p><p>If you are using Debian or Debian-based Linux and you are reciving a <code>node: command not found</code> error though node.js package is installed, you may need to create a symbolic link between <code>nodejs</code> and <code>node</code>. Consult your distro's manual and <code>whereis</code> to correctly create a link. See github <a class="tc-tiddlylink-external" href="http://github.com/Jermolene/TiddlyWiki5/issues/1434" target="_blank">issue 1434</a></p><p>Example Debian v8.0: <code>sudo ln -s /usr/bin/nodejs /usr/bin/node</code></p><h1 class="">Using <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on Node.js</h1><p><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> can be used on the command line to perform an extensive set of operations based on <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWikiFolders.html">TiddlyWikiFolders</a>, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlerFiles.html">TiddlerFiles</a> and <a class="tc-tiddlylink tc-tiddlylink-missing" href="http://tiddlywiki.com/static/TiddlyWikiFiles.html">TiddlyWikiFiles</a>.</p><p>For example, the following command loads the tiddlers from a <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> HTML file and then saves one of them in static HTML:</p><pre><code>tiddlywiki --verbose --load mywiki.html --rendertiddler ReadMe ./readme.html</code></pre><p>Running <code>tiddlywiki</code> from the command line boots the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> kernel, loads the core plugins and establishes an empty wiki store. It then sequentially processes the command line arguments from left to right. The arguments are separated with spaces.</p><p>The first argument is the optional path to the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWikiFolders.html">TiddlyWikiFolder</a> to be loaded. If not present, then the current directory is used.</p><p>The commands and their individual arguments follow, each command being identified by the prefix <code>--</code>.</p><pre><code>tiddlywiki [<wikipath>] [--<command> [<arg>[,<arg>]]]</code></pre><p>The available commands are:</p><p><ul class=""> +<p>Welcome to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a>, a non-linear personal web notebook that anyone can use and keep forever, independently of any corporation.</p><p><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> is a complete interactive wiki in <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/JavaScript.html">JavaScript</a>. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/WikiText.html">WikiText</a>.</p><p>Learn more and see it in action at <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/" target="_blank">http://tiddlywiki.com/</a></p><p>Developer documentation is in progress at <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/dev/" target="_blank">http://tiddlywiki.com/dev/</a></p><h1 class="">Installing <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on Node.js</h1><ol><li>Install <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/Node.js.html">Node.js</a> from <a class="tc-tiddlylink-external" href="http://nodejs.org" target="_blank">http://nodejs.org</a></li><li>Open a command line terminal and type:<blockquote><p><code>npm install -g tiddlywiki</code></p><p>If it fails with an error you may need to re-run the command as an administrator:</p><p><code>sudo npm install -g tiddlywiki</code> (Mac/Linux)</p></blockquote></li><li>Check <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> is installed by typing:<blockquote><p><code>tiddlywiki --version</code></p></blockquote></li><li>In response, you should see <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> report its current version (eg "5.1.10"; you may also see other debugging information reported)</li><li>Try it out:<ol><li><code>tiddlywiki mynewwiki --init server</code> to create a folder for a new wiki that includes server-related components</li><li><code>tiddlywiki mynewwiki --server</code> to start <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a></li><li>Visit <a class="tc-tiddlylink-external" href="http://127.0.0.1:8080/" target="_blank">http://127.0.0.1:8080/</a> in your browser</li><li>Try editing and creating tiddlers</li></ol></li></ol><p>The <code>-g</code> flag causes <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> to be installed globally. Without it, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> will only be available in the directory where you installed it.</p><p>If you are using Debian or Debian-based Linux and you are reciving a <code>node: command not found</code> error though node.js package is installed, you may need to create a symbolic link between <code>nodejs</code> and <code>node</code>. Consult your distro's manual and <code>whereis</code> to correctly create a link. See github <a class="tc-tiddlylink-external" href="http://github.com/Jermolene/TiddlyWiki5/issues/1434" target="_blank">issue 1434</a></p><p>Example Debian v8.0: <code>sudo ln -s /usr/bin/nodejs /usr/bin/node</code></p><h1 class="">Using <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on Node.js</h1><p><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> can be used on the command line to perform an extensive set of operations based on <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWikiFolders.html">TiddlyWikiFolders</a>, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlerFiles.html">TiddlerFiles</a> and <a class="tc-tiddlylink tc-tiddlylink-missing" href="http://tiddlywiki.com/static/TiddlyWikiFiles.html">TiddlyWikiFiles</a>.</p><p>For example, the following command loads the tiddlers from a <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> HTML file and then saves one of them in static HTML:</p><pre><code>tiddlywiki --verbose --load mywiki.html --rendertiddler ReadMe ./readme.html</code></pre><p>Running <code>tiddlywiki</code> from the command line boots the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> kernel, loads the core plugins and establishes an empty wiki store. It then sequentially processes the command line arguments from left to right. The arguments are separated with spaces.</p><p>The first argument is the optional path to the <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWikiFolders.html">TiddlyWikiFolder</a> to be loaded. If not present, then the current directory is used.</p><p>The commands and their individual arguments follow, each command being identified by the prefix <code>--</code>.</p><pre><code>tiddlywiki [<wikipath>] [--<command> [<arg>[,<arg>]]]</code></pre><p>The available commands are:</p><p><ul class=""> <li> <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/BuildCommand.html"> From 5e7065c391c325d42d15300842402f4571e42908 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sat, 30 Jan 2016 14:27:54 +0000 Subject: [PATCH 218/242] Version number update for 5.1.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f1a633b64..cb1f5dcde 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tiddlywiki", "preferGlobal": "true", - "version": "5.1.11-prerelease", + "version": "5.1.11", "author": "Jeremy Ruston <jeremy@jermolene.com>", "description": "a non-linear personal web notebook", "contributors": [ From f61bb316b2156ccb033b8d48e8663ce5aef8b215 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Sun, 31 Jan 2016 21:46:29 +0000 Subject: [PATCH 219/242] Adjust version number for 5.1.12 --- core/wiki/config/OfficialPluginLibrary.tid | 2 +- .../prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/wiki/config/OfficialPluginLibrary.tid b/core/wiki/config/OfficialPluginLibrary.tid index 0d294343a..aa878e946 100644 --- a/core/wiki/config/OfficialPluginLibrary.tid +++ b/core/wiki/config/OfficialPluginLibrary.tid @@ -1,6 +1,6 @@ title: $:/config/OfficialPluginLibrary tags: $:/tags/PluginLibrary -url: http://tiddlywiki.com/library/v5.1.11/index.html +url: http://tiddlywiki.com/library/v5.1.12/index.html caption: {{$:/language/OfficialPluginLibrary}} {{$:/language/OfficialPluginLibrary/Hint}} diff --git a/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid b/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid index 2618d1c41..3f7c07ffd 100644 --- a/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid +++ b/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid @@ -1,6 +1,6 @@ title: $:/config/LocalPluginLibrary tags: $:/tags/PluginLibrary -url: http://127.0.0.1:8080/prerelease/library/v5.1.11/index.html +url: http://127.0.0.1:8080/prerelease/library/v5.1.12/index.html caption: {{$:/language/OfficialPluginLibrary}} (Prerelease Local) A locally installed version of the official ~TiddlyWiki plugin library at tiddlywiki.com for testing and debugging. //Requires a local web server to share the library// diff --git a/package.json b/package.json index cb1f5dcde..7c04dfda2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tiddlywiki", "preferGlobal": "true", - "version": "5.1.11", + "version": "5.1.12-prerelease", "author": "Jeremy Ruston <jeremy@jermolene.com>", "description": "a non-linear personal web notebook", "contributors": [ From 3a10bfe0de94def6f8ba270268c8734af9539b3a Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Mon, 1 Feb 2016 20:16:45 +0000 Subject: [PATCH 220/242] Text-slicer: copy document fields from source tiddler User-defined fields of the source tiddler are copied across to the document tiddler when it is sliced. --- .../tiddlywiki/text-slicer/modules/slicer.js | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/plugins/tiddlywiki/text-slicer/modules/slicer.js b/plugins/tiddlywiki/text-slicer/modules/slicer.js index cc86089b0..31c6d2548 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicer.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicer.js @@ -193,16 +193,26 @@ Slicer.prototype.processNode = function(domNode) { // Slice a tiddler into individual tiddlers Slicer.prototype.sliceTiddler = function(title) { - this.sliceTitle = "Sliced up " + title; + var sourceTiddler = $tw.wiki.getTiddler(this.sourceTitle), + sliceTitle,sliceTiddler = {}; + if(sourceTiddler) { + sliceTiddler = $tw.utils.extend({},sourceTiddler.fields); + } + if(sliceTiddler["doc-santovia-id"]) { + sliceTiddler.title = sliceTiddler["doc-santovia-id"]; + delete sliceTiddler["doc-santovia-id"]; + } else { + sliceTiddler.title = "Sliced up " + title; + } + sliceTiddler.text = "Document sliced at " + (new Date()); + sliceTiddler.type = "text/vnd.tiddlywiki"; + sliceTiddler.tags = []; + sliceTiddler.list = []; + sliceTiddler["toc-type"] = "document"; var domNode = this.getSourceDocument(); - this.parentStack.push({type: "h0", title: this.addTiddler({ - title: this.sliceTitle, - text: "Document sliced at " + (new Date()), - list: [], - "toc-type": "document" - })}); + this.parentStack.push({type: "h0", title: this.addTiddler(sliceTiddler)}); this.currentTiddler = title; - this.containerStack.push(this.sliceTitle); + this.containerStack.push(sliceTiddler.title); this.processNodeList(domNode.childNodes); this.containerStack.pop(); }; From b8aa60cdabca1dfef241e7f389f421cb7eddd291 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Mon, 1 Feb 2016 21:22:55 +0000 Subject: [PATCH 221/242] Text-slicer: Fix bug with nodes without a classname --- plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js | 2 +- plugins/tiddlywiki/text-slicer/modules/slicers/definition.js | 2 +- plugins/tiddlywiki/text-slicer/modules/slicers/heading.js | 2 +- plugins/tiddlywiki/text-slicer/modules/slicers/item.js | 2 +- plugins/tiddlywiki/text-slicer/modules/slicers/list.js | 2 +- plugins/tiddlywiki/text-slicer/modules/slicers/paragraph.js | 2 +- plugins/tiddlywiki/text-slicer/modules/slicers/term.js | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js b/plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js index bfcdce28e..2f471b78e 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/def-list.js @@ -17,7 +17,7 @@ exports.processDefListNode = function(domNode,tagName) { var title = this.makeUniqueTitle("def-list-" + tagName), parentTitle = this.parentStack[this.parentStack.length - 1].title, tags = []; - if(domNode.className.trim() !== "") { + if(domNode.className && domNode.className.trim() !== "") { tags = tags.concat(domNode.className.split(" ")); } this.addToList(parentTitle,title); diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js b/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js index dc4d064c6..a5bcc695f 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/definition.js @@ -19,7 +19,7 @@ exports.processDefinitionNode = function(domNode,tagName) { var title = this.makeUniqueTitle("definition",text), parentTitle = this.parentStack[this.parentStack.length - 1].title, tags = []; - if(domNode.className.trim() !== "") { + if(domNode.className && domNode.className.trim() !== "") { tags = tags.concat(domNode.className.split(" ")); } this.addToList(parentTitle,title); diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/heading.js b/plugins/tiddlywiki/text-slicer/modules/slicers/heading.js index cdc9ff1c5..c263c1074 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/heading.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/heading.js @@ -18,7 +18,7 @@ exports.processHeadingNode = function(domNode,tagName) { var title = this.makeUniqueTitle("heading",text), parentTitle = this.popParentStackUntil(tagName), tags = []; - if(domNode.className.trim() !== "") { + if(domNode.className && domNode.className.trim() !== "") { tags = tags.concat(domNode.className.split(" ")); } this.addToList(parentTitle,title); diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/item.js b/plugins/tiddlywiki/text-slicer/modules/slicers/item.js index e8c772310..b4a3dd201 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/item.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/item.js @@ -19,7 +19,7 @@ exports.processListItemNode = function(domNode,tagName) { var title = this.makeUniqueTitle("list-item",text), parentTitle = this.parentStack[this.parentStack.length - 1].title, tags = []; - if(domNode.className.trim() !== "") { + if(domNode.className && domNode.className.trim() !== "") { tags = tags.concat(domNode.className.split(" ")); } this.addToList(parentTitle,title); diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/list.js b/plugins/tiddlywiki/text-slicer/modules/slicers/list.js index 1e203b772..53b1c62f9 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/list.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/list.js @@ -17,7 +17,7 @@ exports.processListNode = function(domNode,tagName) { var title = this.makeUniqueTitle("list-" + tagName), parentTitle = this.parentStack[this.parentStack.length - 1].title, tags = []; - if(domNode.className.trim() !== "") { + if(domNode.className && domNode.className.trim() !== "") { tags = tags.concat(domNode.className.split(" ")); } this.addToList(parentTitle,title); diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/paragraph.js b/plugins/tiddlywiki/text-slicer/modules/slicers/paragraph.js index db28ad902..e5a2b088e 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/paragraph.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/paragraph.js @@ -19,7 +19,7 @@ exports.processParagraphNode = function(domNode,tagName) { var parentTitle = this.parentStack[this.parentStack.length - 1].title, tags = [], title = this.makeUniqueTitle("paragraph",text); - if(domNode.className.trim() !== "") { + if(domNode.className && domNode.className && domNode.className.trim() !== "") { tags = tags.concat(domNode.className.split(" ")); } this.addToList(parentTitle,this.addTiddler({ diff --git a/plugins/tiddlywiki/text-slicer/modules/slicers/term.js b/plugins/tiddlywiki/text-slicer/modules/slicers/term.js index d72875e18..6ee16dde3 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicers/term.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicers/term.js @@ -19,7 +19,7 @@ exports.processTermNode = function(domNode,tagName) { var title = this.makeUniqueTitle("term",text), parentTitle = this.parentStack[this.parentStack.length - 1].title, tags = []; - if(domNode.className.trim() !== "") { + if(domNode.className && domNode.className.trim() !== "") { tags = tags.concat(domNode.className.split(" ")); } this.addToList(parentTitle,title); From 176d2ccd76856b10aadd5e71af587574e7bcd447 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Mon, 1 Feb 2016 21:26:11 +0000 Subject: [PATCH 222/242] Text-slicer: Add support for notes within documents --- plugins/tiddlywiki/text-slicer/docs.tid | 9 +++++++++ plugins/tiddlywiki/text-slicer/styles.tid | 14 ++++++++++++++ .../templates/interactive/note.tid | 19 +++++++++++++++++++ .../templates/interactive/tiddler.tid | 4 ++++ .../text-slicer/templates/plain/note.tid | 3 +++ .../text-slicer/templates/plain/tiddler.tid | 4 ++++ .../text-slicer/templates/static/note.tid | 3 +++ .../text-slicer/templates/static/tiddler.tid | 6 ++++++ 8 files changed, 62 insertions(+) create mode 100644 plugins/tiddlywiki/text-slicer/templates/interactive/note.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/plain/note.tid create mode 100644 plugins/tiddlywiki/text-slicer/templates/static/note.tid diff --git a/plugins/tiddlywiki/text-slicer/docs.tid b/plugins/tiddlywiki/text-slicer/docs.tid index f08e5c9d7..219443107 100644 --- a/plugins/tiddlywiki/text-slicer/docs.tid +++ b/plugins/tiddlywiki/text-slicer/docs.tid @@ -178,6 +178,15 @@ Tiddlers representing images have the following fields: * ''title'': an automatically generated unique title * ''type'': appropriate content type for the image (eg "image/jpeg") +!!! Notes + +Notes are available during editing but hidden for static renderings. The slicing mechanism does not generate notes; they can only be subsequently added manually. Tiddlers representing notes have the following fields: + +* ''toc-type'': the text "note" +* ''title'': an automatically generated unique title +* ''text'': the text of the note +* ''tags'': any CSS classes found in the HTML are converted into tags + ! Document Metadata, Tags and Classes [TBD] diff --git a/plugins/tiddlywiki/text-slicer/styles.tid b/plugins/tiddlywiki/text-slicer/styles.tid index cf74a4653..71d7d733d 100644 --- a/plugins/tiddlywiki/text-slicer/styles.tid +++ b/plugins/tiddlywiki/text-slicer/styles.tid @@ -21,6 +21,20 @@ tags: $:/tags/Stylesheet font-size: 1.7em; } +.tc-slice-note { + color: #800; + padding: 4px 4px 4px 4px; + border: 1px solid #feed77; + background: #feed77; + background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#dede80),color-stop(7%,#feed77),color-stop(92%,#feed77),color-stop(100%,#dede80)); + background: -webkit-linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), -webkit-linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%); + background: -moz-linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), -moz-linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%); + background: -o-linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), -o-linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%); + background: -ms-linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), -ms-linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%); + background: linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%); + <<box-shadow "1px 1px 6px rgba(0,0,0,0.4)">> +} + .tc-document-preview-column .tc-sliced-document-header { margin-left: 24px; } diff --git a/plugins/tiddlywiki/text-slicer/templates/interactive/note.tid b/plugins/tiddlywiki/text-slicer/templates/interactive/note.tid new file mode 100644 index 000000000..e2f3c4f3e --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/interactive/note.tid @@ -0,0 +1,19 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/interactive/note + +\define body() +<div class="tc-slice-note"> + +<$link tag="div" class="tc-document-tiddler-link tc-document-tiddler"> + +<$list filter="""[all[current]] $(tv-exclude-filter)$ +[limit[1]]""" variable="item"> + +<$transclude/> + +</$list> + +</$link> + +</div> +\end + +<<body>> diff --git a/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler.tid b/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler.tid index fd98e761a..2d53001b8 100644 --- a/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler.tid +++ b/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler.tid @@ -16,6 +16,10 @@ title: $:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler <$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/interactive/paragraph" mode="block"/> </$reveal> +<$reveal type="match" state="!!toc-type" text="note"> +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/interactive/note" mode="block"/> +</$reveal> + <$reveal type="match" state="!!toc-type" text="list"> <$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/interactive/list" mode="block"/> </$reveal> diff --git a/plugins/tiddlywiki/text-slicer/templates/plain/note.tid b/plugins/tiddlywiki/text-slicer/templates/plain/note.tid new file mode 100644 index 000000000..cddda37d6 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/plain/note.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/plain/note + +<!-- Don't display notes in plain mode --> diff --git a/plugins/tiddlywiki/text-slicer/templates/plain/tiddler.tid b/plugins/tiddlywiki/text-slicer/templates/plain/tiddler.tid index 390c2e308..f2b67200a 100644 --- a/plugins/tiddlywiki/text-slicer/templates/plain/tiddler.tid +++ b/plugins/tiddlywiki/text-slicer/templates/plain/tiddler.tid @@ -14,6 +14,10 @@ title: $:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler <$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/plain/paragraph" mode="block"/> </$list> +<$list filter="[<toc-type>prefix[note]]" variable="item"> +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/plain/note" mode="block"/> +</$list> + <$list filter="[<toc-type>prefix[list]]" variable="item"> <$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/plain/list" mode="block"/> </$list> diff --git a/plugins/tiddlywiki/text-slicer/templates/static/note.tid b/plugins/tiddlywiki/text-slicer/templates/static/note.tid new file mode 100644 index 000000000..1530d9538 --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/templates/static/note.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/text-slicer/templates/static/note + +<!-- Don't display notes in static mode --> diff --git a/plugins/tiddlywiki/text-slicer/templates/static/tiddler.tid b/plugins/tiddlywiki/text-slicer/templates/static/tiddler.tid index bd8e1e822..8f4c6fe59 100644 --- a/plugins/tiddlywiki/text-slicer/templates/static/tiddler.tid +++ b/plugins/tiddlywiki/text-slicer/templates/static/tiddler.tid @@ -20,6 +20,12 @@ title: $:/plugins/tiddlywiki/text-slicer/templates/static/tiddler </$list> +<$list filter="[<toc-type>prefix[note]]" variable="item"> + +<$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/static/note" mode="block"/> + +</$list> + <$list filter="[<toc-type>prefix[list]]" variable="item"> <$transclude tiddler="$:/plugins/tiddlywiki/text-slicer/templates/static/list" mode="block"/> From 68b54a6e6f4ab16f3041b898ae106c4597b1f1ea Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Mon, 1 Feb 2016 21:28:52 +0000 Subject: [PATCH 223/242] Add xmldom parser Integrating this module allows us to do HTML/XML parsing under Node.js (there is no built-in support for Node.js; we can already do HTML/XML parsing in the browser). The implementation chosen is pure JavaScript, and will work in all configurations of TiddlyWiki. --- plugins/tiddlywiki/xmldom/files/LICENSE | 8 + plugins/tiddlywiki/xmldom/files/dom-parser.js | 256 ++++ plugins/tiddlywiki/xmldom/files/dom.js | 1141 +++++++++++++++++ plugins/tiddlywiki/xmldom/files/readme.md | 219 ++++ plugins/tiddlywiki/xmldom/files/sax.js | 586 +++++++++ .../tiddlywiki/xmldom/files/tiddlywiki.files | 38 + plugins/tiddlywiki/xmldom/plugin.info | 7 + plugins/tiddlywiki/xmldom/readme.tid | 3 + 8 files changed, 2258 insertions(+) create mode 100644 plugins/tiddlywiki/xmldom/files/LICENSE create mode 100644 plugins/tiddlywiki/xmldom/files/dom-parser.js create mode 100644 plugins/tiddlywiki/xmldom/files/dom.js create mode 100644 plugins/tiddlywiki/xmldom/files/readme.md create mode 100644 plugins/tiddlywiki/xmldom/files/sax.js create mode 100644 plugins/tiddlywiki/xmldom/files/tiddlywiki.files create mode 100644 plugins/tiddlywiki/xmldom/plugin.info create mode 100644 plugins/tiddlywiki/xmldom/readme.tid diff --git a/plugins/tiddlywiki/xmldom/files/LICENSE b/plugins/tiddlywiki/xmldom/files/LICENSE new file mode 100644 index 000000000..68a9b5e1b --- /dev/null +++ b/plugins/tiddlywiki/xmldom/files/LICENSE @@ -0,0 +1,8 @@ +You can choose any one of those: + +The MIT License (MIT): + +link:http://opensource.org/licenses/MIT + +LGPL: +http://www.gnu.org/licenses/lgpl.html diff --git a/plugins/tiddlywiki/xmldom/files/dom-parser.js b/plugins/tiddlywiki/xmldom/files/dom-parser.js new file mode 100644 index 000000000..44657c507 --- /dev/null +++ b/plugins/tiddlywiki/xmldom/files/dom-parser.js @@ -0,0 +1,256 @@ +function DOMParser(options){ + this.options = options ||{locator:{}}; + +} +DOMParser.prototype.parseFromString = function(source,mimeType){ + var options = this.options; + var sax = new XMLReader(); + var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler + var errorHandler = options.errorHandler; + var locator = options.locator; + var defaultNSMap = options.xmlns||{}; + var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"} + if(locator){ + domBuilder.setDocumentLocator(locator) + } + + sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); + sax.domBuilder = options.domBuilder || domBuilder; + if(/\/x?html?$/.test(mimeType)){ + entityMap.nbsp = '\xa0'; + entityMap.copy = '\xa9'; + defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; + } + defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace'; + if(source){ + sax.parse(source,defaultNSMap,entityMap); + }else{ + sax.errorHandler.error("invalid document source"); + } + return domBuilder.document; +} +function buildErrorHandler(errorImpl,domBuilder,locator){ + if(!errorImpl){ + if(domBuilder instanceof DOMHandler){ + return domBuilder; + } + errorImpl = domBuilder ; + } + var errorHandler = {} + var isCallback = errorImpl instanceof Function; + locator = locator||{} + function build(key){ + var fn = errorImpl[key]; + if(!fn){ + if(isCallback){ + fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; + }else{ + var i=arguments.length; + while(--i){ + if(fn = errorImpl[arguments[i]]){ + break; + } + } + } + } + errorHandler[key] = fn && function(msg){ + fn(msg+_locator(locator)); + }||function(){}; + } + build('warning','warn'); + build('error','warn','warning'); + build('fatalError','warn','warning','error'); + return errorHandler; +} +/** + * +ContentHandler+ErrorHandler + * +LexicalHandler+EntityResolver2 + * -DeclHandler-DTDHandler + * + * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler + * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 + * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html + */ +function DOMHandler() { + this.cdata = false; +} +function position(locator,node){ + node.lineNumber = locator.lineNumber; + node.columnNumber = locator.columnNumber; +} +/** + * @see org.xml.sax.ContentHandler#startDocument + * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html + */ +DOMHandler.prototype = { + startDocument : function() { + this.document = new DOMImplementation().createDocument(null, null, null); + if (this.locator) { + this.document.documentURI = this.locator.systemId; + } + }, + startElement:function(namespaceURI, localName, qName, attrs) { + var doc = this.document; + var el = doc.createElementNS(namespaceURI, qName||localName); + var len = attrs.length; + appendElement(this, el); + this.currentElement = el; + + this.locator && position(this.locator,el) + for (var i = 0 ; i < len; i++) { + var namespaceURI = attrs.getURI(i); + var value = attrs.getValue(i); + var qName = attrs.getQName(i); + var attr = doc.createAttributeNS(namespaceURI, qName); + if( attr.getOffset){ + position(attr.getOffset(1),attr) + } + attr.value = attr.nodeValue = value; + el.setAttributeNode(attr) + } + }, + endElement:function(namespaceURI, localName, qName) { + var current = this.currentElement + var tagName = current.tagName; + this.currentElement = current.parentNode; + }, + startPrefixMapping:function(prefix, uri) { + }, + endPrefixMapping:function(prefix) { + }, + processingInstruction:function(target, data) { + var ins = this.document.createProcessingInstruction(target, data); + this.locator && position(this.locator,ins) + appendElement(this, ins); + }, + ignorableWhitespace:function(ch, start, length) { + }, + characters:function(chars, start, length) { + chars = _toString.apply(this,arguments) + //console.log(chars) + if(this.currentElement && chars){ + if (this.cdata) { + var charNode = this.document.createCDATASection(chars); + this.currentElement.appendChild(charNode); + } else { + var charNode = this.document.createTextNode(chars); + this.currentElement.appendChild(charNode); + } + this.locator && position(this.locator,charNode) + } + }, + skippedEntity:function(name) { + }, + endDocument:function() { + this.document.normalize(); + }, + setDocumentLocator:function (locator) { + if(this.locator = locator){// && !('lineNumber' in locator)){ + locator.lineNumber = 0; + } + }, + //LexicalHandler + comment:function(chars, start, length) { + chars = _toString.apply(this,arguments) + var comm = this.document.createComment(chars); + this.locator && position(this.locator,comm) + appendElement(this, comm); + }, + + startCDATA:function() { + //used in characters() methods + this.cdata = true; + }, + endCDATA:function() { + this.cdata = false; + }, + + startDTD:function(name, publicId, systemId) { + var impl = this.document.implementation; + if (impl && impl.createDocumentType) { + var dt = impl.createDocumentType(name, publicId, systemId); + this.locator && position(this.locator,dt) + appendElement(this, dt); + } + }, + /** + * @see org.xml.sax.ErrorHandler + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + warning:function(error) { + console.warn(error,_locator(this.locator)); + }, + error:function(error) { + console.error(error,_locator(this.locator)); + }, + fatalError:function(error) { + console.error(error,_locator(this.locator)); + throw error; + } +} +function _locator(l){ + if(l){ + return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' + } +} +function _toString(chars,start,length){ + if(typeof chars == 'string'){ + return chars.substr(start,length) + }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") + if(chars.length >= start+length || start){ + return new java.lang.String(chars,start,length)+''; + } + return chars; + } +} + +/* + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html + * used method of org.xml.sax.ext.LexicalHandler: + * #comment(chars, start, length) + * #startCDATA() + * #endCDATA() + * #startDTD(name, publicId, systemId) + * + * + * IGNORED method of org.xml.sax.ext.LexicalHandler: + * #endDTD() + * #startEntity(name) + * #endEntity(name) + * + * + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html + * IGNORED method of org.xml.sax.ext.DeclHandler + * #attributeDecl(eName, aName, type, mode, value) + * #elementDecl(name, model) + * #externalEntityDecl(name, publicId, systemId) + * #internalEntityDecl(name, value) + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html + * IGNORED method of org.xml.sax.EntityResolver2 + * #resolveEntity(String name,String publicId,String baseURI,String systemId) + * #resolveEntity(publicId, systemId) + * #getExternalSubset(name, baseURI) + * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html + * IGNORED method of org.xml.sax.DTDHandler + * #notationDecl(name, publicId, systemId) {}; + * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; + */ +"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ + DOMHandler.prototype[key] = function(){return null} +}) + +/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ +function appendElement (hander,node) { + if (!hander.currentElement) { + hander.document.appendChild(node); + } else { + hander.currentElement.appendChild(node); + } +}//appendChild and setAttributeNS are preformance key + +if(typeof require == 'function'){ + var XMLReader = require('./sax').XMLReader; + var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation; + exports.XMLSerializer = require('./dom').XMLSerializer ; + exports.DOMParser = DOMParser; +} diff --git a/plugins/tiddlywiki/xmldom/files/dom.js b/plugins/tiddlywiki/xmldom/files/dom.js new file mode 100644 index 000000000..0a3b8add4 --- /dev/null +++ b/plugins/tiddlywiki/xmldom/files/dom.js @@ -0,0 +1,1141 @@ +/* + * DOM Level 2 + * Object DOMException + * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html + */ + +function copy(src,dest){ + for(var p in src){ + dest[p] = src[p]; + } +} +/** +^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? +^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? + */ +function _extends(Class,Super){ + var pt = Class.prototype; + if(Object.create){ + var ppt = Object.create(Super.prototype) + pt.__proto__ = ppt; + } + if(!(pt instanceof Super)){ + function t(){}; + t.prototype = Super.prototype; + t = new t(); + copy(pt,t); + Class.prototype = pt = t; + } + if(pt.constructor != Class){ + if(typeof Class != 'function'){ + console.error("unknow Class:"+Class) + } + pt.constructor = Class + } +} +var htmlns = 'http://www.w3.org/1999/xhtml' ; +// Node Types +var NodeType = {} +var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; +var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; +var TEXT_NODE = NodeType.TEXT_NODE = 3; +var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; +var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; +var ENTITY_NODE = NodeType.ENTITY_NODE = 6; +var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; +var COMMENT_NODE = NodeType.COMMENT_NODE = 8; +var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; +var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; +var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; +var NOTATION_NODE = NodeType.NOTATION_NODE = 12; + +// ExceptionCode +var ExceptionCode = {} +var ExceptionMessage = {}; +var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); +var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); +var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); +var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); +var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); +var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); +var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); +var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); +var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); +var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); +//level2 +var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); +var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); +var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); +var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); +var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); + + +function DOMException(code, message) { + if(message instanceof Error){ + var error = message; + }else{ + error = this; + Error.call(this, ExceptionMessage[code]); + this.message = ExceptionMessage[code]; + if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); + } + error.code = code; + if(message) this.message = this.message + ": " + message; + return error; +}; +DOMException.prototype = Error.prototype; +copy(ExceptionCode,DOMException) +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177 + * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live. + * The items in the NodeList are accessible via an integral index, starting from 0. + */ +function NodeList() { +}; +NodeList.prototype = { + /** + * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. + * @standard level1 + */ + length:0, + /** + * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. + * @standard level1 + * @param index unsigned long + * Index into the collection. + * @return Node + * The node at the indexth position in the NodeList, or null if that is not a valid index. + */ + item: function(index) { + return this[index] || null; + } +}; +function LiveNodeList(node,refresh){ + this._node = node; + this._refresh = refresh + _updateLiveList(this); +} +function _updateLiveList(list){ + var inc = list._node._inc || list._node.ownerDocument._inc; + if(list._inc != inc){ + var ls = list._refresh(list._node); + //console.log(ls.length) + __set__(list,'length',ls.length); + copy(ls,list); + list._inc = inc; + } +} +LiveNodeList.prototype.item = function(i){ + _updateLiveList(this); + return this[i]; +} + +_extends(LiveNodeList,NodeList); +/** + * + * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes. + * NamedNodeMap objects in the DOM are live. + * used for attributes or DocumentType entities + */ +function NamedNodeMap() { +}; + +function _findNodeIndex(list,node){ + var i = list.length; + while(i--){ + if(list[i] === node){return i} + } +} + +function _addNamedNode(el,list,newAttr,oldAttr){ + if(oldAttr){ + list[_findNodeIndex(list,oldAttr)] = newAttr; + }else{ + list[list.length++] = newAttr; + } + if(el){ + newAttr.ownerElement = el; + var doc = el.ownerDocument; + if(doc){ + oldAttr && _onRemoveAttribute(doc,el,oldAttr); + _onAddAttribute(doc,el,newAttr); + } + } +} +function _removeNamedNode(el,list,attr){ + var i = _findNodeIndex(list,attr); + if(i>=0){ + var lastIndex = list.length-1 + while(i<lastIndex){ + list[i] = list[++i] + } + list.length = lastIndex; + if(el){ + var doc = el.ownerDocument; + if(doc){ + _onRemoveAttribute(doc,el,attr); + attr.ownerElement = null; + } + } + }else{ + throw DOMException(NOT_FOUND_ERR,new Error()) + } +} +NamedNodeMap.prototype = { + length:0, + item:NodeList.prototype.item, + getNamedItem: function(key) { +// if(key.indexOf(':')>0 || key == 'xmlns'){ +// return null; +// } + var i = this.length; + while(i--){ + var attr = this[i]; + if(attr.nodeName == key){ + return attr; + } + } + }, + setNamedItem: function(attr) { + var el = attr.ownerElement; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + var oldAttr = this.getNamedItem(attr.nodeName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + /* returns Node */ + setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR + var el = attr.ownerElement, oldAttr; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + + /* returns Node */ + removeNamedItem: function(key) { + var attr = this.getNamedItem(key); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + + + },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR + + //for level2 + removeNamedItemNS:function(namespaceURI,localName){ + var attr = this.getNamedItemNS(namespaceURI,localName); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + }, + getNamedItemNS: function(namespaceURI, localName) { + var i = this.length; + while(i--){ + var node = this[i]; + if(node.localName == localName && node.namespaceURI == namespaceURI){ + return node; + } + } + return null; + } +}; +/** + * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 + */ +function DOMImplementation(/* Object */ features) { + this._features = {}; + if (features) { + for (var feature in features) { + this._features = features[feature]; + } + } +}; + +DOMImplementation.prototype = { + hasFeature: function(/* string */ feature, /* string */ version) { + var versions = this._features[feature.toLowerCase()]; + if (versions && (!version || version in versions)) { + return true; + } else { + return false; + } + }, + // Introduced in DOM Level 2: + createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR + var doc = new Document(); + doc.implementation = this; + doc.childNodes = new NodeList(); + doc.doctype = doctype; + if(doctype){ + doc.appendChild(doctype); + } + if(qualifiedName){ + var root = doc.createElementNS(namespaceURI,qualifiedName); + doc.appendChild(root); + } + return doc; + }, + // Introduced in DOM Level 2: + createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR + var node = new DocumentType(); + node.name = qualifiedName; + node.nodeName = qualifiedName; + node.publicId = publicId; + node.systemId = systemId; + // Introduced in DOM Level 2: + //readonly attribute DOMString internalSubset; + + //TODO:.. + // readonly attribute NamedNodeMap entities; + // readonly attribute NamedNodeMap notations; + return node; + } +}; + + +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 + */ + +function Node() { +}; + +Node.prototype = { + firstChild : null, + lastChild : null, + previousSibling : null, + nextSibling : null, + attributes : null, + parentNode : null, + childNodes : null, + ownerDocument : null, + nodeValue : null, + namespaceURI : null, + prefix : null, + localName : null, + // Modified in DOM Level 2: + insertBefore:function(newChild, refChild){//raises + return _insertBefore(this,newChild,refChild); + }, + replaceChild:function(newChild, oldChild){//raises + this.insertBefore(newChild,oldChild); + if(oldChild){ + this.removeChild(oldChild); + } + }, + removeChild:function(oldChild){ + return _removeChild(this,oldChild); + }, + appendChild:function(newChild){ + return this.insertBefore(newChild,null); + }, + hasChildNodes:function(){ + return this.firstChild != null; + }, + cloneNode:function(deep){ + return cloneNode(this.ownerDocument||this,this,deep); + }, + // Modified in DOM Level 2: + normalize:function(){ + var child = this.firstChild; + while(child){ + var next = child.nextSibling; + if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ + this.removeChild(next); + child.appendData(next.data); + }else{ + child.normalize(); + child = next; + } + } + }, + // Introduced in DOM Level 2: + isSupported:function(feature, version){ + return this.ownerDocument.implementation.hasFeature(feature,version); + }, + // Introduced in DOM Level 2: + hasAttributes:function(){ + return this.attributes.length>0; + }, + lookupPrefix:function(namespaceURI){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + for(var n in map){ + if(map[n] == namespaceURI){ + return n; + } + } + } + el = el.nodeType == 2?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + lookupNamespaceURI:function(prefix){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + if(prefix in map){ + return map[prefix] ; + } + } + el = el.nodeType == 2?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + isDefaultNamespace:function(namespaceURI){ + var prefix = this.lookupPrefix(namespaceURI); + return prefix == null; + } +}; + + +function _xmlEncoder(c){ + return c == '<' && '<' || + c == '>' && '>' || + c == '&' && '&' || + c == '"' && '"' || + '&#'+c.charCodeAt()+';' +} + + +copy(NodeType,Node); +copy(NodeType,Node.prototype); + +/** + * @param callback return true for continue,false for break + * @return boolean true: break visit; + */ +function _visitNode(node,callback){ + if(callback(node)){ + return true; + } + if(node = node.firstChild){ + do{ + if(_visitNode(node,callback)){return true} + }while(node=node.nextSibling) + } +} + + + +function Document(){ +} +function _onAddAttribute(doc,el,newAttr){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value + } +} +function _onRemoveAttribute(doc,el,newAttr,remove){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + delete el._nsMap[newAttr.prefix?newAttr.localName:''] + } +} +function _onUpdateChild(doc,el,newChild){ + if(doc && doc._inc){ + doc._inc++; + //update childNodes + var cs = el.childNodes; + if(newChild){ + cs[cs.length++] = newChild; + }else{ + //console.log(1) + var child = el.firstChild; + var i = 0; + while(child){ + cs[i++] = child; + child =child.nextSibling; + } + cs.length = i; + } + } +} + +/** + * attributes; + * children; + * + * writeable properties: + * nodeValue,Attr:value,CharacterData:data + * prefix + */ +function _removeChild(parentNode,child){ + var previous = child.previousSibling; + var next = child.nextSibling; + if(previous){ + previous.nextSibling = next; + }else{ + parentNode.firstChild = next + } + if(next){ + next.previousSibling = previous; + }else{ + parentNode.lastChild = previous; + } + _onUpdateChild(parentNode.ownerDocument,parentNode); + return child; +} +/** + * preformance key(refChild == null) + */ +function _insertBefore(parentNode,newChild,nextChild){ + var cp = newChild.parentNode; + if(cp){ + cp.removeChild(newChild);//remove and update + } + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + var newFirst = newChild.firstChild; + if (newFirst == null) { + return newChild; + } + var newLast = newChild.lastChild; + }else{ + newFirst = newLast = newChild; + } + var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; + + newFirst.previousSibling = pre; + newLast.nextSibling = nextChild; + + + if(pre){ + pre.nextSibling = newFirst; + }else{ + parentNode.firstChild = newFirst; + } + if(nextChild == null){ + parentNode.lastChild = newLast; + }else{ + nextChild.previousSibling = newLast; + } + do{ + newFirst.parentNode = parentNode; + }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) + _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); + //console.log(parentNode.lastChild.nextSibling == null) + if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { + newChild.firstChild = newChild.lastChild = null; + } + return newChild; +} +function _appendSingleChild(parentNode,newChild){ + var cp = newChild.parentNode; + if(cp){ + var pre = parentNode.lastChild; + cp.removeChild(newChild);//remove and update + var pre = parentNode.lastChild; + } + var pre = parentNode.lastChild; + newChild.parentNode = parentNode; + newChild.previousSibling = pre; + newChild.nextSibling = null; + if(pre){ + pre.nextSibling = newChild; + }else{ + parentNode.firstChild = newChild; + } + parentNode.lastChild = newChild; + _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); + return newChild; + //console.log("__aa",parentNode.lastChild.nextSibling == null) +} +Document.prototype = { + //implementation : null, + nodeName : '#document', + nodeType : DOCUMENT_NODE, + doctype : null, + documentElement : null, + _inc : 1, + + insertBefore : function(newChild, refChild){//raises + if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ + var child = newChild.firstChild; + while(child){ + var next = child.nextSibling; + this.insertBefore(child,refChild); + child = next; + } + return newChild; + } + if(this.documentElement == null && newChild.nodeType == 1){ + this.documentElement = newChild; + } + + return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; + }, + removeChild : function(oldChild){ + if(this.documentElement == oldChild){ + this.documentElement = null; + } + return _removeChild(this,oldChild); + }, + // Introduced in DOM Level 2: + importNode : function(importedNode,deep){ + return importNode(this,importedNode,deep); + }, + // Introduced in DOM Level 2: + getElementById : function(id){ + var rtv = null; + _visitNode(this.documentElement,function(node){ + if(node.nodeType == 1){ + if(node.getAttribute('id') == id){ + rtv = node; + return true; + } + } + }) + return rtv; + }, + + //document factory method: + createElement : function(tagName){ + var node = new Element(); + node.ownerDocument = this; + node.nodeName = tagName; + node.tagName = tagName; + node.childNodes = new NodeList(); + var attrs = node.attributes = new NamedNodeMap(); + attrs._ownerElement = node; + return node; + }, + createDocumentFragment : function(){ + var node = new DocumentFragment(); + node.ownerDocument = this; + node.childNodes = new NodeList(); + return node; + }, + createTextNode : function(data){ + var node = new Text(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createComment : function(data){ + var node = new Comment(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createCDATASection : function(data){ + var node = new CDATASection(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createProcessingInstruction : function(target,data){ + var node = new ProcessingInstruction(); + node.ownerDocument = this; + node.tagName = node.target = target; + node.nodeValue= node.data = data; + return node; + }, + createAttribute : function(name){ + var node = new Attr(); + node.ownerDocument = this; + node.name = name; + node.nodeName = name; + node.localName = name; + node.specified = true; + return node; + }, + createEntityReference : function(name){ + var node = new EntityReference(); + node.ownerDocument = this; + node.nodeName = name; + return node; + }, + // Introduced in DOM Level 2: + createElementNS : function(namespaceURI,qualifiedName){ + var node = new Element(); + var pl = qualifiedName.split(':'); + var attrs = node.attributes = new NamedNodeMap(); + node.childNodes = new NodeList(); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.tagName = qualifiedName; + node.namespaceURI = namespaceURI; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + attrs._ownerElement = node; + return node; + }, + // Introduced in DOM Level 2: + createAttributeNS : function(namespaceURI,qualifiedName){ + var node = new Attr(); + var pl = qualifiedName.split(':'); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.name = qualifiedName; + node.namespaceURI = namespaceURI; + node.specified = true; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + return node; + } +}; +_extends(Document,Node); + + +function Element() { + this._nsMap = {}; +}; +Element.prototype = { + nodeType : ELEMENT_NODE, + hasAttribute : function(name){ + return this.getAttributeNode(name)!=null; + }, + getAttribute : function(name){ + var attr = this.getAttributeNode(name); + return attr && attr.value || ''; + }, + getAttributeNode : function(name){ + return this.attributes.getNamedItem(name); + }, + setAttribute : function(name, value){ + var attr = this.ownerDocument.createAttribute(name); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + removeAttribute : function(name){ + var attr = this.getAttributeNode(name) + attr && this.removeAttributeNode(attr); + }, + + //four real opeartion method + appendChild:function(newChild){ + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + return this.insertBefore(newChild,null); + }else{ + return _appendSingleChild(this,newChild); + } + }, + setAttributeNode : function(newAttr){ + return this.attributes.setNamedItem(newAttr); + }, + setAttributeNodeNS : function(newAttr){ + return this.attributes.setNamedItemNS(newAttr); + }, + removeAttributeNode : function(oldAttr){ + return this.attributes.removeNamedItem(oldAttr.nodeName); + }, + //get real attribute name,and remove it by removeAttributeNode + removeAttributeNS : function(namespaceURI, localName){ + var old = this.getAttributeNodeNS(namespaceURI, localName); + old && this.removeAttributeNode(old); + }, + + hasAttributeNS : function(namespaceURI, localName){ + return this.getAttributeNodeNS(namespaceURI, localName)!=null; + }, + getAttributeNS : function(namespaceURI, localName){ + var attr = this.getAttributeNodeNS(namespaceURI, localName); + return attr && attr.value || ''; + }, + setAttributeNS : function(namespaceURI, qualifiedName, value){ + var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + getAttributeNodeNS : function(namespaceURI, localName){ + return this.attributes.getNamedItemNS(namespaceURI, localName); + }, + + getElementsByTagName : function(tagName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ + ls.push(node); + } + }); + return ls; + }); + }, + getElementsByTagNameNS : function(namespaceURI, localName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ + ls.push(node); + } + }); + return ls; + }); + } +}; +Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; +Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; + + +_extends(Element,Node); +function Attr() { +}; +Attr.prototype.nodeType = ATTRIBUTE_NODE; +_extends(Attr,Node); + + +function CharacterData() { +}; +CharacterData.prototype = { + data : '', + substringData : function(offset, count) { + return this.data.substring(offset, offset+count); + }, + appendData: function(text) { + text = this.data+text; + this.nodeValue = this.data = text; + this.length = text.length; + }, + insertData: function(offset,text) { + this.replaceData(offset,0,text); + + }, + appendChild:function(newChild){ + //if(!(newChild instanceof CharacterData)){ + throw new Error(ExceptionMessage[3]) + //} + return Node.prototype.appendChild.apply(this,arguments) + }, + deleteData: function(offset, count) { + this.replaceData(offset,count,""); + }, + replaceData: function(offset, count, text) { + var start = this.data.substring(0,offset); + var end = this.data.substring(offset+count); + text = start + text + end; + this.nodeValue = this.data = text; + this.length = text.length; + } +} +_extends(CharacterData,Node); +function Text() { +}; +Text.prototype = { + nodeName : "#text", + nodeType : TEXT_NODE, + splitText : function(offset) { + var text = this.data; + var newText = text.substring(offset); + text = text.substring(0, offset); + this.data = this.nodeValue = text; + this.length = text.length; + var newNode = this.ownerDocument.createTextNode(newText); + if(this.parentNode){ + this.parentNode.insertBefore(newNode, this.nextSibling); + } + return newNode; + } +} +_extends(Text,CharacterData); +function Comment() { +}; +Comment.prototype = { + nodeName : "#comment", + nodeType : COMMENT_NODE +} +_extends(Comment,CharacterData); + +function CDATASection() { +}; +CDATASection.prototype = { + nodeName : "#cdata-section", + nodeType : CDATA_SECTION_NODE +} +_extends(CDATASection,CharacterData); + + +function DocumentType() { +}; +DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; +_extends(DocumentType,Node); + +function Notation() { +}; +Notation.prototype.nodeType = NOTATION_NODE; +_extends(Notation,Node); + +function Entity() { +}; +Entity.prototype.nodeType = ENTITY_NODE; +_extends(Entity,Node); + +function EntityReference() { +}; +EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; +_extends(EntityReference,Node); + +function DocumentFragment() { +}; +DocumentFragment.prototype.nodeName = "#document-fragment"; +DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; +_extends(DocumentFragment,Node); + + +function ProcessingInstruction() { +} +ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; +_extends(ProcessingInstruction,Node); +function XMLSerializer(){} +XMLSerializer.prototype.serializeToString = function(node,attributeSorter){ + return node.toString(attributeSorter); +} +Node.prototype.toString =function(attributeSorter){ + var buf = []; + serializeToString(this,buf,attributeSorter); + return buf.join(''); +} +function serializeToString(node,buf,attributeSorter,isHTML){ + switch(node.nodeType){ + case ELEMENT_NODE: + var attrs = node.attributes; + var len = attrs.length; + var child = node.firstChild; + var nodeName = node.tagName; + isHTML = (htmlns === node.namespaceURI) ||isHTML + buf.push('<',nodeName); + if(attributeSorter){ + buf.sort.apply(attrs, attributeSorter); + } + for(var i=0;i<len;i++){ + serializeToString(attrs.item(i),buf,attributeSorter,isHTML); + } + if(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){ + buf.push('>'); + //if is cdata child node + if(isHTML && /^script$/i.test(nodeName)){ + if(child){ + buf.push(child.data); + } + }else{ + while(child){ + serializeToString(child,buf,attributeSorter,isHTML); + child = child.nextSibling; + } + } + buf.push('</',nodeName,'>'); + }else{ + buf.push('/>'); + } + return; + case DOCUMENT_NODE: + case DOCUMENT_FRAGMENT_NODE: + var child = node.firstChild; + while(child){ + serializeToString(child,buf,attributeSorter,isHTML); + child = child.nextSibling; + } + return; + case ATTRIBUTE_NODE: + return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); + case TEXT_NODE: + return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); + case CDATA_SECTION_NODE: + return buf.push( '<![CDATA[',node.data,']]>'); + case COMMENT_NODE: + return buf.push( "<!--",node.data,"-->"); + case DOCUMENT_TYPE_NODE: + var pubid = node.publicId; + var sysid = node.systemId; + buf.push('<!DOCTYPE ',node.name); + if(pubid){ + buf.push(' PUBLIC "',pubid); + if (sysid && sysid!='.') { + buf.push( '" "',sysid); + } + buf.push('">'); + }else if(sysid && sysid!='.'){ + buf.push(' SYSTEM "',sysid,'">'); + }else{ + var sub = node.internalSubset; + if(sub){ + buf.push(" [",sub,"]"); + } + buf.push(">"); + } + return; + case PROCESSING_INSTRUCTION_NODE: + return buf.push( "<?",node.target," ",node.data,"?>"); + case ENTITY_REFERENCE_NODE: + return buf.push( '&',node.nodeName,';'); + //case ENTITY_NODE: + //case NOTATION_NODE: + default: + buf.push('??',node.nodeName); + } +} +function importNode(doc,node,deep){ + var node2; + switch (node.nodeType) { + case ELEMENT_NODE: + node2 = node.cloneNode(false); + node2.ownerDocument = doc; + //var attrs = node2.attributes; + //var len = attrs.length; + //for(var i=0;i<len;i++){ + //node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep)); + //} + case DOCUMENT_FRAGMENT_NODE: + break; + case ATTRIBUTE_NODE: + deep = true; + break; + //case ENTITY_REFERENCE_NODE: + //case PROCESSING_INSTRUCTION_NODE: + ////case TEXT_NODE: + //case CDATA_SECTION_NODE: + //case COMMENT_NODE: + // deep = false; + // break; + //case DOCUMENT_NODE: + //case DOCUMENT_TYPE_NODE: + //cannot be imported. + //case ENTITY_NODE: + //case NOTATION_NODE: + //can not hit in level3 + //default:throw e; + } + if(!node2){ + node2 = node.cloneNode(false);//false + } + node2.ownerDocument = doc; + node2.parentNode = null; + if(deep){ + var child = node.firstChild; + while(child){ + node2.appendChild(importNode(doc,child,deep)); + child = child.nextSibling; + } + } + return node2; +} +// +//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1, +// attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,}; +function cloneNode(doc,node,deep){ + var node2 = new node.constructor(); + for(var n in node){ + var v = node[n]; + if(typeof v != 'object' ){ + if(v != node2[n]){ + node2[n] = v; + } + } + } + if(node.childNodes){ + node2.childNodes = new NodeList(); + } + node2.ownerDocument = doc; + switch (node2.nodeType) { + case ELEMENT_NODE: + var attrs = node.attributes; + var attrs2 = node2.attributes = new NamedNodeMap(); + var len = attrs.length + attrs2._ownerElement = node2; + for(var i=0;i<len;i++){ + node2.setAttributeNode(cloneNode(doc,attrs.item(i),true)); + } + break;; + case ATTRIBUTE_NODE: + deep = true; + } + if(deep){ + var child = node.firstChild; + while(child){ + node2.appendChild(cloneNode(doc,child,deep)); + child = child.nextSibling; + } + } + return node2; +} + +function __set__(object,key,value){ + object[key] = value +} +//do dynamic +try{ + if(Object.defineProperty){ + Object.defineProperty(LiveNodeList.prototype,'length',{ + get:function(){ + _updateLiveList(this); + return this.$$length; + } + }); + Object.defineProperty(Node.prototype,'textContent',{ + get:function(){ + return getTextContent(this); + }, + set:function(data){ + switch(this.nodeType){ + case 1: + case 11: + while(this.firstChild){ + this.removeChild(this.firstChild); + } + if(data || String(data)){ + this.appendChild(this.ownerDocument.createTextNode(data)); + } + break; + default: + //TODO: + this.data = data; + this.value = value; + this.nodeValue = data; + } + } + }) + + function getTextContent(node){ + switch(node.nodeType){ + case 1: + case 11: + var buf = []; + node = node.firstChild; + while(node){ + if(node.nodeType!==7 && node.nodeType !==8){ + buf.push(getTextContent(node)); + } + node = node.nextSibling; + } + return buf.join(''); + default: + return node.nodeValue; + } + } + __set__ = function(object,key,value){ + //console.log(value) + object['$$'+key] = value + } + } +}catch(e){//ie8 +} + +if(typeof require == 'function'){ + exports.DOMImplementation = DOMImplementation; + exports.XMLSerializer = XMLSerializer; +} diff --git a/plugins/tiddlywiki/xmldom/files/readme.md b/plugins/tiddlywiki/xmldom/files/readme.md new file mode 100644 index 000000000..f832c4483 --- /dev/null +++ b/plugins/tiddlywiki/xmldom/files/readme.md @@ -0,0 +1,219 @@ +# XMLDOM [![Build Status](https://secure.travis-ci.org/bigeasy/xmldom.png?branch=master)](http://travis-ci.org/bigeasy/xmldom) [![Coverage Status](https://coveralls.io/repos/bigeasy/xmldom/badge.png?branch=master)](https://coveralls.io/r/bigeasy/xmldom) [![NPM version](https://badge.fury.io/js/xmldom.png)](http://badge.fury.io/js/xmldom) + +A JavaScript implementation of W3C DOM for Node.js, Rhino and the browser. Fully +compatible with `W3C DOM level2`; and some compatible with `level3`. Supports +`DOMParser` and `XMLSerializer` interface such as in browser. + +Install: +------- +>npm install xmldom + +Example: +==== +```javascript +var DOMParser = require('xmldom').DOMParser; +var doc = new DOMParser().parseFromString( + '<xml xmlns="a" xmlns:c="./lite">\n'+ + '\t<child>test</child>\n'+ + '\t<child></child>\n'+ + '\t<child/>\n'+ + '</xml>' + ,'text/xml'); +doc.documentElement.setAttribute('x','y'); +doc.documentElement.setAttributeNS('./lite','c:x','y2'); +var nsAttr = doc.documentElement.getAttributeNS('./lite','x') +console.info(nsAttr) +console.info(doc) +``` +API Reference +===== + + * [DOMParser](https://developer.mozilla.org/en/DOMParser): + + ```javascript + parseFromString(xmlsource,mimeType) + ``` + * **options extension** _by xmldom_(not BOM standard!!) + + ```javascript + //added the options argument + new DOMParser(options) + + //errorHandler is supported + new DOMParser({ + /** + * locator is always need for error position info + */ + locator:{}, + /** + * you can override the errorHandler for xml parser + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + errorHandler:{warning:function(w){console.warn(w)},error:callback,fatalError:callback} + //only callback model + //errorHandler:function(level,msg){console.log(level,msg)} + }) + + ``` + + * [XMLSerializer](https://developer.mozilla.org/en/XMLSerializer) + + ```javascript + serializeToString(node) + ``` +DOM level2 method and attribute: +------ + + * [Node](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247) + + attribute: + nodeValue|prefix + readonly attribute: + nodeName|nodeType|parentNode|childNodes|firstChild|lastChild|previousSibling|nextSibling|attributes|ownerDocument|namespaceURI|localName + method: + insertBefore(newChild, refChild) + replaceChild(newChild, oldChild) + removeChild(oldChild) + appendChild(newChild) + hasChildNodes() + cloneNode(deep) + normalize() + isSupported(feature, version) + hasAttributes() + + * [DOMImplementation](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-102161490) + + method: + hasFeature(feature, version) + createDocumentType(qualifiedName, publicId, systemId) + createDocument(namespaceURI, qualifiedName, doctype) + + * [Document](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#i-Document) : Node + + readonly attribute: + doctype|implementation|documentElement + method: + createElement(tagName) + createDocumentFragment() + createTextNode(data) + createComment(data) + createCDATASection(data) + createProcessingInstruction(target, data) + createAttribute(name) + createEntityReference(name) + getElementsByTagName(tagname) + importNode(importedNode, deep) + createElementNS(namespaceURI, qualifiedName) + createAttributeNS(namespaceURI, qualifiedName) + getElementsByTagNameNS(namespaceURI, localName) + getElementById(elementId) + + * [DocumentFragment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-B63ED1A3) : Node + * [Element](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-745549614) : Node + + readonly attribute: + tagName + method: + getAttribute(name) + setAttribute(name, value) + removeAttribute(name) + getAttributeNode(name) + setAttributeNode(newAttr) + removeAttributeNode(oldAttr) + getElementsByTagName(name) + getAttributeNS(namespaceURI, localName) + setAttributeNS(namespaceURI, qualifiedName, value) + removeAttributeNS(namespaceURI, localName) + getAttributeNodeNS(namespaceURI, localName) + setAttributeNodeNS(newAttr) + getElementsByTagNameNS(namespaceURI, localName) + hasAttribute(name) + hasAttributeNS(namespaceURI, localName) + + * [Attr](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-637646024) : Node + + attribute: + value + readonly attribute: + name|specified|ownerElement + + * [NodeList](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177) + + readonly attribute: + length + method: + item(index) + + * [NamedNodeMap](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1780488922) + + readonly attribute: + length + method: + getNamedItem(name) + setNamedItem(arg) + removeNamedItem(name) + item(index) + getNamedItemNS(namespaceURI, localName) + setNamedItemNS(arg) + removeNamedItemNS(namespaceURI, localName) + + * [CharacterData](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-FF21A306) : Node + + method: + substringData(offset, count) + appendData(arg) + insertData(offset, arg) + deleteData(offset, count) + replaceData(offset, count, arg) + + * [Text](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1312295772) : CharacterData + + method: + splitText(offset) + + * [CDATASection](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-667469212) + * [Comment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1728279322) : CharacterData + + * [DocumentType](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-412266927) + + readonly attribute: + name|entities|notations|publicId|systemId|internalSubset + + * Notation : Node + + readonly attribute: + publicId|systemId + + * Entity : Node + + readonly attribute: + publicId|systemId|notationName + + * EntityReference : Node + * ProcessingInstruction : Node + + attribute: + data + readonly attribute: + target + +DOM level 3 support: +----- + + * [Node](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) + + attribute: + textContent + method: + isDefaultNamespace(namespaceURI){ + lookupNamespaceURI(prefix) + +DOM extension by xmldom +--- + * [Node] Source position extension; + + attribute: + //Numbered starting from '1' + lineNumber + //Numbered starting from '1' + columnNumber diff --git a/plugins/tiddlywiki/xmldom/files/sax.js b/plugins/tiddlywiki/xmldom/files/sax.js new file mode 100644 index 000000000..127963f8a --- /dev/null +++ b/plugins/tiddlywiki/xmldom/files/sax.js @@ -0,0 +1,586 @@ +//[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] +//[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] +//[5] Name ::= NameStartChar (NameChar)* +var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF +var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\u203F-\u2040]"); +var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); +//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/ +//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',') + +//S_TAG, S_ATTR, S_EQ, S_V +//S_ATTR_S, S_E, S_S, S_C +var S_TAG = 0;//tag name offerring +var S_ATTR = 1;//attr name offerring +var S_ATTR_S=2;//attr name end and space offer +var S_EQ = 3;//=space? +var S_V = 4;//attr value(no quot value only) +var S_E = 5;//attr value end and no space(quot end) +var S_S = 6;//(attr value end || tag end ) && (space offer) +var S_C = 7;//closed el<el /> + +function XMLReader(){ + +} + +XMLReader.prototype = { + parse:function(source,defaultNSMap,entityMap){ + var domBuilder = this.domBuilder; + domBuilder.startDocument(); + _copy(defaultNSMap ,defaultNSMap = {}) + parse(source,defaultNSMap,entityMap, + domBuilder,this.errorHandler); + domBuilder.endDocument(); + } +} +function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ + function fixedFromCharCode(code) { + // String.prototype.fromCharCode does not supports + // > 2 bytes unicode chars directly + if (code > 0xffff) { + code -= 0x10000; + var surrogate1 = 0xd800 + (code >> 10) + , surrogate2 = 0xdc00 + (code & 0x3ff); + + return String.fromCharCode(surrogate1, surrogate2); + } else { + return String.fromCharCode(code); + } + } + function entityReplacer(a){ + var k = a.slice(1,-1); + if(k in entityMap){ + return entityMap[k]; + }else if(k.charAt(0) === '#'){ + return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) + }else{ + errorHandler.error('entity not found:'+a); + return a; + } + } + function appendText(end){//has some bugs + if(end>start){ + var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); + locator&&position(start); + domBuilder.characters(xt,0,end-start); + start = end + } + } + function position(p,m){ + while(p>=lineEnd && (m = linePattern.exec(source))){ + lineStart = m.index; + lineEnd = lineStart + m[0].length; + locator.lineNumber++; + //console.log('line++:',locator,startPos,endPos) + } + locator.columnNumber = p-lineStart+1; + } + var lineStart = 0; + var lineEnd = 0; + var linePattern = /.+(?:\r\n?|\n)|.*$/g + var locator = domBuilder.locator; + + var parseStack = [{currentNSMap:defaultNSMapCopy}] + var closeMap = {}; + var start = 0; + while(true){ + try{ + var tagStart = source.indexOf('<',start); + if(tagStart<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.document; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } + if(tagStart>start){ + appendText(tagStart); + } + switch(source.charAt(tagStart+1)){ + case '/': + var end = source.indexOf('>',tagStart+3); + var tagName = source.substring(tagStart+2,end); + var config = parseStack.pop(); + var localNSMap = config.localNSMap; + if(config.tagName != tagName){ + errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); + } + domBuilder.endElement(config.uri,config.localName,tagName); + if(localNSMap){ + for(var prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) ; + } + } + end++; + break; + // end elment + case '?':// <?...?> + locator&&position(tagStart); + end = parseInstruction(source,tagStart,domBuilder); + break; + case '!':// <!doctype,<![CDATA,<!-- + locator&&position(tagStart); + end = parseDCC(source,tagStart,domBuilder,errorHandler); + break; + default: + + locator&&position(tagStart); + + var el = new ElementAttributes(); + + //elStartEnd + var end = parseElementStartPart(source,tagStart,el,entityReplacer,errorHandler); + var len = el.length; + + if(locator){ + if(len){ + //attribute position fixed + for(var i = 0;i<len;i++){ + var a = el[i]; + position(a.offset); + a.offset = copyLocator(locator,{}); + } + } + position(end); + } + if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){ + el.closed = true; + if(!entityMap.nbsp){ + errorHandler.warning('unclosed xml attribute'); + } + } + appendElement(el,domBuilder,parseStack); + + + if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){ + end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder) + }else{ + end++; + } + } + }catch(e){ + errorHandler.error('element parse error: '+e); + end = -1; + } + if(end>start){ + start = end; + }else{ + //TODO: 这里有可能sax回退,有位置错误风险 + appendText(Math.max(tagStart,start)+1); + } + } +} +function copyLocator(f,t){ + t.lineNumber = f.lineNumber; + t.columnNumber = f.columnNumber; + return t; +} + +/** + * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack); + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function parseElementStartPart(source,start,el,entityReplacer,errorHandler){ + var attrName; + var value; + var p = ++start; + var s = S_TAG;//status + while(true){ + var c = source.charAt(p); + switch(c){ + case '=': + if(s === S_ATTR){//attrName + attrName = source.slice(start,p); + s = S_EQ; + }else if(s === S_ATTR_S){ + s = S_EQ; + }else{ + //fatalError: equal must after attrName or space after attrName + throw new Error('attribute equal must after attrName'); + } + break; + case '\'': + case '"': + if(s === S_EQ){//equal + start = p+1; + p = source.indexOf(c,start) + if(p>0){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + el.add(attrName,value,start-1); + s = S_E; + }else{ + //fatalError: no end quot match + throw new Error('attribute value no end \''+c+'\' match'); + } + }else if(s == S_V){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + //console.log(attrName,value,start,p) + el.add(attrName,value,start); + //console.dir(el) + errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); + start = p+1; + s = S_E + }else{ + //fatalError: no equal before + throw new Error('attribute value must after "="'); + } + break; + case '/': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_E: + case S_S: + case S_C: + s = S_C; + el.closed = true; + case S_V: + case S_ATTR: + case S_ATTR_S: + break; + //case S_EQ: + default: + throw new Error("attribute invalid close char('/')") + } + break; + case ''://end document + //throw new Error('unexpected end of input') + errorHandler.error('unexpected end of input'); + case '>': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_E: + case S_S: + case S_C: + break;//normal + case S_V://Compatible state + case S_ATTR: + value = source.slice(start,p); + if(value.slice(-1) === '/'){ + el.closed = true; + value = value.slice(0,-1) + } + case S_ATTR_S: + if(s === S_ATTR_S){ + value = attrName; + } + if(s == S_V){ + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) + }else{ + errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') + el.add(value,value,start) + } + break; + case S_EQ: + throw new Error('attribute value missed!!'); + } +// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) + return p; + /*xml space '\x20' | #x9 | #xD | #xA; */ + case '\u0080': + c = ' '; + default: + if(c<= ' '){//space + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p));//tagName + s = S_S; + break; + case S_ATTR: + attrName = source.slice(start,p) + s = S_ATTR_S; + break; + case S_V: + var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value,start) + case S_E: + s = S_S; + break; + //case S_S: + //case S_EQ: + //case S_ATTR_S: + // void();break; + //case S_C: + //ignore warning + } + }else{//not space +//S_TAG, S_ATTR, S_EQ, S_V +//S_ATTR_S, S_E, S_S, S_C + switch(s){ + //case S_TAG:void();break; + //case S_ATTR:void();break; + //case S_V:void();break; + case S_ATTR_S: + errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!') + el.add(attrName,attrName,start); + start = p; + s = S_ATTR; + break; + case S_E: + errorHandler.warning('attribute space is required"'+attrName+'"!!') + case S_S: + s = S_ATTR; + start = p; + break; + case S_EQ: + s = S_V; + start = p; + break; + case S_C: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + } + p++; + } +} +/** + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function appendElement(el,domBuilder,parseStack){ + var tagName = el.tagName; + var localNSMap = null; + var currentNSMap = parseStack[parseStack.length-1].currentNSMap; + var i = el.length; + while(i--){ + var a = el[i]; + var qName = a.qName; + var value = a.value; + var nsp = qName.indexOf(':'); + if(nsp>0){ + var prefix = a.prefix = qName.slice(0,nsp); + var localName = qName.slice(nsp+1); + var nsPrefix = prefix === 'xmlns' && localName + }else{ + localName = qName; + prefix = null + nsPrefix = qName === 'xmlns' && '' + } + //can not set prefix,because prefix !== '' + a.localName = localName ; + //prefix == null for no ns prefix attribute + if(nsPrefix !== false){//hack!! + if(localNSMap == null){ + localNSMap = {} + //console.log(currentNSMap,0) + _copy(currentNSMap,currentNSMap={}) + //console.log(currentNSMap,1) + } + currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; + a.uri = 'http://www.w3.org/2000/xmlns/' + domBuilder.startPrefixMapping(nsPrefix, value) + } + } + var i = el.length; + while(i--){ + a = el[i]; + var prefix = a.prefix; + if(prefix){//no prefix attribute has no namespace + if(prefix === 'xml'){ + a.uri = 'http://www.w3.org/XML/1998/namespace'; + }if(prefix !== 'xmlns'){ + a.uri = currentNSMap[prefix] + + //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} + } + } + } + var nsp = tagName.indexOf(':'); + if(nsp>0){ + prefix = el.prefix = tagName.slice(0,nsp); + localName = el.localName = tagName.slice(nsp+1); + }else{ + prefix = null;//important!! + localName = el.localName = tagName; + } + //no prefix element has default namespace + var ns = el.uri = currentNSMap[prefix || '']; + domBuilder.startElement(ns,localName,tagName,el); + //endPrefixMapping and startPrefixMapping have not any help for dom builder + //localNSMap = null + if(el.closed){ + domBuilder.endElement(ns,localName,tagName); + if(localNSMap){ + for(prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) + } + } + }else{ + el.currentNSMap = currentNSMap; + el.localNSMap = localNSMap; + parseStack.push(el); + } +} +function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ + if(/^(?:script|textarea)$/i.test(tagName)){ + var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd); + var text = source.substring(elStartEnd+1,elEndStart); + if(/[&<]/.test(text)){ + if(/^script$/i.test(tagName)){ + //if(!/\]\]>/.test(text)){ + //lexHandler.startCDATA(); + domBuilder.characters(text,0,text.length); + //lexHandler.endCDATA(); + return elEndStart; + //} + }//}else{//text area + text = text.replace(/&#?\w+;/g,entityReplacer); + domBuilder.characters(text,0,text.length); + return elEndStart; + //} + + } + } + return elStartEnd+1; +} +function fixSelfClosed(source,elStartEnd,tagName,closeMap){ + //if(tagName in closeMap){ + var pos = closeMap[tagName]; + if(pos == null){ + //console.log(tagName) + pos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>') + } + return pos<elStartEnd; + //} +} +function _copy(source,target){ + for(var n in source){target[n] = source[n]} +} +function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!' + var next= source.charAt(start+2) + switch(next){ + case '-': + if(source.charAt(start + 3) === '-'){ + var end = source.indexOf('-->',start+4); + //append comment source.substring(4,end)//<!-- + if(end>start){ + domBuilder.comment(source,start+4,end-start-4); + return end+3; + }else{ + errorHandler.error("Unclosed comment"); + return -1; + } + }else{ + //error + return -1; + } + default: + if(source.substr(start+3,6) == 'CDATA['){ + var end = source.indexOf(']]>',start+9); + domBuilder.startCDATA(); + domBuilder.characters(source,start+9,end-start-9); + domBuilder.endCDATA() + return end+3; + } + //<!DOCTYPE + //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) + var matchs = split(source,start); + var len = matchs.length; + if(len>1 && /!doctype/i.test(matchs[0][0])){ + var name = matchs[1][0]; + var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0] + var sysid = len>4 && matchs[4][0]; + var lastMatch = matchs[len-1] + domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'), + sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2')); + domBuilder.endDTD(); + + return lastMatch.index+lastMatch[0].length + } + } + return -1; +} + + + +function parseInstruction(source,start,domBuilder){ + var end = source.indexOf('?>',start); + if(end){ + var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); + if(match){ + var len = match[0].length; + domBuilder.processingInstruction(match[1], match[2]) ; + return end+2; + }else{//error + return -1; + } + } + return -1; +} + +/** + * @param source + */ +function ElementAttributes(source){ + +} +ElementAttributes.prototype = { + setTagName:function(tagName){ + if(!tagNamePattern.test(tagName)){ + throw new Error('invalid tagName:'+tagName) + } + this.tagName = tagName + }, + add:function(qName,value,offset){ + if(!tagNamePattern.test(qName)){ + throw new Error('invalid attribute:'+qName) + } + this[this.length++] = {qName:qName,value:value,offset:offset} + }, + length:0, + getLocalName:function(i){return this[i].localName}, + getOffset:function(i){return this[i].offset}, + getQName:function(i){return this[i].qName}, + getURI:function(i){return this[i].uri}, + getValue:function(i){return this[i].value} +// ,getIndex:function(uri, localName)){ +// if(localName){ +// +// }else{ +// var qName = uri +// } +// }, +// getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))}, +// getType:function(uri,localName){} +// getType:function(i){}, +} + + + + +function _set_proto_(thiz,parent){ + thiz.__proto__ = parent; + return thiz; +} +if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){ + _set_proto_ = function(thiz,parent){ + function p(){}; + p.prototype = parent; + p = new p(); + for(parent in thiz){ + p[parent] = thiz[parent]; + } + return p; + } +} + +function split(source,start){ + var match; + var buf = []; + var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; + reg.lastIndex = start; + reg.exec(source);//skip < + while(match = reg.exec(source)){ + buf.push(match); + if(match[1])return buf; + } +} + +if(typeof require == 'function'){ + exports.XMLReader = XMLReader; +} + diff --git a/plugins/tiddlywiki/xmldom/files/tiddlywiki.files b/plugins/tiddlywiki/xmldom/files/tiddlywiki.files new file mode 100644 index 000000000..2e8d8a14e --- /dev/null +++ b/plugins/tiddlywiki/xmldom/files/tiddlywiki.files @@ -0,0 +1,38 @@ +{ + "tiddlers": [ + { + "file": "dom.js", + "fields": { + "type": "application/javascript", + "title": "$:/plugins/tiddlywiki/xmldom/dom", + "module-type": "library" + }, + "prefix": "", + "suffix": "" + },{ + "file": "dom-parser.js", + "fields": { + "type": "application/javascript", + "title": "$:/plugins/tiddlywiki/xmldom/dom-parser", + "module-type": "library" + }, + "prefix": "", + "suffix": "" + },{ + "file": "sax.js", + "fields": { + "type": "application/javascript", + "title": "$:/plugins/tiddlywiki/xmldom/sax", + "module-type": "library" + }, + "prefix": "", + "suffix": "" + },{ + "file": "LICENSE", + "fields": { + "type": "text/plain", + "title": "$:/plugins/tiddlywiki/xmldom/license" + } + } + ] +} diff --git a/plugins/tiddlywiki/xmldom/plugin.info b/plugins/tiddlywiki/xmldom/plugin.info new file mode 100644 index 000000000..d28b438a7 --- /dev/null +++ b/plugins/tiddlywiki/xmldom/plugin.info @@ -0,0 +1,7 @@ +{ + "title": "$:/plugins/tiddlywiki/xmldom", + "description": "Wrapper for xmldom", + "author": "JeremyRuston", + "core-version": ">=5.0.0", + "list": "readme license" +} diff --git a/plugins/tiddlywiki/xmldom/readme.tid b/plugins/tiddlywiki/xmldom/readme.tid new file mode 100644 index 000000000..098edfd03 --- /dev/null +++ b/plugins/tiddlywiki/xmldom/readme.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/xmldom/readme + +This plugin packages [[xmldom|https://github.com/jindw/xmldom]] for use by other plugins. It does not provide any end-user visible features. From c98ef97d236fb023c3b5099a5fc52c1e8da7eb4d Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Mon, 1 Feb 2016 21:34:28 +0000 Subject: [PATCH 224/242] Text-slicer: Use xmldom plugin so we can slice under Node.js --- .../tiddlywiki/text-slicer/modules/slicer.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/plugins/tiddlywiki/text-slicer/modules/slicer.js b/plugins/tiddlywiki/text-slicer/modules/slicer.js index 31c6d2548..ced19fb50 100644 --- a/plugins/tiddlywiki/text-slicer/modules/slicer.js +++ b/plugins/tiddlywiki/text-slicer/modules/slicer.js @@ -12,6 +12,8 @@ Main text-slicing logic /*global $tw: false */ "use strict"; +var DOMParser = require("$:/plugins/tiddlywiki/xmldom/dom-parser").DOMParser; + var SLICER_OUTPUT_TITLE = "$:/TextSlicer"; function Slicer(wiki,sourceTitle) { @@ -104,12 +106,16 @@ Slicer.prototype.isBlank = function(s) { }; Slicer.prototype.getSourceHtmlDocument = function(tiddler) { - this.iframe = document.createElement("iframe"); - document.body.appendChild(this.iframe); - this.iframe.contentWindow.document.open(); - this.iframe.contentWindow.document.write(tiddler.fields.text); - this.iframe.contentWindow.document.close(); - return this.iframe.contentWindow.document; + if($tw.browser) { + this.iframe = document.createElement("iframe"); + document.body.appendChild(this.iframe); + this.iframe.contentWindow.document.open(); + this.iframe.contentWindow.document.write(tiddler.fields.text); + this.iframe.contentWindow.document.close(); + return this.iframe.contentWindow.document; + } else { + return new DOMParser().parseFromString(tiddler.fields.text); + } }; Slicer.prototype.getSourceWikiDocument = function(tiddler) { From 3e78f5cffd9b40c229675f780b4d5c4557285305 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Tue, 2 Feb 2016 17:40:29 +0000 Subject: [PATCH 225/242] Text-slicer: Fix problem with static template for list items We were rendering the children of the list item outside of the generated LI tag. --- plugins/tiddlywiki/text-slicer/templates/static/item.tid | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/tiddlywiki/text-slicer/templates/static/item.tid b/plugins/tiddlywiki/text-slicer/templates/static/item.tid index 268320c13..1c7f5a703 100644 --- a/plugins/tiddlywiki/text-slicer/templates/static/item.tid +++ b/plugins/tiddlywiki/text-slicer/templates/static/item.tid @@ -4,6 +4,7 @@ title: $:/plugins/tiddlywiki/text-slicer/templates/static/item <$transclude/> +<$list filter="[list<currentTiddler>!has[draft.of]]" template="$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler"/> + `</li>` -<$list filter="[list<currentTiddler>!has[draft.of]]" template="$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler"/> From 1276c26529852563b8ea3f9a4e9680edf548993b Mon Sep 17 00:00:00 2001 From: Thomas <thomas.elmiger@gmail.com> Date: Tue, 2 Feb 2016 22:33:29 +0100 Subject: [PATCH 226/242] Signing the CLA for individuals --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index b219cb0e1..32c306cc6 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -268,3 +268,5 @@ Cameron Fischer, @flibbles, 2016/01/08 Jim, @ARRRRGH, 2016/01/11 Koke Laast, @Koke24, 2016/01/27 + +Thomas Elmiger, @telmiger, 2016/02/02 From 1335dff45013f83fb06a47453e6063b5c0e2c0b3 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Wed, 3 Feb 2016 12:48:11 +0000 Subject: [PATCH 227/242] Text-slicer: Checkbox for hiding document metadata --- .../text-slicer/templates/interactive/document.tid | 4 ++++ plugins/tiddlywiki/text-slicer/ui/document/header.tid | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/tiddlywiki/text-slicer/templates/interactive/document.tid b/plugins/tiddlywiki/text-slicer/templates/interactive/document.tid index 171c73c26..875f16493 100644 --- a/plugins/tiddlywiki/text-slicer/templates/interactive/document.tid +++ b/plugins/tiddlywiki/text-slicer/templates/interactive/document.tid @@ -8,6 +8,10 @@ $:/config/plugins/tiddlywiki/text-slicer/show-preview-document/$(tv-heading-stat $:/config/plugins/tiddlywiki/text-slicer/show-toolbar/$(currentTiddler)$ \end +\define config-show-metadata() +$:/config/plugins/tiddlywiki/text-slicer/show-metadata/$(currentTiddler)$ +\end + \define config-heading-status() $:/config/plugins/tiddlywiki/text-slicer/heading-status/$(currentTiddler)$ \end diff --git a/plugins/tiddlywiki/text-slicer/ui/document/header.tid b/plugins/tiddlywiki/text-slicer/ui/document/header.tid index 3cd254183..1908dff41 100644 --- a/plugins/tiddlywiki/text-slicer/ui/document/header.tid +++ b/plugins/tiddlywiki/text-slicer/ui/document/header.tid @@ -20,13 +20,12 @@ title: $:/plugins/tiddlywiki/text-slicer/ui/document/header ''Exclude filter'': <$edit-text field="toc-exclude-filter"/> -<$checkbox tiddler=<<config-show-toolbar>> field="text" checked="yes" unchecked="no" default="no"> Show toolbar</$checkbox> - -<$button> +<$checkbox tiddler=<<config-show-toolbar>> field="text" checked="yes" unchecked="no" default="no"> Show toolbar </$checkbox> <$checkbox tiddler=<<config-show-metadata>> field="text" checked="yes" unchecked="no" default="no"> Show metadata</$checkbox> <$button> <$action-sendmessage $message="tm-open-window" $param=<<currentTiddler>> template="$:/plugins/tiddlywiki/text-slicer/templates/plain/document"/> View document </$button> +<$reveal state=<<config-show-metadata>> default="no" type="match" text="yes"> <table> <tbody> <$list filter="[all[system+tiddlers]tag[$:/tags/DocumentMetaData]]" variable="listItem"> @@ -34,5 +33,7 @@ View document </$list> </tbody> </table> +</$reveal> + </div> From 8904a6dba6ead2cb93d3517b25c757f3ba7cdea8 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Thu, 4 Feb 2016 10:13:08 +0000 Subject: [PATCH 228/242] First commit of Evernote migration plugin Starts to address #2268 --- boot/boot.js | 1 + editions/tw5.com/tiddlywiki.info | 3 +- plugins/tiddlywiki/evernote/docs.tid | 4 ++ .../evernote/modules/enex-deserializer.js | 47 +++++++++++++++++++ plugins/tiddlywiki/evernote/plugin.info | 7 +++ plugins/tiddlywiki/evernote/readme.tid | 11 +++++ 6 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 plugins/tiddlywiki/evernote/docs.tid create mode 100644 plugins/tiddlywiki/evernote/modules/enex-deserializer.js create mode 100644 plugins/tiddlywiki/evernote/plugin.info create mode 100644 plugins/tiddlywiki/evernote/readme.tid diff --git a/boot/boot.js b/boot/boot.js index 9d47c9ba8..62b85cffc 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -1835,6 +1835,7 @@ $tw.boot.startup = function(options) { $tw.utils.registerFileType("audio/mp3","base64",".mp3"); $tw.utils.registerFileType("audio/mp4","base64",[".mp4",".m4a"]); $tw.utils.registerFileType("text/x-markdown","utf8",[".md",".markdown"]); + $tw.utils.registerFileType("application/enex+xml","utf8",".enex"); // Create the wiki store for the app $tw.wiki = new $tw.Wiki(); // Install built in tiddler fields modules diff --git a/editions/tw5.com/tiddlywiki.info b/editions/tw5.com/tiddlywiki.info index 703bec3b9..1d6574311 100644 --- a/editions/tw5.com/tiddlywiki.info +++ b/editions/tw5.com/tiddlywiki.info @@ -4,7 +4,8 @@ "tiddlywiki/googleanalytics", "tiddlywiki/nodewebkitsaver", "tiddlywiki/browser-sniff", - "tiddlywiki/railroad" + "tiddlywiki/railroad", + "tiddlywiki/evernote" ], "themes": [ "tiddlywiki/vanilla", diff --git a/plugins/tiddlywiki/evernote/docs.tid b/plugins/tiddlywiki/evernote/docs.tid new file mode 100644 index 000000000..d3fd38334 --- /dev/null +++ b/plugins/tiddlywiki/evernote/docs.tid @@ -0,0 +1,4 @@ +title: $:/plugins/tiddlywiki/evernote/docs + +! Introduction + diff --git a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js new file mode 100644 index 000000000..ce880fdf9 --- /dev/null +++ b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js @@ -0,0 +1,47 @@ +/*\ +title: $:/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +type: application/javascript +module-type: tiddlerdeserializer + +ENEX file deserializer + +For details see: https://blog.evernote.com/tech/2013/08/08/evernote-export-format-enex/ + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +// DOMParser = require("$:/plugins/tiddlywiki/xmldom/dom-parser").DOMParser; + +/* +Parse an ENEX file into tiddlers +*/ +exports["application/enex+xml"] = function(text,fields) { + // Collect output tiddlers in an array + var results = []; + // Parse the XML document + var parser = new DOMParser(), + doc = parser.parseFromString(text,"application/xml"); + // Output a report tiddler with information about the import + var enex = doc.querySelector("en-export"); + results.push({ + title: "Evernote Import Report", + text: "Evernote file imported on " + enex.getAttribute("export-date") + " from " + enex.getAttribute("application") + " (" + enex.getAttribute("version") + ")" + }) + // Get all the "note" nodes + var noteNodes = doc.querySelectorAll("note"); + $tw.utils.each(noteNodes,function(noteNode) { + results.push({ + title: noteNode.querySelector("title").textContent, + type: "text/html", + text: noteNode.querySelector("content").textContent + }); + }); + // Return the output tiddlers + return results; +}; + +})(); diff --git a/plugins/tiddlywiki/evernote/plugin.info b/plugins/tiddlywiki/evernote/plugin.info new file mode 100644 index 000000000..baf35156e --- /dev/null +++ b/plugins/tiddlywiki/evernote/plugin.info @@ -0,0 +1,7 @@ +{ + "title": "$:/plugins/tiddlywiki/evernote", + "description": "Evernote migration tools", + "author": "JeremyRuston", + "core-version": ">=5.0.0", + "list": "readme docs" +} diff --git a/plugins/tiddlywiki/evernote/readme.tid b/plugins/tiddlywiki/evernote/readme.tid new file mode 100644 index 000000000..fd946fd52 --- /dev/null +++ b/plugins/tiddlywiki/evernote/readme.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/evernote/readme + +This plugin contains tool to assist migration of content from Evernote ENEX files. + +!! Instructions + +# Download or save your ENEX file from Evernote +# Rename the file to have an `.enex` extension +# Drag the file into the TiddlyWiki browser window +## Alternatively, click the "Import" button in the "Tools" sidebar tab +# Review and accept the converted tiddlers From 1d35087f29d5d5c1f4ab5cc1d0d99bf4b15b5f7b Mon Sep 17 00:00:00 2001 From: Devin Weaver <suki@tritarget.org> Date: Thu, 4 Feb 2016 18:31:24 -0500 Subject: [PATCH 229/242] Add additional fields support for evernote plugin Relates to Issue #2268 Add the additional field defined in the XML as properties to the result. This also appears to capture the 'author' field. --- plugins/tiddlywiki/evernote/modules/enex-deserializer.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js index ce880fdf9..698d532f8 100644 --- a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +++ b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js @@ -34,11 +34,15 @@ exports["application/enex+xml"] = function(text,fields) { // Get all the "note" nodes var noteNodes = doc.querySelectorAll("note"); $tw.utils.each(noteNodes,function(noteNode) { - results.push({ + var result = { title: noteNode.querySelector("title").textContent, type: "text/html", text: noteNode.querySelector("content").textContent + }; + $tw.utils.each(noteNodes.querySelector("note-attributes").childNodes,function(attrNode) { + result[attrNode.tagName] = attrNode.textContent; }); + results.push(result); }); // Return the output tiddlers return results; From 4b70257aca4c54ccb43f588ffc8e293a663d97b5 Mon Sep 17 00:00:00 2001 From: Devin Weaver <suki@tritarget.org> Date: Thu, 4 Feb 2016 18:37:45 -0500 Subject: [PATCH 230/242] Add evernote's additional resources as tiddlers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Relates to Issue #2268 Based in the [example XML][1] attachments are listed in the <resources> node. Since in TiddlyWiki these would be media tiddlers I add then one by one as separate tiddlers. There are some things that still need to happen. There should be a mime type check so we don't attempt to import media tha TiddlyWiki doesn't support. Also the example suggests the data is base64 encoded so I blindly use that for the text attribute. Should there be a `data:mediatyp;base64,…` prefix? [1]: https://gist.github.com/evernotegists/6116886 --- plugins/tiddlywiki/evernote/modules/enex-deserializer.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js index 698d532f8..6293905a1 100644 --- a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +++ b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js @@ -43,6 +43,15 @@ exports["application/enex+xml"] = function(text,fields) { result[attrNode.tagName] = attrNode.textContent; }); results.push(result); + $tw.utils.each(noteNode.querySelectorAll("resources"),function(resourceNode) { + results.push({ + title: resourceNode.querySelector("resource-attributes>file-name").textContent, + type: resourceNode.querySelector("mime").textContent, + width: resourceNode.querySelector("width").textContent, + height: resourceNode.querySelector("height").textContent, + text: resourceNode.querySelector("data").textContent + }); + }); }); // Return the output tiddlers return results; From 4525a3d631ff187cee0cb2e8e3ffb19be4d50e59 Mon Sep 17 00:00:00 2001 From: Devin Weaver <suki@tritarget.org> Date: Thu, 4 Feb 2016 19:24:46 -0500 Subject: [PATCH 231/242] Add tags support to evernote plugin Relates to Issue #2268 I tried to map over the list of tags but NodeLists are not arrays and so need to be converted. This looks ugly and probably should be abstracted to a function. Come to think of it should we have a `$tw.utils.map()` function? --- plugins/tiddlywiki/evernote/modules/enex-deserializer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js index 6293905a1..494bbecb4 100644 --- a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +++ b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js @@ -37,6 +37,7 @@ exports["application/enex+xml"] = function(text,fields) { var result = { title: noteNode.querySelector("title").textContent, type: "text/html", + tags: Array.prototype.slice.call(noteNode.querySelectorAll("tag")).map(function(tag) { return tag.textContent; }).join(","), text: noteNode.querySelector("content").textContent }; $tw.utils.each(noteNodes.querySelector("note-attributes").childNodes,function(attrNode) { From b47f505588f37077153d5e0eb41397bb571b801c Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 17:39:02 +0000 Subject: [PATCH 232/242] Freeze the entire tiddler object As seen in the first pass of #2247, it was previously inadvertently possible for callers to modify the tiddler object itself by adding and replacing properties. --- boot/boot.js | 1 + 1 file changed, 1 insertion(+) diff --git a/boot/boot.js b/boot/boot.js index 62b85cffc..1a41b4d07 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -812,6 +812,7 @@ $tw.Tiddler = function(/* [fields,] fields */) { } // Freeze the tiddler against modification Object.freeze(this.fields); + Object.freeze(this); }; $tw.Tiddler.prototype.hasField = function(field) { From 147dc128bc8ff18436764d5f47d4ce36d1a33d0e Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 18:42:54 +0000 Subject: [PATCH 233/242] Add link to Mark Gibb's NetworkWorld article --- ...ki_revisited__by_Mark_Gibbs,_NetworkWorld.tid | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 editions/tw5.com/tiddlers/community/articles/_A_free,_open_source_wiki_revisited__by_Mark_Gibbs,_NetworkWorld.tid diff --git a/editions/tw5.com/tiddlers/community/articles/_A_free,_open_source_wiki_revisited__by_Mark_Gibbs,_NetworkWorld.tid b/editions/tw5.com/tiddlers/community/articles/_A_free,_open_source_wiki_revisited__by_Mark_Gibbs,_NetworkWorld.tid new file mode 100644 index 000000000..dc402677a --- /dev/null +++ b/editions/tw5.com/tiddlers/community/articles/_A_free,_open_source_wiki_revisited__by_Mark_Gibbs,_NetworkWorld.tid @@ -0,0 +1,16 @@ +created: 20160204225047445 +modified: 20160204225307847 +tags: Articles +title: "A free, open source wiki revisited" by Mark Gibbs, NetworkWorld +type: text/vnd.tiddlywiki +url: http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html + +Interesting article giving the perspective of someone who has been away from TiddlyWiki for a few years: + +{{!!url}} + +<<< +Way back in the mists of time (actually, January 2009) I wrote about a really cool tool called TiddlyWiki, a “non-linear personal web notebook”. Fast forward to today and I just had an out of body experience: Completely by accident I found a TiddlyWiki that I started when I wrote that piece and it still works! + +Finding code that works flawlessly after just two or three years is magical enough but after seven years?! And given that TiddlyWiki is written as a single page Web application and considering how different browsers are now than they were in 2009, the fact that the old version of TiddlyWiki still works is not short of miraculous. +<<< From 8bc0633b6ff1b6031a15e65b2bc5e70f9bd3df73 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 18:43:52 +0000 Subject: [PATCH 234/242] Refactor AdvancedSearch/Filter to make buttons extensible --- core/ui/AdvancedSearch/Filter.tid | 24 +------------------ .../ui/AdvancedSearch/FilterButtons/clear.tid | 9 +++++++ .../AdvancedSearch/FilterButtons/dropdown.tid | 19 +++++++++++++++ .../AdvancedSearch/FilterButtons/export.tid | 6 +++++ 4 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 core/ui/AdvancedSearch/FilterButtons/clear.tid create mode 100644 core/ui/AdvancedSearch/FilterButtons/dropdown.tid create mode 100644 core/ui/AdvancedSearch/FilterButtons/export.tid diff --git a/core/ui/AdvancedSearch/Filter.tid b/core/ui/AdvancedSearch/Filter.tid index 93179bbaa..f6f13a863 100644 --- a/core/ui/AdvancedSearch/Filter.tid +++ b/core/ui/AdvancedSearch/Filter.tid @@ -3,35 +3,13 @@ tags: $:/tags/AdvancedSearch caption: {{$:/language/Search/Filter/Caption}} \define lingo-base() $:/language/Search/ -<$linkcatcher to="$:/temp/advancedsearch"> - <<lingo Filter/Hint>> <div class="tc-search tc-advanced-search"> <$edit-text tiddler="$:/temp/advancedsearch" type="search" tag="input"/> -<$button popup=<<qualify "$:/state/filterDropdown">> class="tc-btn-invisible"> -{{$:/core/images/down-arrow}} -</$button> -<$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> -<$button class="tc-btn-invisible"> -<$action-setfield $tiddler="$:/temp/advancedsearch" $field="text" $value=""/> -{{$:/core/images/close-button}} -</$button> -<$macrocall $name="exportButton" exportFilter={{$:/temp/advancedsearch}} lingoBase="$:/language/Buttons/ExportTiddlers/"/> -</$reveal> +<$list filter="[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]"><$transclude/></$list> </div> -<div class="tc-block-dropdown-wrapper"> -<$reveal state=<<qualify "$:/state/filterDropdown">> type="nomatch" text="" default=""> -<div class="tc-block-dropdown tc-edit-type-dropdown"> -<$list filter="[all[shadows+tiddlers]tag[$:/tags/Filter]]"><$link to={{!!filter}}><$transclude field="description"/></$link> -</$list> -</div> -</$reveal> -</div> - -</$linkcatcher> - <$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> <$set name="resultCount" value="""<$count filter={{$:/temp/advancedsearch}}/>"""> <div class="tc-search-results"> diff --git a/core/ui/AdvancedSearch/FilterButtons/clear.tid b/core/ui/AdvancedSearch/FilterButtons/clear.tid new file mode 100644 index 000000000..3dd22e03d --- /dev/null +++ b/core/ui/AdvancedSearch/FilterButtons/clear.tid @@ -0,0 +1,9 @@ +title: $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear +tags: $:/tags/AdvancedSearch/FilterButton + +<$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> +<$button class="tc-btn-invisible"> +<$action-setfield $tiddler="$:/temp/advancedsearch" $field="text" $value=""/> +{{$:/core/images/close-button}} +</$button> +</$reveal> diff --git a/core/ui/AdvancedSearch/FilterButtons/dropdown.tid b/core/ui/AdvancedSearch/FilterButtons/dropdown.tid new file mode 100644 index 000000000..ee1c5eb37 --- /dev/null +++ b/core/ui/AdvancedSearch/FilterButtons/dropdown.tid @@ -0,0 +1,19 @@ +title: $:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown +tags: $:/tags/AdvancedSearch/FilterButton + +<span class="tc-popup-keep"> +<$button popup=<<qualify "$:/state/filterDropdown">> class="tc-btn-invisible"> +{{$:/core/images/down-arrow}} +</$button> +</span> + +<$reveal state=<<qualify "$:/state/filterDropdown">> type="popup" position="belowleft" animate="yes"> +<$linkcatcher to="$:/temp/advancedsearch"> +<div class="tc-block-dropdown-wrapper"> +<div class="tc-block-dropdown tc-edit-type-dropdown"> +<$list filter="[all[shadows+tiddlers]tag[$:/tags/Filter]]"><$link to={{!!filter}}><$transclude field="description"/></$link> +</$list> +</div> +</div> +</$linkcatcher> +</$reveal> diff --git a/core/ui/AdvancedSearch/FilterButtons/export.tid b/core/ui/AdvancedSearch/FilterButtons/export.tid new file mode 100644 index 000000000..ec9ea91ac --- /dev/null +++ b/core/ui/AdvancedSearch/FilterButtons/export.tid @@ -0,0 +1,6 @@ +title: $:/core/ui/AdvancedSearch/Filter/FilterButtons/export +tags: $:/tags/AdvancedSearch/FilterButton + +<$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> +<$macrocall $name="exportButton" exportFilter={{$:/temp/advancedsearch}} lingoBase="$:/language/Buttons/ExportTiddlers/"/> +</$reveal> From adf45b346847a81d4ed26397466daa4514035bb9 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 18:44:43 +0000 Subject: [PATCH 235/242] Add a bulk delete button I needed this in my day job, but think we need to do better on bulk operations --- .../AdvancedSearch/FilterButtons/delete.tid | 26 +++++++++++++++++++ core/wiki/tags/AdvancedSearchFilterButton.tid | 2 ++ themes/tiddlywiki/vanilla/base.tid | 5 ++++ 3 files changed, 33 insertions(+) create mode 100644 core/ui/AdvancedSearch/FilterButtons/delete.tid create mode 100644 core/wiki/tags/AdvancedSearchFilterButton.tid diff --git a/core/ui/AdvancedSearch/FilterButtons/delete.tid b/core/ui/AdvancedSearch/FilterButtons/delete.tid new file mode 100644 index 000000000..fea48a667 --- /dev/null +++ b/core/ui/AdvancedSearch/FilterButtons/delete.tid @@ -0,0 +1,26 @@ +title: $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete +tags: $:/tags/AdvancedSearch/FilterButton + +<$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> +<$button popup=<<qualify "$:/state/filterDeleteDropdown">> class="tc-btn-invisible"> +{{$:/core/images/delete-button}} +</$button> +</$reveal> + +<$reveal state=<<qualify "$:/state/filterDeleteDropdown">> type="popup" position="belowleft" animate="yes"> +<div class="tc-block-dropdown-wrapper"> +<div class="tc-block-dropdown tc-edit-type-dropdown"> +<div class="tc-dropdown-item-plain"> +<$set name="resultCount" value="""<$count filter={{$:/temp/advancedsearch}}/>"""> +Are you sure you wish to delete <<resultCount>> tiddler(s)? +</$set> +</div> +<div class="tc-dropdown-item-plain"> +<$button class="tc-btn"> +<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/> +Delete these tiddlers +</$button> +</div> +</div> +</div> +</$reveal> diff --git a/core/wiki/tags/AdvancedSearchFilterButton.tid b/core/wiki/tags/AdvancedSearchFilterButton.tid new file mode 100644 index 000000000..74d38bdc2 --- /dev/null +++ b/core/wiki/tags/AdvancedSearchFilterButton.tid @@ -0,0 +1,2 @@ +title: $:/tags/AdvancedSearch/FilterButton +list: $:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index 35d969209..c922b1072 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1315,6 +1315,11 @@ html body.tc-body.tc-single-tiddler-window { padding: 0px 10px 0px 10px; } +.tc-drop-down .tc-dropdown-item-plain, +.tc-block-dropdown .tc-dropdown-item-plain { + padding: 4px 14px 4px 7px; +} + .tc-drop-down .tc-dropdown-item, .tc-block-dropdown .tc-dropdown-item { padding: 4px 14px 4px 7px; From 46800d790a6521aafba24fc9cb9e0d0e8f1a48a2 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 18:46:01 +0000 Subject: [PATCH 236/242] Text-slicer: Add list-children filter operator Again, I needed this for the day job. @felixhayashi I think you submitted a pull request for something similar, would this version meet your needs? --- .../modules/filters/list-children.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 plugins/tiddlywiki/text-slicer/modules/filters/list-children.js diff --git a/plugins/tiddlywiki/text-slicer/modules/filters/list-children.js b/plugins/tiddlywiki/text-slicer/modules/filters/list-children.js new file mode 100644 index 000000000..443f80a0b --- /dev/null +++ b/plugins/tiddlywiki/text-slicer/modules/filters/list-children.js @@ -0,0 +1,38 @@ +/*\ +title: $:/core/modules/filters/list-children.js +type: application/javascript +module-type: filteroperator + +Filter operator returning all the descendents of a tiddler listed in the "list" field + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +/* +Export our filter function +*/ +exports["list-children"] = function(source,operator,options) { + var children = {}, + processTiddler = function(title) { + var tiddler = options.wiki.getTiddler(title); + if(tiddler && !$tw.utils.hop(children,title)) { + children[title] = true; + var list = options.wiki.getTiddlerList(title,operator.operand); + list.forEach(function(listItem) { + if(!$tw.utils.hop(children,listItem)) { + processTiddler(listItem); + } + }); + } + }; + source(function(tiddler,title) { + processTiddler(title); + }); + return Object.keys(children); +}; + +})(); From 8f5eaf51948d5b9fce1791479ce82feaeb4fbb31 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 18:46:11 +0000 Subject: [PATCH 237/242] Release note for 5.1.12 --- .../prerelease/tiddlers/Release 5.1.12.tid | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 editions/prerelease/tiddlers/Release 5.1.12.tid diff --git a/editions/prerelease/tiddlers/Release 5.1.12.tid b/editions/prerelease/tiddlers/Release 5.1.12.tid new file mode 100644 index 000000000..4f0436693 --- /dev/null +++ b/editions/prerelease/tiddlers/Release 5.1.12.tid @@ -0,0 +1,40 @@ +caption: 5.1.12 +created: 20160205184203773 +modified: 20160205184203773 +tags: ReleaseNotes +title: Release 5.1.12 +type: text/vnd.tiddlywiki + +//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.11...v5.1.12]]// + +! Major Improvements + +!! TBD + +! Other Improvements + +!! Translation Improvements + +* TBD + +!! Usability Improvements + +* TBD + +!! Hackability Improvements + +* TBD + +!! Bug Fixes + +* TBD + +!! Node.js Improvements + +* TBD + +!! Contributors + +[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki: + +* [[@telmiger|https://github.com/telmiger]] From fddf18b9202a1e0bc3d3c7aa269243cb5f86a06f Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 18:54:32 +0000 Subject: [PATCH 238/242] Add xmldom plugin to text-slicer edition --- editions/text-slicer/tiddlywiki.info | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/editions/text-slicer/tiddlywiki.info b/editions/text-slicer/tiddlywiki.info index 8fa0682e3..11e1808de 100644 --- a/editions/text-slicer/tiddlywiki.info +++ b/editions/text-slicer/tiddlywiki.info @@ -1,7 +1,8 @@ { "description": "Tools for slicing up long texts into individual tiddlers", "plugins": [ - "tiddlywiki/text-slicer" + "tiddlywiki/text-slicer", + "tiddlywiki/xmldom" ], "languages": [ ], From 6aac2b00c923966404f1e3e0bfd3430a8ab546e1 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 19:03:58 +0000 Subject: [PATCH 239/242] Correct typo in #2272 --- plugins/tiddlywiki/evernote/modules/enex-deserializer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js index 494bbecb4..6e250fb16 100644 --- a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +++ b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js @@ -40,7 +40,7 @@ exports["application/enex+xml"] = function(text,fields) { tags: Array.prototype.slice.call(noteNode.querySelectorAll("tag")).map(function(tag) { return tag.textContent; }).join(","), text: noteNode.querySelector("content").textContent }; - $tw.utils.each(noteNodes.querySelector("note-attributes").childNodes,function(attrNode) { + $tw.utils.each(noteNode.querySelector("note-attributes").childNodes,function(attrNode) { result[attrNode.tagName] = attrNode.textContent; }); results.push(result); From 5b925ed868b31bcae4dcc95cd519a701b871d11a Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 19:48:37 +0000 Subject: [PATCH 240/242] Further tweaks to #2272 @sukima the main issue with the previous code was that it incorrectly used comma to delimit tags. We actually use spaces, and double square brackets to delimit tags containing spaces. Better is to leave the tags field as an array; the core will serialise it correctly as required. I also made some minor consistency tweaks. --- plugins/tiddlywiki/evernote/modules/enex-deserializer.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js index 6e250fb16..f01156541 100644 --- a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +++ b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js @@ -37,10 +37,13 @@ exports["application/enex+xml"] = function(text,fields) { var result = { title: noteNode.querySelector("title").textContent, type: "text/html", - tags: Array.prototype.slice.call(noteNode.querySelectorAll("tag")).map(function(tag) { return tag.textContent; }).join(","), + tags: [], text: noteNode.querySelector("content").textContent }; - $tw.utils.each(noteNode.querySelector("note-attributes").childNodes,function(attrNode) { + $tw.utils.each(noteNode.querySelectorAll("tag"),function(tagNode) { + result.tags.push(tagNode.textContent); + }); + $tw.utils.each(noteNode.querySelectorAll("note-attributes"),function(attrNode) { result[attrNode.tagName] = attrNode.textContent; }); results.push(result); From b3e0e134ab4b6d5076f9fb418785a7451a1c3d59 Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 19:48:50 +0000 Subject: [PATCH 241/242] Include xmldom plugin in full edition Required by text-slicer --- editions/full/tiddlywiki.info | 1 + 1 file changed, 1 insertion(+) diff --git a/editions/full/tiddlywiki.info b/editions/full/tiddlywiki.info index 9b6f87a09..26138e18b 100644 --- a/editions/full/tiddlywiki.info +++ b/editions/full/tiddlywiki.info @@ -16,6 +16,7 @@ "tiddlywiki/railroad", "tiddlywiki/stacked-view", "tiddlywiki/text-slicer", + "tiddlywiki/xmldom", "tiddlywiki/powered-by-tiddlywiki" ], "languages": [ From 5238b4d5039d00bc2971c7f2e0e209a2c667bded Mon Sep 17 00:00:00 2001 From: Jermolene <jeremy@jermolene.com> Date: Fri, 5 Feb 2016 23:05:24 +0000 Subject: [PATCH 242/242] Evernote plugin: fix crash with missing fields --- .../evernote/modules/enex-deserializer.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js index f01156541..3a4a2e96b 100644 --- a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +++ b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js @@ -35,10 +35,10 @@ exports["application/enex+xml"] = function(text,fields) { var noteNodes = doc.querySelectorAll("note"); $tw.utils.each(noteNodes,function(noteNode) { var result = { - title: noteNode.querySelector("title").textContent, + title: getTextContent(noteNode,"title"), type: "text/html", tags: [], - text: noteNode.querySelector("content").textContent + text: getTextContent(noteNode,"content") }; $tw.utils.each(noteNode.querySelectorAll("tag"),function(tagNode) { result.tags.push(tagNode.textContent); @@ -49,11 +49,11 @@ exports["application/enex+xml"] = function(text,fields) { results.push(result); $tw.utils.each(noteNode.querySelectorAll("resources"),function(resourceNode) { results.push({ - title: resourceNode.querySelector("resource-attributes>file-name").textContent, - type: resourceNode.querySelector("mime").textContent, - width: resourceNode.querySelector("width").textContent, - height: resourceNode.querySelector("height").textContent, - text: resourceNode.querySelector("data").textContent + title: getTextContent(resourceNode,"resource-attributes>file-name"), + type: getTextContent(resourceNode,"mime"), + width: getTextContent(resourceNode,"width"), + height: getTextContent(resourceNode,"height"), + text: getTextContent(resourceNode,"data") }); }); }); @@ -61,4 +61,8 @@ exports["application/enex+xml"] = function(text,fields) { return results; }; +function getTextContent(node,selector) { + return (node.querySelector(selector) || {}).textContent; +} + })();